单行处理函数
/*loweruppersubstr 取子串trim 去空格str_to_date 字符串转日期date_format 格式化日期round 四舍五入rand 0-1随机数ifnull 将null转为具体值case..when..then..when..then..else..end 如果条件是..则如何,else 其他的如何*/select lower(ENAME) from emp;-- 从1开始select substr(ENAME, 1, 2) from emp;select ENAME from emp where substr(ENAME, 1, 1) = 'a';-- concat字符串拼接,以下语句输出结果是首字母大写其它小写selectconcat(upper(substr(ENAME, 1, 1)), lower(substr(ENAME, 2, length(ENAME))))from emp;select length(ENAME) from emp;select ENAME from emp where ENAME = trim(' SMITH ');select round(1234.567, 0) as result from emp; // 1235select round(1234.567, -1) as result from emp; // 1230select rand() * 100 as result from emp;// 将comm中的null值改为0值select ENAME, (SAL + ifnull(COMM, 0)) * 12 as salcomm from emp;// 当员工职位是manager时,工资上调10%,当职位是salesman时工资上调50%,其他正常selectENAME,JOB,sal as oldsal,(case JOB when 'MANAGER' then SAL * 1.1 when 'SALESMAN' then SAL * 1.5 else SAL end) as newsalfromemp;
注:null在数据库参与数学运算,最终结果都为null
多行处理函数(分组函数)
- count() 计数
- sum() 求和
- avg()
- max()
- min()
注:先分组,再输出;未分组,整张表为一组
注:分组函数会直接忽略null,不需要对其进行提前处理
注:
- count():为一整行
- count(字段):字段下不为null的数据
注:分组函数不能直接使用在where子句中,原因 group by 在where后执行,所以不能在where中用函数
注:所有分组函数可以一起用
select max(sal) from emp;select count(sal) from emp;// 找出比最低工资高的员工
分组查询(group by)
/*** 执行顺序* from* where* group by* select* order by*/select...from...where...group by...order by...// mysql可以,oracle中报错,因为按照job分组后的组数和ename的总数对不上// 所以,在加入group by时,select后面只能跟分组的字段和分组函数select // 错误写法ENAME,JOB,sum(SAL)fromempgroup byJOB;select // 正确写法JOB,sum(SAL)fromempgroup byJOB;
练习:
# 每个部门、不同岗位的最高工资selectDEPTNO,JOB,max(SAL)fromempgroup byDEPTNO, JOBorder byDEPTNO;# 每个部门最高薪资, 显示最高薪资大于3000的# having对分完组的数据进行过滤,但是having必须与group by配合使用selectDEPTNO,max(SAL)fromempgroup byDEPTNOhavingmax(SAL) > 3000;# 以上语句效率低selectDEPTNO,max(SAL)fromempwhereSAL > 3000group byDEPTNO;# 可以先对薪资进行筛选,然后在分组# 要求每个部门的评价薪资高于 2500selectDEPTNO,avg(SAL)fromempgroup byDEPTNOhavingavg(SAL) > 2500;# 此处只能使用having# where效率高于having
注:去重distinct;只能出现在所有字段的最前面
# 内容去重select distinct JOB from emp;# 联合去重 意为 job 和 deptno 两个组合情况共同去重select distinct JOB, DEPTNO from emp;
