尚硅谷之MySQL基础
3、having 筛选
having与where类似,可筛选数据
having与where不同点
- where针对表中的列发挥作用,查询数据;having针对查询结果中的列发挥作用,筛选数据
- where后面不能写分组函数,而having后面可以使用分组函数
- having只用于group by分组统计语句
#按照部门统计员工人数,仅显示部门人数少于3人的 SELECT dept_id,COUNT(*) AS c FROM t_employee WHERE dept_id IS NOT NULL GROUP BY dept_id HAVING c <3; |
#查询每个部门的平均工资,并且仅显示平均工资高于10000 SELECT emp.dept_id,AVG(s.basic_salary ) AS avg_salary FROM t_employee AS emp,t_salary AS s WHERE emp.eid = s.eid AND dept_id IS NOT NULL GROUP BY emp.dept_id HAVING avg_salary >10000; |
4、order by 排序
- 按一个或多个字段对查询结果进行排序
用法:order by col1,col2,col3...
说明:先按col1排序如果col1相同就按照col2排序,依次类推
col1,col2,col3可以是select后面的字段也可以不是
- 默认是升序,也可以在字段后面加asc显示说明是升序,desc为降序
例如:order by click_count desc;
如果两个字段排序不一样,例如:
order by 字段1 asc ,字段2 desc;
- order by 后面除了跟1个或多个字段,还可以写表达式,函数,别名等
#排序 #查询员工基本工资,按照基本工资升序排列,如果工资相同,按照eid升序排列 SELECT t_employee.eid,basic_salary FROM t_employee INNER JOIN t_salary ON t_employee.eid = t_salary.eid ORDER BY basic_salary,eid; #查询员工基本工资,按照基本工资降序排列,如果工资相同,按照eid排列 SELECT t_employee.eid,basic_salary FROM t_employee INNER JOIN t_salary ON t_employee.eid = t_salary.eid ORDER BY basic_salary DESC,eid; #统计每个部门的平均基本工资,并按照平均工资降序排列 SELECT emp.dept_id,AVG(s.basic_salary) FROM t_employee AS emp,t_salary AS s WHERE emp.eid = s.eid GROUP BY emp.dept_id ORDER BY AVG(s.basic_salary) DESC; |
5、limit 分页
limit m,n
m表示从下标为m的记录开始查询,第一条记录下标为0,n表示取出n条出来,如果从m开始不够n条了,就有几条取几条。m=(page-1)*n,(page页码,n表示每页显示的条数)
如果第一页limit 0,n
如果第二页limit n,n
依次类推,得出公式limit (page-1)*n , n
#分页 #查询员工信息,每页显示5条,第二页 SELECT * FROM t_employee LIMIT 5,5; #统计每个部门的平均基本工资,并显示前三名 SELECT emp.dept_id,AVG(s.basic_salary) FROM t_employee AS emp,t_salary AS s WHERE emp.eid = s.eid GROUP BY emp.dept_id ORDER BY AVG(s.basic_salary) DESC LIMIT 0,3; |