练习:查询出工资在8000以上的男员工的姓名,工资,生日,结果要求按照工资降序排列。
select ename,salary,birthday from emp
where salary>8000 and sex=1
order by salary desc;
1.简单查询——分页查询
查询的结果中有太多的数据,一次显示不完可以做成分页显示
需要两个已知的条件:当前的页码、每页的数据量
每页开始查询的值=(当前的页码-1)*每页的数据量
select * from emp limit 开始查询的值, 每页的数据量;
假设每页显示5条数据,查询出前4页
第1页:select * from emp limit 0,5;
第2页:select * from emp limit 5,5;
第3页:select * from emp limit 10,5;
第4页:select * from emp limit 15,5;
注意事项:开始查询的值和每页的数据量必须是数值型,不能加引号。
练习:查询出工资在8000以上,工资最高的前3个员工
select * from emp
where salary>8000
order by salary desc
limit 0,3;
2.复杂查询
(1)聚合查询/分组查询
示例:查询出所有员工的数量
select count(*) from emp;
练习:使用员工的编号列查询数量
select count(eid) from emp; #推荐使用主键列
练习:使用所属部门编号列查询数量
select count(deptId) from emp;
函数:是一个功能体,需要提供若干数据,返回结果
聚合函数
count()/sum()/avg()/max()/min()
数量 求和 平均 最大 最小
练习:查询出所有男员工的工资总和
select sum(salary) from emp where sex=1;
练习:查询出10号部门的平均工资
select avg(salary) from emp where deptId=10;
练习:查询出年龄最小的员工的生日
select max(birthday) from emp;
练习:查询出10号部门的最低工资
select min(salary) from emp where deptId=10;
分组查询通常只是查询聚合函数和分组条件
示例:查询出男女员工的数量,平均工资各是多少
select count(eid),avg(salary),sex from emp group by sex;
练习:查询出各部门的工资总和,最高工资,最低工资
select sum(salary),max(salary),min(salary),deptId from emp group by deptId;
year() 获取日期中的年份
示例:获取2021-11-4中的年份
select year('2021-11-4');
练习:查询出1993年出生的员工有哪些
select * from emp where year(birthday)=1993;
练习:查询出所有员工出生的年份
select year(birthday) from emp;
(2)子查询
是多个SQL命令的组合,将一个命令的结果作为另一个命令的条件
示例:查询出工资最高的员工
步骤1:查询出工资的最大值 —— 50000
select max(salary) from emp;
步骤2:通过最大值查询对应的员工
select * from emp where salary=50000;
综合:
select * from emp where salary=(select max(salary) from emp);
练习:查询出工资比king高的员工有哪些
步骤1:查询出king的工资 —— 10000
select salary from emp where ename='king';
步骤2:查询出工资高于10000的员工
select * from emp where salary>10000;
综合:
select * from emp where salary>(select salary from emp where ename='king');
练习:查询出和tom同一年出生的员工有哪些