首页 > 其他分享 >第六章 处理函数

第六章 处理函数

时间:2023-10-17 13:08:25浏览次数:37  
标签:语句 sal employee 举例 SQL 第六章 处理函数 select

6.1数据处理函数(单行处理函数)

函数名

功能

lower

转换小写

upper

转换大写

substr

取子串(substr(被截取的字符串,起始下标,截取的长度)),注意:起始下标是1不是0

length

取长度

trim

去字符串首位空格

str_to_date

将字符串转换成日期

date_format

格式化日期

format

设置千分位

round

四舍五入

rand()

生成随机数

ifnull

可以将null转换成一个具体值

注:数据处理函数是该数据本身特有的,有些函数可能在其它数据库不起作用。

6.1.1 lower函数

举例:查询员工姓名,将员工姓名全部转换成小写

SQL语句:select lower(ename) from employee;


6.1.2 upper函数

举例:查询员工姓名,将员工姓名全部转换成大写

SQL语句:select upper(ename) from employee;

第六章 处理函数_SQL

6.1.3 substr函数

举例:查询员工姓名中第二个字母为A的所有员工

SQL语句:select ename from employee where substr(ename,2,1)='A';


联想模糊查询:select ename from employeewhere ename like '_A%';

6.1.4 length函数

举例:取得员工姓名长度

SQL语句:select ename,length(ename)as LENGTH from employee;


6.1.5 trim函数

举例:查询所有开发人员的姓名

SQL语句:select ename,job from employee where job=trim(' 开发人员  ');

第六章 处理函数_SQL_02

6.1.6 round函数

用法:round(要四舍五入的数字,四舍五入到哪一位),默认保留整数位

举例1:保留整数位或不保留小数位

SQL语句:select round(123.45);或者 select round(1123.45);


举例2:保留一位小数位

SQL语句:select round(123.45,1);


举例2:保留两位小数位

SQL语句:select round(123.456,2);


举例2:个位数四舍五入

SQL语句:select round(127.4,-1);


6.1.7 rand函数

举例1:生成一个0到1之间的随机数

SQL语句:select rand();

第六章 处理函数_字符串_03

举例2:生成一个0到100之间的随机整数

SQL语句:select round(rand()*100);


6.1.8 ifnull函数

用法:ifnull(字段名称,将要替换)

结论:在数据库中,有Null参与数学运算的结果一定为Null;为了防止计算结果出现Null,建议先使用ifnull函数预先处理。

举例:查询员工的奖金,如果为Null设置为0;

SQL语句:select ename,ifnull(permium,0)permium from employee;

6.1.9 case…when…then…else…end

举例:根据工作岗位涨工资,当为项目经理时,工资涨2000,当为项目组长时,工资涨1000,其它岗位工资不变。

SQL语句:select ename,sal,job,(

case job

when '项目组长' then sal+2000

when '开发人员' then sal+1000

else sal

end

)as newsal from employee;


6.1.10 str_to_date函数

作用:将‘日期字符串’转换为‘日期类型’数据

执行结果:DATE类型

用法:str_to_date(‘日期字符串’,‘日期格式’)

MySQL日期格式:

%Y:代表4位的年份

%y:代表2位的年份

%m:代表月,格式(01 … … 12)

%c:代表月,格式(1 … … 12)

%d:代表日

%H:代表小时,格式(00 … … 23)

%h:代表小时,格式(01 … … 12)

%i:代表分种,格式(00 … … 59)

%r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)  

%T:代表 时间,格式为24 小时(hh:mm:ss) 

%S:代表 秒,格式为(00……59)  

%s:代表 秒,格式为(00……59) 

联想知识点:java中的日期格式

yyyy 年

MM 月

dd 日

HH 时

mm 分

ss 秒

SSS 毫秒

Java中将字符串转换为日期类型:

SimpleDateFormat sdf = new

SimpleDateFormat(“yyyy-MM-dd HH:mm:ss SSS”);

Date date = sdf.parse(“2008-08-08 20:00:00:000”);

举例1:查询出2012-08-25入职的员工

