1.count(*)和count(字段名)的区别?
count(*):表示的是当前的总记录条数
count(字段名):表示当前字段中不为空的字段总条数
例子:查询表中总记录条数
例子:查询津贴的总记录条数
2.分组函数也可以组合起来用:
例子:查询工资的最大值,最小值,平均值,总条数,总和
3.group 和having
例子:找出每个工作岗位最高的薪资
这里有一个问题,如果我们想要查询有哪些员工的工资大于平均工资的
会发现,出现了分组函数错误。
这是因为我们不能直接在where后面使用分组函数,因为分组函数是在group by分完组后再进行的,虽然说这里没有group by,但是在SQL底层这里会有一个缺省的group by(无分组),所以说,在上述sql语句中,where后面无法使用分组函数,是因为还没有使用group by,所以说我们并不能直接在where语句后面使用分组函数。
那我们如何处理上述的sql语句?
这里还有一点需要注意:在我们使用group by分组的时候,查询的字段只能是参与分组的字段和分组函数,其他字段不能添加到sql语句中来。虽然在mysql中能执行,但是结果毫无意思,在Oracle中会直接给您报错
注意:在使用group by分组的查询sql语句中,select后面只能跟分组函数和参与分组的字段
例子:查询每个工资岗位的最大薪资和员工名称(这里名称查询出来了,但是毫无意义,因为数据不准确)
例子:查询每个工作岗位的平均薪资
多个字段一起分组:
例子:查询出每个部门中每个工作岗位的最高薪资
使用having过滤
例子:查询每个部门的平均工资,并且平均工资大于2000的
注意:如果能使用where条件解决的,就不要使用having过滤,这样效率会低。
总结一个DQL语句怎么写?
1-6:一个查询sql语句的执行顺序
select 5
…
from 1
…
where 2
…
group by 3
…
having 4
…
order by 6
…