#进阶九、分页查询/*
应用场景:当要显示的数据一页显示不全时,需要分页提交sql请求。
语法:
select 查询列表
from 表名
[连接类型] join 表2
on 连接条件
where 筛选条件
group by 分组条件
having 分组后的筛选
order by 排序
limit 起始索引offset,显示的条目数size;
注意:在学习字符串的substring函数时,字符串的索引从1开始,但是在这里,起始索引offset从0开始
1、特点:limit子句在查询语句的最后,
2、要显示页数是page,每一页的条目数是size,limit (page-1)*size,size
*/#查询前5条员工的信息SELECT*FROM employees
LIMIT0,5;SELECT*FROM employees
LIMIT5;#查询第11条到第25条SELECT*FROM employees
LIMIT10,15#有奖金的员工信息,工资较高的前10名SELECT*FROM employees
WHERE commission_pct ISNOTNULLORDERBY salary DESCLIMIT10;
子查询经典案例
#1、查询工资最低的员工信息SELECT*FROM employees
WHERE salary =(SELECTMIN(salary)FROM employees
);#2、查询平均工资最低的部门信息 ※SELECT d.*FROM(SELECTAVG(salary) 平均工资, department_id
FROM employees
GROUPBY department_id
)tempINNERJOIN departments d
ONtemp.department_id = d.`department_id`ORDERBY 平均工资 ASCLIMIT1;#3、查询平均工资最低的部门信息和该部门的平均工资SELECT 平均工资, d.*FROM(SELECTAVG(salary) 平均工资, department_id
FROM employees
GROUPBY department_id
)tempINNERJOIN departments d
ONtemp.department_id = d.`department_id`ORDERBY 平均工资 ASCLIMIT1;#4、查询平均工资最高的job信息SELECTtemp.平均工资, j.*FROM(SELECTAVG(salary) 平均工资, job_id
FROM employees
GROUPBY job_id
ORDERBY 平均工资 DESCLIMIT1)tempINNERJOIN jobs j
ONtemp.job_id = j.`job_id`;#5、查询平均工资高于公司平均工资的部门有哪些?SELECT department_id,AVG(salary) 平均工资
FROM employees
GROUPBY department_id
HAVING 平均工资 >(SELECTAVG(salary) 公司平均工资
FROM employees
);#6、查询公司中所有manager的详细信息SELECT*FROM employees
WHERE employee_id IN(SELECT manager_id
FROM employees
GROUPBY manager_id
);#7、各个部门的最高工资中,最低的那个是多少?SELECTMIN(temp.最高工资) 最低工资
FROM(SELECTMAX(salary) 最高工资
FROM employees
GROUPBY department_id
)temp;#并且查询是那个部门SELECT department_id,MAX(salary)FROM employees
GROUPBY department_id
HAVINGMAX(salary)=(SELECTMAX(salary) maxSalary
FROM employees
GROUPBY department_id
ORDERBY maxSalary ASCLIMIT1);#8、查询平均工资最高的部门 的manager的详细信息,last_name,department_id,email,salarySELECT last_name, e.department_id, email, salary
FROM employees e
WHERE employee_id =(SELECT d.`manager_id`FROM(SELECTAVG(salary) maxSalary, department_id
FROM employees
GROUPBY department_id
ORDERBY maxSalary DESCLIMIT1)tempJOIN departments d
ONtemp.department_id = d.`department_id`);
联合查询
#进阶十、联合查询/*
union:将多条查询语句的结果合并为一个结果,
语法:
查询语句1
union
查询语句2
*/#查询部门编号>90或者是邮箱中包含a的员工信息SELECT*FROM employees
WHERE department_id >90OR email LIKE'%a%';
或者
SELECT*FROM employees WHERE department_id >90UNIONSELECT*FROM employees WHERE email LIKE'%a%';/*
当我们要查询的结果来自多张表,而且多张表之间没有连接关系,查询的信息(字段)一致时,可以使用联合查询
*//*
联合查询的特点:
1、要求多条查询语句的查询列数一致;
2、要求多条查询语句的每一列的类型和顺序最好一致;
3、union关键字默认是去重的,使用union all可以包含重复项
*/