SQL语句:select ename,hiredate from employeewhere hiredate='2012-08-25';


执行成功原因:

输入的日期字符串格式与MySQL默认日期格式相同,MySQL默认日期格式:%y-%m-%d

举例2:查询出08-25-2012入职的员工

SQL语句:select ename,hiredate from employee where hiredate = '08-25-2012';(错误的)


错误原因:‘02-20-1981’是一个字符串varchar类型,与DATE类型不匹配

正确的SQL语句:select ename,hiredate from employeewhere hiredate = str_to_date('08-25-2012','%m-%d-%Y');


总结

1、日期是数据库本身的特色,也是数据库本身机制中的一个重要内容,所以仍需掌握;

2、每一个数据库处理日期时采用的机制都不一样,都有自己的一套处理机制,所以在实际开发中将日期字段定义为DATE类型的情况很少;

3、如果使用日期类型,java程序将不能通用。实际开发中,一般会使用“日期字符串”来表示日期。

6.1.11 data_format函数

作用:将‘日期类型’转换为特定格式的‘日期字符串’类型

执行结果:字符串varchar类型(具有特定格式)

用法: date_format(日期类型数据,‘日期格式’)

联想知识点:Java中将日期类型转换为字符串类型

SimpleDateFormat sdf = new

SimpleDateFormat(“yyyy-MM-dd HH:mm:ss SSS”);

Date date = new Date();

String time = sdf.format(date);

举例1:查询员工的入职日期,以‘10-12-2015’的格式显示

到窗口中

SQL语句:select ename,date_format(hiredate,'%m-%d-%Y')

as hiredate from employee;


举例2:查询员工的入职日期,以‘10/12/2015’的格式显示

到窗口中

SQL语句:select ename,date_format(hiredate,'%m/%d/%Y')

as hiredate from employee;


MySQL日期默认格式示例

以下两个SQL语句执行结果相同

第一种:hiredate自动转换成varchar类型,默认采用%Y-%m-%d格式


第二种:


总结:data_format函数主要用在数据库查询操作中。实际工作中,客户需要日期以特定格式展示的时候,需要使用该函数。

6.2 多行处理函数

函数名

功能

sum

求和

avg

取平均

max

取最大值

min

取最小值

count

取得记录数

为什么区分多行处理函数和单行处理函数?

因为单行函数都是一行输入对应一行输出,而多行处理函数都是多行输入对应一行输出。

注意:

分组函数自动忽略空值,不需要手动增加where条件排除空值;

分组函数不能直接使用在where关键字后面。

6.2.1 sum函数

举例1:查询所有员工的工资总和

SQL语句:select sum(sal) from employee;


举例2:查询所有员工的奖金总和

SQL语句:select sum(permium) from employee;


注意:求某一列的和,null会自动被忽略。

举例2:查询所有员工的工资与奖金总和

SQL语句:select sum(sal+permium) from employee;


以上结果计算错误,原因:

permium字段有 null 值,只要有 null 参与的数学运算结果都为 null ,而sum函数会自动忽略掉 null 值,正确的做法是将permium的 null 值转换为 0 ,如:ifnull(permium,0)

正确的语句,如下:

select sum(sal+ifnull(permium,0)) from employee;


6.2.2 avg函数

作用:求某一列的平均值

用法:avg(字段名称)

举例1:查询所有员工的平均工资

SQL语句:select avg(sal) as 平均工资 from employee;


举例2:查询所有员工工资高于平均工资的员工姓名和工资

SQL语句:

select ename,sal from employee where sal > avg(sal);


错误原因:分组函数无法使用在where关键字后面。

正确的SQL语句:select ename,sal from employee where sal>(select avg(sal) from employee);


6.2.3 max函数

作用:取得某一列的最大值

用法:max(字段名称)

举例1:查询员工的最高工资

SQL语句:select max(sal) from employee;


举例2:查询员工入职最晚的日期

SQL语句:select max(hiredate) from employee;


6.2.4 min函数

作用:取得某一列的最小值

用法:min(字段名称)

