07-mysql基础-mysql中的DQL-分页查询
点击蓝色“潭时录”关注我丫
每天和小潭一起快乐的学习~
你好,我是在学mysql的小潭。在上一期的推文中我们学习了mysql的子查询知识,本期我们将继续学习DQL中的分页查询。
分页查询介绍
应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求
语法:[执行顺序:from -> join -> on -> where -> group by -> having -> select -> order by -> limit]
select 查询列表
from 表
[
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段]
limit [offset,] size;
offset:要显示条目的起始索引(起始索引从0开始)
size:要显示的条目个数
特点:
1.limit语句放在查询语句的最后
2.公式:
要显示的页数 page,每页的条目数size
select 查询列表
from 表
limit (page-1)*size, size;
案例:
#案例1:查询前5条员工信息
SELECT * FROM employees LIMIT 0,5; #如果从第一条开始,则参数0可以省略,写为limit 5;
#案例2:查询第11条到第25条的记录
SELECT * FROM employees LIMIT 10,15;
#案例3:查询有奖金的员工信息,并且工资较高的前10名
SELECT * FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary DESC
LIMIT 10;
小练习:
#查询平均工资最低的部门信息
/*
思路:1.查询出最低的平均工资的部门编号
2.查询部门信息=1的结果
*/
SELECT d.*
FROM departments d
WHERE d.`department_id` =
(
SELECT department_id
FROM employees
GROUP BY department_id
ORDER BY AVG(salary)
LIMIT 1
);
#查询平均工资最低的部门信息和该部门的平均工资
/*
思路:1.查出平均工资最低的部门号和平均工资
2.查询1中部门编号的部门信息
*/
SELECT d.*,ag
FROM departments d
JOIN
(
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id
ORDER BY AVG(salary)
LIMIT 1
) ag_dep
ON d.`department_id`=ag_dep.department_id;
#查询平均工资最高的job信息
/*
思路:1.查询平均工资最高的job_id
2.查询job信息=1的结果
*/
SELECT *
FROM jobs
WHERE job_id =
(
SELECT job_id
FROM employees
GROUP BY job_id
ORDER BY AVG(salary) DESC
LIMIT 1
);
#查询平均工资高于公司平均工资的部门有哪些
/*
思路:1.查询平均工资
2.查询每个部门的平均工资
3.筛选2的结果集,满足平均工资>1的结果
*/
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id
HAVING AVG(salary) >
(
SELECT AVG(salary) FROM employees
);
#各个部门中,最高工资中最低的那个部门的最低工资是多少
/*
思路:1.查询各部门的最高工资中最低的部门编号
2.查询1的结果集中部门的最低工资
*/
SELECT MIN(salary)
FROM employees
WHERE department_id =
(
SELECT department_id
FROM employees
GROUP BY department_id
ORDER BY MAX(salary)
LIMIT 1
);
#查询平均工资最高的部门的manager的详细信息,last_name,department_id,email,salary
/*
思路:1.查询平均工资最高的部门编号
2.将employees和departments连接查询,筛选条件=1的结果
*/
SELECT last_name,d.department_id,email,salary
FROM employees e
INNER JOIN departments d
ON d.`manager_id` = e.`employee_id`
WHERE d.`department_id` =
(
SELECT department_id
FROM employees
GROUP BY department_id
ORDER BY AVG(salary) DESC
LIMIT 1
);
#其他练习补充(仅了解)
#查询所有员工的邮箱的用户名(邮箱中@前的字符)
SELECT SUBSTR(email,1,INSTR(email,'@')-1) 用户名 FROM employees;
#其他练习补充(仅了解)
#查询每个专业的男生人数和女生人数分别是多少
#方法一:
SELECT COUNT(*) 个数,sex,majorid
FROM student
GROUP BY sex,majorid;
#方法二:
SELECT majorid,
(SELECT COUNT(*) FROM student WHERE sex='男' AND majorid=s.majorid) 男,
(SELECT COUNT(*) FROM student WHERE sex='女' AND majorid=s.majorid) 女
FROM student s
GROUP BY majorid;
下期预告:mysql中的查询5