升序,降序
按照工资升序,找出员工名和薪资
按照工资的降序排列,当工资相同时再按照名字的升序排列
此外,还可以根据表的指定列进行排序,但一般不使用,因为如果当表的结构发生改变时,排序的字段也会发生改变
找出工作岗位是SALESMAN的员工,并且要求按照薪水降序排列
SQL语句中的执行顺序
分组函数(多行处理函数)
所有的分组函数都是对某一种数据进行操作的
特点:输入多行,最终输出结果1行
- count
- sum
- max
- min
- avg
求出员工总人数
求出总工资
求出最大工资
求出最小工资
求出员工平均工资
分组函数也可以组合使用
单行处理函数
特点:输入一行,输出一行
计算每个员工的年薪
需要使用ifnull()函数:ifnull(括号中是可能为NULL的数据,将被当作什么处理)
正确写法如下
注意:单行处理函数不会忽略NULL,但在多行处理函数中,会直接忽略NULL
count
- count(*)
- count(具体字段)
两者的区别
count(*)不是统计某个字段中的个数,而是统计总记录条数(和某个字段无关)。
count(具体字段):表示统计具体字段中不为NULL的总数。
group by 和 having
- group by:按照某个字段或者某些字段进行分组
- having:是对分组之后的数据进行再次过滤
找出每个工作岗位的最高薪资
注意:
- 分组函数一般都会和group by函数组合使用,这就是为什么它被成为组合函数的原因。
- 并且任何一条分组函数都是在group by语句执行结束后才会执行的。
- 当一条SQL语句没有group by时,整个表的数据会自成一组。
- 在含有group by的语句中,select后只能跟参与分组的字段和分组函数。
思考:这条语句为什么错误
题目:找出工资比平均工资高的员工
原因:SQL语法中有一条语法规则,分组函数不可以直接使用在where字句当中,这是因为group by是在where执行之后才会执行的
正确步骤如下
第一步:找出平均工资
第二步:找出比平均工资高的员工
合并两个语句,就是使用子查询
找出每个部门不同岗位之间的最高薪资
找出每个部门的最高薪资,要求显示薪资大于2900的数据
找出每个部门的平均薪资,要求显示薪资大于2000的数据
注意:group by 和having是搭配使用的,having是对group by分组之后的数据进行再次过滤,having无法单独使用。
最后
一个完整的DQL(数据查询语言)执行顺序
文章为学习笔记,如有不足,还请指正。