举例1:查询员工的最低工资

SQL语句:select min(sal) from employee;


举例2:查询员工入职最早的日期

SQL语句:select min(hiredate) from employee;


6.2.5 count函数

作用:取得某字段值不为null的记录总数

用法:count(字段名称) 或 count(*)

注意:count(*)表示取得所有记录,忽略 null ,为 null 的值也会取

count(字段名称),不会统计为 null 的记录

举例1:查询员工的总人数

SQL语句:select count(*) from employee;


举例2:查询有奖金的员工总人数

SQL语句:select count(permium) from employee;


举例2:查询没有奖金的员工总人数

SQL语句:

select count(*) from employee where permium is null;


6.2.6 多个函数同时使用

可以将多行处理函数(如:sum、avg、max、min、count)都放到 select 中一起使用

select count(*),sum(sal),avg(sal),min(sal),max(sal)

from employee;


6.3 distinct 函数

作用:将查询结果中某一字段的的重复记录去除掉

用法:distinct 字段名称或 distinct 字段名称, 字段名称 … …

注意:distinct只能出现在所有字段最前面,后面如果有多个字段及为多字段联合去重

举例1:查询公司有哪些工作岗位

SQL语句:select distinct job from employee;


举例2:查询公司有多少个工作岗位

SQL语句:select count(distinct job) from employee;


举例2:去除部门编号和工作岗位重复的记录

SQL语句:select distinct deptno,job from employee;


6.4 分组查询

6.4.1 group by

作用:通过哪个或哪些字段进行分组

用法:group by 字段名称

举例1:找出每个工作岗位的最高薪水

思路分析:按照工作岗位分组,然后对每一组求最大值。SQL语句中肯定包含 group by、max(sal)

SQL语句:select max(sal)from employee group by job;


重点结论:有 group by 的DQL语句中,select 语句后面只能跟 分组函数+ 参与分组的字段

举例2:查询每个工作岗位的最高薪水,并且按照由低到高进行排序

思路分析:先按照工作岗位 job 进行分组,然后对每一组薪水求最大值max,最后再根据每一组薪水的最大值进行由低到高排序

SQL语句:select job,max(sal)as maxsal from employee group by job order by maxsal;


注意:如果使用了 order by ,order by 必须放到 group by后面。

举例3:计算每个部门的平均薪水

SQL语句:select deptno,avg(sal)from employee group by deptno;


举例4:查询出不同部门不同岗位的最高薪水

SQL语句:select deptno,job,avg(sal)from employee group by deptno,job;


举例5:查询每个工作岗位的最高薪水,除销售专员之外

SQL语句:select job,max(sal)from employee where job!='销售专员' group by job;


6.4.2 having

作用:如果想对分组的数据再进行过滤,需要使用having子句;

where 与 having 区别

1、where 和 having 都是为了完成数据的过滤,它们后面都是添加条件;

2、where 是在 group by之前完成过滤;

3、having 是在 group by 之后完成过滤;

举例:查询每个工作岗位的平均工资大于5000的;

SQL语句:select job,avg(sal) from employee where avg(sal) > 5000 group by job;(错误的)


错误原因

where关键字后面不能直接使用分组函数,这与SQL语句的执行顺序有关系,它会先执行from employee ,然后再进行 where 条件过滤,where条件过滤结束之后再执行 group by 分组,之后才会显示出查询结果。

正确的SQL语句:select job,avg(sal) from employee group by job having avg(sal) > 4650;

第六章 处理函数_字段_04

注意:能够在where在过滤的数据不要放到having中进行过滤,否则影响SQL语句的执行效率。

6.5 select语句总结

一个完成的DQL语句如下:

select

xxxx

from

xxxx

where 

xxxx

group by

xxxx

having

xxxx

order by

xxxx

以上关键字的顺序不能变,严格遵守

以上语句的执行顺序:

from 从某张表中检索数据

where 经过条件进行过滤

group by 然后分组

having 分组后对数据不满意再过滤

select 查询出来

order by 排序输出

