狂人日记day7
排序
select ename,sal
-> from emp
-> order by
-> sal;
- 默认按照升序排序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qf5V4klM-1621257797868)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517191823337.png)]
降序
select ename,sal
-> from emp
-> order by
-> sal desc;
指定升序
select ename,sal
-> from emp
-> order by
-> sal asc;
多个字段排序
查询名字薪资,按薪资升序,如果一样按照 名字升序
select ename,sal from emp order by sal asc,ename asc;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6oDtw3CM-1621257797869)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517192050730.png)]
sal 在前 起主导 只有 sal相等时按ename排
根据字段位置排序
select ename,sal from emp order by 2;
表示按照表中第二列排序
列的顺序容易改变 不建议写
综合案例
工资在1250 到3000之间 按照升序排列
select ename,sal from emp where sal between 1250 and 3000 order by sal asc;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jjg33TjG-1621257797869)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517192718130.png)]
单行处理函数
特点:一个输入对应一个输出
单行处理函数常见
lower 转换小写
upper 转换大些
substr 取字符串
起点是一
select substr(ename,1,1) from emp;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-buHvjBk4-1621257797870)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517193603484.png)]
select ename from emp where substr(ename,1,1) = ‘A’;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w6ruL4qk-1621257797870)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517193831615.png)]
首字母大写
concat是字符串拼接
select concat( upper(substr(ename,1,1)),lower(substr(ename,2,length(ename)))) from emp;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gH7v6tSw-1621257797870)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517194517858.png)]
length 取长度
trim 去空格
select trim(’ king’); 变成 ‘king’
str_to_date 将字符串转换为日期
data_format 格式化日期
format 设置千分位
round 四舍五入
select round(12345.667,0) as result from emp;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9G0hNhwl-1621257797871)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517195237522.png)]
select round(12345.667,1) as result from emp;
保留一位小数
select round(12345.667,-1) as result from emp;
保留到5前一位 十位
Rand()生成随机数
select rand() from emp;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gObnZpaI-1621257797871)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517195447808.png)]
ifnull 可以将null转换为一个具体值
null 参与的数学运算 最后结果就是null
select ename,sal + comm as salcomm from emp;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TJd0iAmI-1621257797871)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517195631871.png)]
If null(数据,被当作哪个值)
select ename,(sal + ifnull(comm,0)) *12 as yearsal from emp;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zzXdm1g2-1621257797871)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517195905111.png)]
case when then when than else end
当员工工作岗位为mannager时 工资上调10% 当岗位为salesman时 上调50%
select ename,job,(case job when ‘MANAGER’ then sal1.1 when ‘SALEMAN’ then sal1.5 else sal end) as newsal from emp;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OoJkEfcm-1621257797872)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517200556399.png)]
分组函数
特点:多个输入对一个输出
Count
sum
avg
max
min
必须先分组才能用
分组函数使用时
- 自动忽略null
- 分组函数中count(*)代表整个一行的记录 不可能全为null
- count(具体字段)区别改字段下不为null的元素总数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-njk8G5eE-1621257797872)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517201050417.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iqKT27cC-1621257797872)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517201120874.png)]
- 分组函数 不能直接使用在where子句中 找出比最低工资高的员工信息
select ename ,salfrom emp where sal> min(sal);报错
因为分组函数在使用时必须分组后才能用
where 执行时没分组
select sum(sal) from emp;
因为select在groupby后执行
- 所有分组函数可以组合起来一起用
分组查询
先对数据分组再进行计算
select from group by
select from where group by order by
执行顺序
1 from
2 where
3 group by
4 select
5 order by
找出每个工作岗位的最高工资和
Select sum(sal) from emp group by job;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EQAssQ5T-1621257797872)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517203257697.png)]
select deptno,max(sal)from emp group by deptno;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xs4N3Jf5-1621257797873)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517203716140.png)]
找出每个部门不同岗位的最高薪资
两个字段联合成一个字段看
select deptno,job ,max(sal) from emp group by deptno,job;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0umlvKFV-1621257797873)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517204604873.png)]
使用having子句可以对分完组之后数据进行再次过滤 不能单独使用
select deptno,max(sal) from emp group by deptno having max(sal) > 3000;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E7rO9mDl-1621257797873)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517205513581.png)]
如果加job编译错误
另一种方法 先将大于3000 的都找出来
select deptno,max(sal) from emp where sal>3000 group by deptno;
下面这个报错了
问题解决:是mysql版本机制问题select的列都要在group中,或者本身是聚合列(SUM,AVG,MAX,MIN) 才行,其实这个配置目前个人感觉和distinct差不多的,所以去掉就好
! select deptno,sal from emp where sal>3000 group by deptno;
优先用where
去除重复记录
使用Distinct
select distinct job from emp;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2zcOSfVc-1621257797873)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517211957112.png)]
select ename,distinct job from emp;
报错 ename超出
把distinct 放在前方 是联合的去除
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MPHX5Uxx-1621257797874)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517212131866.png)]
统计工作岗位数量
select count(distinct(job)) from emp;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9nDMFtbY-1621257797874)(/Users/suannai/Library/Application Support/typora-user-images/image-20210517212215110.png)]