排序 order by
- 格式: order by 排序的字段名 asc升序(默认)/desc降序;
- 查询每个员工的姓名和工资,按照工资升序
select name,sal from emp order by sal;
select name,sal from emp order by sal asc;
- 查询每个员工的姓名和工资,按照工资降序
select name,sal from emp order by sal desc;
- 查询工资高于2000的员工姓名和工资, 按照工资降序排序
select name,sal from emp where sal>2000 order by sal desc;
- 查询姓名,工资和部门id 按照部门id升序排序,如果部门id一致则按照工资降序排序
select name,sal,dept_id from emp order by dept_id,sal desc;
分页查询 limit
- 格式: limit 跳过的条数,请求的条数(每页的条数)
- 跳过的条数=(请求的页数-1)*每页的条数
- 举例:
- 第一页的5条数据 limit 0,5
- 第2页的5条数据 limit 5,5
- 计算(2-1)*5
- 第3页的5条数据 limit 10,5
-
别名
select name as "名字" from emp;
select name "名字" from emp;
select name 名字 from emp;
聚合函数
- 可以对查询到的多条数据进行统计查询
- 统计方式包括:
- 求平均值
- 求和
- 求最大值
- 求最小值
- 计数
- 平均值avg(字段名)
- 查询1号部门的平均工资
select avg(sal) from emp where dept_id=1;
b. 查询销售的平均工资
select avg(sal) from emp where job='销售';
- 最大值max(字段名)
- 查询最高工资
select max(sal) from emp;
- 最小值min(字段名)
- 查询最低工资
select min(sal) from emp;
- 求和sum(字段名)
- 查询程序员的工资总和
select sum(sal) from emp where job='程序员';
- 计数count(*)
- 查询销售的数量
select count(*) from emp where job="销售";
分组查询 group by
- 分组查询可以将某个字段相同值的数据划分为一组, 然后以组为单位进行统计查询
- 查询每个部门的人数
select count(*) from emp where dept_id=1;
select count(*) from emp where dept_id=2;
select count(*) from emp where dept_id=3;
select dept_id,count(*) from emp group by dept_id;
- 查询每种工作的人数
select job,count(*) from emp group by job;
- 查询每种工作的平均工资
select job,avg(sal) from emp group by job;
- 查询每个部门的最高工资
select dept_id,max(sal) from emp group by dept_id;
- 查询每个部门工资高于2000的人数
select dept_id,count(*) from emp where sal>2000 group by dept_id;
- 查询每种工作的最低工资
select job,min(sal) from emp group by job;
- 查询1号部门和2号部门的人数
select dept_id,count(*) from emp where dept_id in(1,2) group by dept_id;
- 查询平均工资最高的部门id和平均工资
select dept_id,avg(sal) from emp group by dept_id order by avg(sal) desc limit 0,1;
- 通过别名 复用
select dept_id,avg(sal) a from emp group by dept_id order by a desc limit 0,1;
having
- where后面只能写普通字段的条件, 不能写聚合函数条件
- having后面专门用来写聚合函数条件, 而且having要和group by 结合使用 写在group by的后面
- 查询每个部门的平均工资,只查询出平均工资大于2000
select dept_id,avg(sal) from emp group by dept_id having avg(sal)>2000;
select dept_id,avg(sal) a from emp group by dept_id having a>2000;
- 查询每种工作的人数,只查询人数大于1的
select job,count(*) c from emp group by job having c>1;
- 查询每个部门的工资总和,只查询有领导的员工, 并且要求工资总和大于5400.
select dept_id,sum(sal) s from emp
where manager is not null group by dept_id having s>5400;
4. 查询每个部门的平均工资, 只查询工资在1000到3000之间的,并且过滤掉平均工资低于2000的
select dept_id,avg(sal) a from emp
where sal between 1000 and 3000 group by dept_id having a>=2000;