标签:语句,sal,employee,举例,SQL,第六章,处理函数,select
From: https://blog.51cto.com/u_16230968/7901683

相关文章

  • C++ - 多线程之带返回值的线程处理函数
    1.使用async函数创建线程1.1使用步骤使用async函数启动一个异步任务(创建线程,并且执行线程处理函数),返回future对象通过future对象中get()方法获取线程处理函数的返回值1.2基本数据类型作为返回值#include<iostream>#include<thread>#include<future>using......
  • Serverless平台knative第六章配置最大并发数及更新操作讲解
    并发数配置apiVersion:serving.knative.dev/v1kind:Servicemetadata:name:hellospec:template:metadata:name:hello-world-002spec:containerConcurrency:10#单个pod允许的最大并发数,超过将扩容containers:#-image:gcr......
  • 苍穹外卖-第六章购物车
    1.缓存菜品1.1问题说明用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大。结果:系统响应慢、用户体验差1.2实现思路通过Redis来缓存菜品数据,减少数据库查询操作。缓存逻辑分析:每个分类下的菜品保存一份缓存数据数据库中......
  • 字符串处理函数
    1,字符串串联运算符2,SUBSTRING提取子串3,LEFT和RIGHT4,LEN和DATALENGTH5,CHARINDEX函数6,PATINDEX函数7,REPLACE替换8,REPLICATE复制字符串9,STUFF函数10,UPPER和LOWER函数11,RTRIM和LTRIM函数 字符串串联运算符由于业务需要,有的时候我们需要将两个字段(列)组合起来,中间加上分隔符,然后输出。......
  • 【教程】VIM的使用第六章-我的vim我做主,编写vim配置以及映射
    大家好,新的一章要开始了,之前的vim操作大家一定要经常练习,从这章开始之后我们就要更深入的学习vim了,把vim打造成自己想要的样子,做到我的vim我做主!编写vim配置什么是vim的配置,vim里有很多的设置,比如:setnumber设置行号之前的使用都是在Vim里临时设置,没法持久化,每次设置很烦Vim......
  • linux 中字符串处理函数 ${i%%.*}
     001、[root@pc1test2]#ls[root@pc1test2]#str1="ab.cd_kk.mn_jjy"##测试字符串[root@pc1test2]#echo${str1%%.*}##从左侧开始,删除.号右侧所有的内容ab[root@pc1test2]#echo${str1%.*}##从左侧开始,删除最后一个.右侧的内容ab.......
  • 深入解析 MySQL 中的字符串处理函数:RIGHT()、LEFT() 和 CHAR_LENGTH
    在MySQL数据库中,字符串处理是一个常见的任务,特别是当你需要从字符串中提取特定部分或者计算字符串的长度时。我们在之前的博文中已经介绍过SUBSTRING_INDEX()、SUBSTRING_INDEX()、SUBSTRING_INDEX(),感兴趣的朋友了可以翻一下我们之前的博文;在本文中,我们将深入探讨三个重要的字......
  • Python第六章函数(1)普通函数
    1.基本定义:def函数名(参数列表):函数体2.可以选择性用文档字符串存放函数说明,可以用help()和“函数名._doc_”查看函数注释。3.函数标注4.return语句:不带表达式的return返回none。5.全局变量和局部变量:x=200deffun():x=100则函数内......
  • 第六章 图
    一、图的存储及基本操作邻接矩阵法#defineMaxVertexNum100//顶点数目的最大值typedefcharVertexType;//顶点的数据类型typedefintEdgeType;//带权图中边上权值的数据类型typedefstruct{ VertexTypeVex[MaxVertexNum];//顶点表 EdgeTypeEdge[MaxVertexNum][MaxVer......
  • MySQL篇:第六章_详解mysql视图
    周末有朋友来上海没来得及更新,特此更两篇以正身视图含义:理解成一张虚拟的表视图和表的区别: 使用方式 占用物理空间 视图 完全相同 不占用,仅仅保存的是sql逻辑 表 完全相同 占用视图的好处:1、sql语句提高重用性,效率高2、和表实现了分离,提高了安全性视......