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,每页的条目数sizeselect 查询列表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 employeesWHERE commission_pct IS NOT NULLORDER BY salary DESCLIMIT 10;
小练习:
#查询平均工资最低的部门信息/*思路:1.查询出最低的平均工资的部门编号2.查询部门信息=1的结果*/SELECT d.*FROM departments dWHERE d.`department_id` =(SELECT department_idFROM employeesGROUP BY department_idORDER BY AVG(salary)LIMIT 1);#查询平均工资最低的部门信息和该部门的平均工资/*思路:1.查出平均工资最低的部门号和平均工资2.查询1中部门编号的部门信息*/SELECT d.*,agFROM departments dJOIN(SELECT AVG(salary) ag,department_idFROM employeesGROUP BY department_idORDER BY AVG(salary)LIMIT 1) ag_depON d.`department_id`=ag_dep.department_id;#查询平均工资最高的job信息/*思路:1.查询平均工资最高的job_id2.查询job信息=1的结果*/SELECT *FROM jobsWHERE job_id =(SELECT job_idFROM employeesGROUP BY job_idORDER BY AVG(salary) DESCLIMIT 1);#查询平均工资高于公司平均工资的部门有哪些/*思路:1.查询平均工资2.查询每个部门的平均工资3.筛选2的结果集,满足平均工资>1的结果*/SELECT AVG(salary),department_idFROM employeesGROUP BY department_idHAVING AVG(salary) >(SELECT AVG(salary) FROM employees);#各个部门中,最高工资中最低的那个部门的最低工资是多少/*思路:1.查询各部门的最高工资中最低的部门编号2.查询1的结果集中部门的最低工资*/SELECT MIN(salary)FROM employeesWHERE department_id =(SELECT department_idFROM employeesGROUP BY department_idORDER BY MAX(salary)LIMIT 1);#查询平均工资最高的部门的manager的详细信息,last_name,department_id,email,salary/*思路:1.查询平均工资最高的部门编号2.将employees和departments连接查询,筛选条件=1的结果*/SELECT last_name,d.department_id,email,salaryFROM employees eINNER JOIN departments dON d.`manager_id` = e.`employee_id`WHERE d.`department_id` =(SELECT department_idFROM employeesGROUP BY department_idORDER BY AVG(salary) DESCLIMIT 1);#其他练习补充(仅了解)#查询所有员工的邮箱的用户名(邮箱中@前的字符)SELECT SUBSTR(email,1,INSTR(email,'@')-1) 用户名 FROM employees;#其他练习补充(仅了解)#查询每个专业的男生人数和女生人数分别是多少#方法一:SELECT COUNT(*) 个数,sex,majoridFROM studentGROUP 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 sGROUP BY majorid;
下期预告:mysql中的查询5
