四、MySQL分页查询 + 子查询复习 学习笔记 (复习连接查询相关内容 详解)

8:分页查询

应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求
语法:
SELECT 查询列表
FROM 表名
【JOIN type JOIN 表2
ON 连接条件
WHERE 筛选条件
GROUP BY 分组字段
HAVING 分组后的筛选
ORDER BY 排序的字段】
LIMIT 要显示条目的起始索引(起始索引从0开始),长度(要显示的条目个数)

特点:
1.LIMIT 语句放在查询语句的最后
2.上述代码的执行顺序为:
1)FROM 表名
2)JOIN type JOIN 表2
3)ON 连接条件
4)WHERE 筛选条件
5)GROUP BY 分组字段
6)HAVING 分组后的筛选
7)SELECT 查询列表
8)ORDER BY 排序的字段
9)LIMIT 要显示条目的起始索引(起始索引从0开始),长度(要显示的条目个数)

3.公式
要显示的页数page , 每页的条目数size
SELECT 查询列表
from 表名
LIMIT (page-1)*size,size;

				   page    				 第n页的起始索引1							 02							103							20
# 【案例1】 查询前五条员工信息
SELECT * FROM employees LIMIT 0,5;
# 默认起始索引从0开始,可省略不写
SELECT * FROM employees 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】 查询所有学员的邮箱的用户名
SELECT SUBSTR(email,1,INSTR(email,'@')-1) 用户名
FROM stuinfo# 【练习2】 查询男生和女生的个数
SELECT count(*) 个数 
FROM stuinfo
GROUP BY sex;# 【练习3】 查询年龄 > 18岁的所有学生的姓名和年级名称
SELECT name, gradeName
FROM stuinfo s
INNER JOIN grade g
on s.gradeId = g.id
WHERE age >18;# 【练习4】 查询哪个年级的最小年龄大于20岁
# 1) 查询每个年级的最小年龄
SELECT MIN(age),gradeid
FROM stuinfo
GROUP BY gradeId;# 2) 1)的查询结果中大于20岁的
SELECT MIN(age),gradeid
FROM stuinfo
GROUP BY gradeId
HAVING MIN(age) > 20;

子查询复习:

#1.查询工资最低的员工信息:last_name,salary# 1) 查询最低工资
SELECT MIN(salary)
FROM employees;USE myemployees;
# 2) 查询last_name,salary,要求last_name = 1)中的查询结果
SELECT last_name , salary
FROM employees
WHERE salary = (SELECT MIN(salary)FROM employees
);#2.查询平均工资最低的部门信息# 方法一:
# 1)查询各部门的平均工资
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id;# 2) 查询 1)结果上的最低平均工资
SELECT MIN(ag),department_id
FROM (SELECT AVG(salary) ag,department_idFROM employeesGROUP BY department_id 
) ag_dep# 3) 查询哪个部门的平均工资 = 2)查询出来的结果
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id
HAVING AVG(salary) = (SELECT MIN(ag)FROM (SELECT AVG(salary) ag,department_idFROM employeesGROUP BY department_id ) ag_dep
);# 4) 查询部门编号 = 3)的查询结果中的部门编号的  部门信息
SELECT d.*
FROM departments d
WHERE d.department_id = (SELECT department_idFROM employeesGROUP BY department_idHAVING AVG(salary) = (SELECT MIN(ag)FROM (SELECT AVG(salary) ag,department_idFROM employeesGROUP BY department_id ) ag_dep)
);# 方法二:
# 1)查询各部门的平均工资
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id;# 2) 在 1) 的基础上升序排列,取第一条记录,就能得到平均工资最低的部门的编号
SELECT department_id
FROM employees
GROUP BY department_id
ORDER BY AVG(salary) ASC
LIMIT 0,1;# 3)查询部门信息
SELECT *
FROM departments
WHERE department_id = (SELECT department_idFROM employeesGROUP BY department_idORDER BY AVG(salary) ASCLIMIT 0,1
);#3.查询平均工资最低的部门信息和该部门的平均工资
# 1)查询各部门的平均工资
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id;# 2) 在 1) 的基础上升序排列,取第一条记录,就能得到平均工资最低的部门的编号
SELECT AVG(salary) , department_id
FROM employees
GROUP BY department_id
ORDER BY AVG(salary) ASC
LIMIT 0,1;# 3)查询部门信息(内连接)
SELECT d.* , ag
FROM departments d
INNER JOIN (SELECT AVG(salary) ag, department_idFROM employeesGROUP BY department_idORDER BY AVG(salary) ASCLIMIT 0,1
)ag_dep
ON d.department_id = ag_dep.department_id;#4.查询平均工资最高的job信息
# 1)查询各部门的平均工资
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id;# 2) 在 1) 的基础上降序排列,取第一条记录,就能得到平均工资最低的工种的编号
SELECT AVG(salary) , job_id
FROM employees
GROUP BY job_id
ORDER BY AVG(salary) DESC
LIMIT 0,1;# 3) 在2)的基础上,筛选出 job_id = 2)查询结果中的job_id
SELECT *
FROM jobs
WHERE job_id = (SELECT job_idFROM employeesGROUP BY job_idORDER BY AVG(salary) DESCLIMIT 0,1
);#5.查询平均工资高于公司平均工资的部门有哪些?# 1) 查询各个部门的平均工资
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id;# 2) 查询整个公司的平均工资
SELECT AVG(salary)
FROM employees;# 3) 筛选 2)的结果集,满足平均工资 > 1)
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id
HAVING AVG(salary) > (SELECT AVG(salary)FROM employees
);#6.查询出公司中所有manager的详细信息.# 1) 查询出所有的manager_id
SELECT DISTINCT manager_id
FROM employees;# 2) 查询详细信息,满足employee_id =  1)中查询的结果
# 方法一
SELECT *
FROM employees
WHERE employee_id = ANY(SELECT DISTINCT manager_idFROM employees
);# 方法二
SELECT *
FROM employees
WHERE employee_id in(SELECT DISTINCT manager_idFROM employees
);#7.查询各个部门的最高工资中最低的 那个部门的 最低工资是多少
# 1) 查询各个部门的最高工资 中,最低的那个部门的最高工资
SELECT MAX(salary),department_id
FROM employees
GROUP BY department_id
ORDER BY MAX(salary) ASC
LIMIT 0,1;# 2) 查询 1) 结果的那个部门的最低工资
SELECT MIN(salary)
FROM employees
WHERE department_id = (SELECT department_idFROM employeesGROUP BY department_idORDER BY MAX(salary) ASCLIMIT 0,1
);#8.查询平均工资最高的部门的manager的详细信息:last_name,department_id,email,salary# 1) 查询各个部门的平均工资
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id;# 2) 在 1)的查询结果中,查找平均工资最高的部门的department_id
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id
ORDER BY AVG(salary) DESC
LIMIT 0,1;# 3) 将employees 和 departments连接查询,筛选条件是 1)
SELECT last_name,d.department_id,email,salary
FROM employees e
INNER JOIN departments d
ON e.employee_id = d.manager_id
WHERE e.department_id = (SELECT department_idFROM employeesGROUP BY department_idORDER BY AVG(salary) DESCLIMIT 0,1
);

强化练习:

-- 一、查询每个专业的学生人数
SELECT majorid , COUNT(*)
FROM student
GROUP BY majorid;-- 二、查询参加考试的学生中,每个学生的平均分、最高分
SELECT AVG(score) , MAX(score) , studentno
FROM result
GROUP BY studentno;-- 三、查询姓张的每个学生的最低分大于60的学号、姓名
SELECT MIN(score),s.studentname,s.studentno
FROM student s
INNER JOIN result r
ON s.studentno = r.studentno
WHERE studentname LIKE'张%'
GROUP BY studentno
HAVING MIN(score) > 60;-- 四、查询专业生日在“1988-1-1”后的学生姓名、专业名称
SELECT s.studentname , s.majorid, m.majorname,s.borndate
FROM student s
INNER JOIN major m
ON s.majorid = m.majorid
WHERE DATEDIFF(borndate,'1988-1-1')>0;-- 五、查询每个专业的男生人数和女生人数分别是多少
# 方法一
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;-- 六、查询专业和张翠山一样的学生的最低分# 1) 查询张翠山的专业编号
SELECT majorid
FROM student
WHERE studentname = '张翠山';# 2) 查询专业编号 =  1)的所有学生的编号
SELECT studentno
FROM student
WHERE majorid = (SELECT majoridFROM studentWHERE studentname = '张翠山'
);
# 3) 查询最低分
SELECT MIN(score)
FROM result
WHERE studentno in (SELECT studentnoFROM studentWHERE majorid = (SELECT majoridFROM studentWHERE studentname = '张翠山')
);-- 七、查询大于60分的学生的姓名、密码、专业名
SELECT s.studentname , s.studentno , r.score , loginpwd , majorname 
FROM student s
INNER JOIN result r
ON s.studentno = r.studentno
INNER JOIN major m
ON s.majorid = m.majorid
WHERE score > 60;-- 八、按邮箱位数分组,查询每组的学生个数
SELECT COUNT(*) , LENGTH(email)
FROM student
GROUP BY LENGTH(email);-- 九、查询学生名、专业名、分数
SELECT studentname , m.majorid , majorname , score
FROM student s
left JOIN result r
ON s.studentno = r.studentno
INNER JOIN major m
ON s.majorid = m.majorid;-- 十、查询哪个专业没有学生,分别用左连接和右连接实现
# 左连接
SELECT m.majorid , m.majorname , s.studentno
FROM major m
LEFT JOIN student s
ON m.majorid = s.majorid
WHERE studentno IS NULL;# 右连接
SELECT m.majorid , m.majorname , s.studentno
FROM student s
RIGHT JOIN major m
ON m.majorid = s.majorid
WHERE studentno IS NULL;-- 十一、查询没有成绩的学生人数
SELECT COUNT(*) 无成绩学生个数
FROM student s
LEFT JOIN result r
ON s.studentno = r.studentno
WHERE r.id IS NULL;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 2121. 相同元素的间隔之和(前缀和)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始、由 n 个整数组成的数组 arr 。 arr 中两个元素的 间隔 定义为它们下标之间的 绝对差 。更正式地,arr[i] 和 arr[j] 之间的间隔是 |i - j| 。 返回一个长度为 n 的数组 intervals ,其中 interva…

jquery中怎么删除ul中的整个li包括节点

1.$(ul li).remove(); 2.$(ul li).each(function(){ $(this).remove(); }); 3.$("ul").find("li").remove(); 4.$(ul).children().filter(li).remove();转载于:https://www.cnblogs.com/zhujiabin/p/5008006.html

在android添加数据采集,一种基于Android系统的地理信息数据采集方法与流程

本方法属于采集地理信息数据的发明,是一种基于android操作系统和gis地理信息系统进行户外地理信息数据采集的方法。背景技术:众所周知地理信息数据采集在很多行业中都有应用,比如说农业中的土地普查、城市管理中的地下管线普查、工业中的地质…

五、MySQL联合查询学习笔记 + 查询总结(详解)

9、 联合查询 union 联合 合并:将多条查询语句的结果合并成一个结果 语法: 查询语句1 UNION 查询语句2 UNION … 应用场景:要查询的结果来自多个表,且多个表之间没有直接的连接关系,但查询的信息相同 特点&#xff…

LeetCode 2124. 检查是否所有 A 都在 B 之前

文章目录1. 题目2. 解题1. 题目 给你一个 仅 由字符 a 和 b 组成的字符串 s 。 如果字符串中 每个 ‘a’ 都出现在 每个 ‘b’ 之前,返回 true ;否则,返回 false 。 示例 1: 输入:s "aaabbb" 输出&#x…

设计模式—桥接模式

前言 这里以电视遥控器为例子引出桥接模式,首先每个牌子的电视都有一个遥控器,可以设计吧遥控器作为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视品牌的遥控器都继承这个抽象类 这样的实现使得每个不同型号的电视都有自…

Android8.1怎么装谷歌,谷歌PixelXL安卓9.0/8.1/8.0/7.X安装面具ROOT方案

免费预览:注意1:请提前备份资料,解锁BL会清空所有数据!注意2:请提前移除谷歌账户(设置—账户—你的谷歌账户—移除)全套资料在教程末尾1. 解锁BL在手机开机状态下,启用开发者选项并勾选「允许USB调试」和「…

六、MySQL DML数据操纵语言学习笔记(插入、修改、删除详解 + 强化复习)

DML语言 数据操作语言: 插入:insert修改:update删除:delete 一、插入语句 (1)方式一:经典的插入方式 语法: insert into 表名(列名,…)values…

LeetCode 2125. 银行中的激光束数量

