尚硅谷之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;