文章目录1. 题目2. 解题1. 题目 银行内部的防盗安全装置已经激活。 给你一个下标从 0 开始的二进制字符串数组 bank ,表示银行的平面图,这是一个大小为 m x n 的二维矩阵。 bank[i] 表示第 i 行的设备分布,由若干 ‘0’ 和若干 ‘1’ 组成。…

2-Second Scrum Meeting-20151202

任务安排 闫昊: 今日完成:设计学习进度的管理。 明日任务:请假。(编译计组,压力有点大) 金哉仁: 今日完成:继续商讨APP相关界面与设计,安装AndroidStudio。 明日任务&…

android查询所有照片,Android查询外部存储中所有照片

最近写了个自定义相册模块,其中比较核心的算是查询照片了,直接上代码吧val contentUri MediaStore.Files.getContentUri("external")val sortOrder MediaStore.Files.FileColumns.DATE_MODIFIED " DESC"val selection "(${M…

七、MySQL DDL数据定义语言 学习笔记(库和表的创建、修改、删除详解 + 强化复习)

DDL语言 数据定义语言 库和表的管理: 一、库的管理: 创建、修改、删除 二、表的管理: 创建、修改、删除 创建: create 修改: alter 删除: drop 一、库的管理 1、库的创建: 语法: create database [if not exists…

LeetCode 2126. 摧毁小行星(贪心)

文章目录1. 题目2. 解题1. 题目 给你一个整数 mass ,它表示一颗行星的初始质量。 再给你一个整数数组 asteroids ,其中 asteroids[i] 是第 i 颗小行星的质量。 你可以按 任意顺序 重新安排小行星的顺序,然后让行星跟它们发生碰撞。如果行星…

bzoj:2018 [Usaco2009 Nov]农场技艺大赛

Description Input 第1行:10个空格分开的整数: N, a, b, c, d, e, f, g, h, M Output 第1行:满足总重量最轻,且用度之和最大的N头奶牛的总体重模M后的余数。 Sample Input 2 0 1 5 55555555 0 1 0 55555555 55555555Sample Output 51HINT 样例…

android操作系统+流量,为什么我的安卓操作系统走这么多流量?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼这是用流量管理软件拦截安卓os偷跑流量的记录!国内的软件没个是能拦截系统联网的! AppID :-1 应用程序名称:Kernel 总数据包阻塞:170 ff02:0000:0000:0000:0000:0000:0000:0016(1) 163.177.66.11(3) 58.250.…

八、一篇文章快速搞懂MySQL 常见的数据类型(整型、小数、字符型、日期型详解)

常见的数据类型 1、数值型: 整型 小数: 定点数 浮点数 2、字符型: 较短的文本:char、varchar 较长的文本:text、blob(较长的二进制数据) 3、日期型: 一、整型 1)分类…

LeetCode 2129. 将标题首字母大写

文章目录1. 题目2. 解题1. 题目 给你一个字符串 title ,它由单个空格连接一个或多个单词组成,每个单词都只包含英文字母。请你按以下规则将每个单词的首字母 大写 : 如果单词的长度为 1 或者 2 ,所有字母变成小写。否则&#xf…

九、MySQL常见约束相关知识总结 学习笔记 + 强化复习(六大约束)

常见约束: 一、含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性 二、分类:六大约束 1、NOT NULL:非空,用于保证该字段的值不能为空 比如姓名、学号等 2、DEFAULT:默认&…

html 获取鼠标在canvas上的坐标,html5-canvas 检测鼠标在画布上的位置

示例本示例将说明如何获取鼠标相对于画布的位置,例如(0,0)HTML5 Canvas的左上角。的e.clientX和e.clientY将获得相对于文档的顶部位置的鼠标,来改变这种是基于画布的顶部,我们减去left,并right从客户端X和Y的画布位置var canvas …

LeetCode 2130. 链表最大孪生和(链表快慢指针+反转链表+双指针)

文章目录1. 题目2. 解题1. 题目 在一个大小为 n 且 n 为 偶数 的链表中&#xff0c;对于 0 < i < (n / 2) - 1 的 i &#xff0c;第 i 个节点&#xff08;下标从 0 开始&#xff09;的孪生节点为第 (n-1-i) 个节点 。 比方说&#xff0c;n 4 那么节点 0 是节点 3 的孪…