【SQL查询系列】子查询经典案例
文章目录
- 前言
- 数据库
- 查询案例
- 1. 查询工资最低的员工信息: last_name, salary
- 2. 查询平均工资最低的部门信息
- 3. 查询平均工资最低的部门信息和该部门的平均工资
- 4. 查询平均工资最高的 job 信息
- 5. 查询平均工资高于公司平均工资的部门有哪些?
- 6. 查询出公司中所有 manager 的详细信息.
- 7. 各个部门中 最高工资中最低的那个部门的 最低工资是多少
- 8. 查询平均工资最高的部门的 manager 的详细信息: last_name, department_id, email, salary
- student数据库
- 查询练习
- 一、查询每个专业的学生人数 SELECT majorid,COUNT(*)
- 二、查询参加考试的学生中,每个学生的平均分、最高分
- 三、查询姓张的每个学生的最低分大于60的学号、姓名
- 四、查询每个专业生日在“1988-1-1”后的学生姓名、专业名称
- 五、查询每个专业的男生人数和女生人数分别是多少
- 六、查询专业和张翠山一样的学生的最低分
- 七、查询大于60分的学生的姓名、密码、专业名
- 八、按邮箱位数分组,查询每组的学生个数
- 九、查询学生名、专业名、分数
- 十、查询哪个专业没有学生,分别用左连接和右连接实现
- 十一、查询没有成绩的学生人数
- 【学习资料】
- 【01学习笔记】
- 【02课程资料】
前言
近期在补SQL的基础,特别整理了一下SQL的一些查询练习语句,边学边笔记,持续更新~
数据库
查询案例
1. 查询工资最低的员工信息: last_name, salary
#①查询最低的工资
SELECT MIN(salary)
FROM employees#②查询last_name,salary,要求salary=①
SELECT last_name,salary
FROM employees
WHERE salary=(SELECT MIN(salary)FROM employees
);
2. 查询平均工资最低的部门信息
#方式一:
#①各部门的平均工资
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id
#②查询①结果上的最低平均工资
SELECT MIN(ag)
FROM (SELECT AVG(salary) ag,department_idFROM employeesGROUP BY department_id
) ag_dep#③查询哪个部门的平均工资=②SELECT AVG(salary),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);#④查询部门信息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));#方式二:
#①各部门的平均工资
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id#②求出最低平均工资的部门编号
SELECT department_id
FROM employees
GROUP BY department_id
ORDER BY AVG(salary)
LIMIT 1;#③查询部门信息
SELECT *
FROM departments
WHERE department_id=(SELECT department_idFROM employeesGROUP BY department_idORDER BY AVG(salary) LIMIT 1
);
3. 查询平均工资最低的部门信息和该部门的平均工资
#①各部门的平均工资
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id
#②求出最低平均工资的部门编号
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id
ORDER BY AVG(salary)
LIMIT 1;
#③查询部门信息
SELECT d.*,ag
FROM departments d
JOIN (SELECT AVG(salary) ag,department_idFROM employeesGROUP BY department_idORDER BY AVG(salary) LIMIT 1
) ag_dep
ON d.`department_id`=ag_dep.department_id;
4. 查询平均工资最高的 job 信息
#①查询最高的job的平均工资
SELECT AVG(salary),job_id
FROM employees
GROUP BY job_id
ORDER BY AVG(salary) DESC
LIMIT 1
#②查询job信息
SELECT *
FROM jobs
WHERE job_id=(SELECT job_idFROM employeesGROUP BY job_idORDER BY AVG(salary) DESCLIMIT 1
);
5. 查询平均工资高于公司平均工资的部门有哪些?
#①查询平均工资
SELECT AVG(salary)
FROM employees#②查询每个部门的平均工资
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id#③筛选②结果集,满足平均工资>①
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id
HAVING AVG(salary)>(SELECT AVG(salary)FROM employees
);
6. 查询出公司中所有 manager 的详细信息.
#①查询所有manager的员工编号
SELECT DISTINCT manager_id
FROM employees#②查询详细信息,满足employee_id=①
SELECT *
FROM employees
WHERE employee_id =ANY(SELECT DISTINCT manager_idFROM employees
);
7. 各个部门中 最高工资中最低的那个部门的 最低工资是多少
#①查询各部门的最高工资中最低的部门编号
SELECT department_id
FROM employees
GROUP BY department_id
ORDER BY MAX(salary)
LIMIT 1#②查询①结果的那个部门的最低工资
SELECT MIN(salary) ,department_id
FROM employees
WHERE department_id=(SELECT department_idFROM employeesGROUP BY department_idORDER BY MAX(salary)LIMIT 1
);
8. 查询平均工资最高的部门的 manager 的详细信息: last_name, department_id, email, salary
#①查询平均工资最高的部门编号
SELECT department_id
FROMemployees
GROUP BY department_id
ORDER BY AVG(salary) DESC
LIMIT 1 #②将employees和departments连接查询,筛选条件是①SELECT last_name, d.department_id, email, salary FROMemployees e INNER JOIN departments d ON d.manager_id = e.employee_id WHERE d.department_id = (SELECT department_id FROMemployees GROUP BY department_id ORDER BY AVG(salary) DESC LIMIT 1) ;
student数据库
查询练习
一、查询每个专业的学生人数 SELECT majorid,COUNT(*)
FROM student
GROUP BY majorid;
二、查询参加考试的学生中,每个学生的平均分、最高分
SELECT AVG(score),MAX(score),studentno
FROM result
GROUP BY studentno;
三、查询姓张的每个学生的最低分大于60的学号、姓名
SELECT s.studentno,s.`studentname`,MIN(score)
FROM student s
JOIN result r
ON s.`studentno`=r.`studentno`
WHERE s.`studentname` LIKE '张%'
GROUP BY s.`studentno`
HAVING MIN(score)>60;
四、查询每个专业生日在“1988-1-1”后的学生姓名、专业名称
SELECT m.`majorname`,s.`studentname`
FROM student s
JOIN major m
ON m.`majorid`=s.`majorid`
WHERE DATEDIFF(borndate,'1988-1-1')>0
GROUP BY m.`majorid`;
五、查询每个专业的男生人数和女生人数分别是多少
SELECT COUNT(*),sex,majorid
FROM student
GROUP BY sex,majorid;
六、查询专业和张翠山一样的学生的最低分
#①查询张翠山的专业编号
SELECT majorid
FROM student
WHERE studentname = '张翠山'#②查询编号=①的所有学生编号
SELECT studentno
FROM student
WHERE majorid=(SELECT majoridFROM studentWHERE studentname = '张翠山')
#②查询最低分
SELECT MIN(score)
FROM result
WHERE studentno IN(SELECT studentnoFROM studentWHERE majorid=(SELECT majoridFROM studentWHERE studentname = '张翠山')
)
七、查询大于60分的学生的姓名、密码、专业名
SELECT studentname,loginpwd,majorname
FROM student s
JOIN major m ON s.majorid= m.majorid
JOIN result r ON s.studentno=r.studentno
WHERE r.score>60;
八、按邮箱位数分组,查询每组的学生个数
SELECT COUNT(*),LENGTH(email)
FROM student
GROUP BY LENGTH(email);
九、查询学生名、专业名、分数
SELECT studentname,score,majorname
FROM student s
JOIN major m ON s.majorid= m.majorid
LEFT JOIN result r ON s.studentno=r.studentno
十、查询哪个专业没有学生,分别用左连接和右连接实现
#左
SELECT m.`majorid`,m.`majorname`,s.`studentno`
FROM major m
LEFT JOIN student s ON m.`majorid` = s.`majorid`
WHERE s.`studentno` IS NULL;#右
SELECT m.`majorid`,m.`majorname`,s.`studentno`
FROM student s
RIGHT JOIN major m ON m.`majorid` = s.`majorid`
WHERE s.`studentno` IS NULL;
十一、查询没有成绩的学生人数
SELECT COUNT(*)
FROM student s
LEFT JOIN result r ON s.`studentno` = r.`studentno`
WHERE r.`id` IS NULL
【学习资料】
【01学习笔记】
- 【SQL数据库基础01】数据库和SQL概述
- 【SQL数据库基础02】MySQL最新版安装使用教程–(安装、卸载、登录、常用命令、语法规范、图形化界面SQLyog)
- 【SQL数据库基础03】数据处理之查询 (•过滤和排序数据 •分组函数 •分组查询 •多表查询 •分页查询 •联合查询)
- 【SQL查询系列】子查询经典案例
- 【SQL数据库基础04】数据操纵语言DML,即SQL的增删改查
- 【SQL数据库基础05】数据定义语言DDL-库表的管理、数据类型、常见的约束
- 【SQL数据库基础05-1】常见的数据类型–• 数值类型• 字符类型• 日期类型
- 【SQL数据库基础05-2】常见约束与标识列
- 【SQL数据库基础06】事务控制语言TCL–事务(概念、特性、隔离级别、案例演示)
- 【SQL数据库基础07】视图–定义、增删改查视图
- 【SQL数据库基础08】变量–系统变量:全局、会话、自定义变量
- 【SQL数据库基础09】存储过程
- 【SQL数据库基础10】函数
- 【SQL数据库基础11】流程控制结构
【02课程资料】
- 《数据库系统概论(第5版)》
- 计院学网盘复习资料–数据库
- 尚硅谷MySQL核心技术-婷姐
【SQL查询系列】子查询经典案例相关推荐
- oracle sql 转换成 hive sql -子查询转关联查询(三).子查询中嵌套子查询
其他sql格式也在更新中,可直接查看俺的这个系列,要是没有你需要的格式,可在评论或私信我,俺现在一天一看 Oracle转换hive 其他sql格式也在更新中,可直接查看俺的这个系列,要是没有你需要的格 ...
- SQL进阶,子查询与窗口函数
本节给大家讲解SQL在实际过程中用途比较多的子查询与窗口函数,下面一起学习. 示例工具:MySQL8.0.Navicat Premium 12 本文讲解内容:子查询与窗口函数 适用范围:SQL进阶应用 ...
- SQL语言之子查询(Oracle)
子查询(内查询) 一个select语句嵌套在另一个select语句中的子句: 例 可以用组合两个查询的方法解决这个问题,放置一个查询到另一个查询中.内查询或子查询返回一个值给外查询或主查询.使用一个子 ...
- mysql多表查询sql语句怎么写_MySQL基本SQL语句之单表查询、多表查询和子查询
一.简单查询: 基本语法: SELECT * FROM tb_name;查询全部 SELECT field1,field2 FROM tb_name; 投影 SELECT [DISTINCT] * F ...
- SQL优化--使用关联查询代替子查询
SQL优化--使用关联查询代替子查询 测试例子: 子查询: select a.*, (select workflowname from workflowbase where id=workflowid ...
- sql 子查询 嵌套查询_SQL子查询– SQL中的嵌套查询
sql 子查询 嵌套查询 In the real world, there are times when we need a particular set of data but we don't h ...
- 金仓数据库 KingbaseES SQL 语言参考手册 (10. 查询和子查询)
10. 查询和子查询 本章描述SQL查询以及子查询.包含以下章节: 关于查询和子查询 创建简单查询 层次查询 集合操作 查询结果排序 JOIN操作 使用子查询 限制嵌套查询层数 DUAL表查询 10. ...
- sql镶嵌查询_【SQL】嵌套查询与子查询
前言 sql的嵌套查询可以说是sql语句中比较复杂的一部分,但是掌握好了的话就可以提高查询效率.下面将介绍带in的子查询.带比较运算符的子查询.带any/all的子查询.带exists的子查询以及基于 ...
- mysql 单表 子查询_MySQL基本SQL语句之单表查询、多表查询和子查询 | 旺旺知识库...
一.简单查询: 基本语法: SELECT * FROM tb_name;查询全部 SELECT field1,field2 FROM tb_name; 投影 SELECT [DISTINCT] * F ...
- mysql 单表子查询语句_MySQL基本SQL查询语句:多表查询和子查询示例
一.简单查询:基本语法: 代码如下 SELECT * FROM tb_name; 查询全部 代码如下 SELECT field1,field2 FROM tb_name; 投影 代码如下 SELECT ...
最新文章
- 2022-2028年中国钢铁冶炼行业市场研究及前瞻分析报告
- 关系竞争 :今目标可能成为个一个的企业社交网络
- python编程能力等级测试_56岁的潘石屹参加全国青少年编程能力等级测试,你还在问编程是什么?...
- Android adb你真的会用吗?
- Machine Learning week 6 quiz: Advice for Applying Machine Learning
- Ribbon-负载均衡原理
- Angular formControl指令定义的位置
- [Noi2016]区间
- android 图像处理(黑白,模糊,浮雕,圆角,镜像,底片,油画,灰白,加旧)...
- ACM-ICPC 2018 徐州赛区网络预赛 J Maze Designer(最大生成树+LCA)
- unity5.0安卓开发环境配置
- My97pickerdate设置默认开始日期为当天
- 计算机主板外频,笨鸟先飞 主板超频BIOS选项接触(图解)
- MarkDown-Typora MarkDown Reference
- java特种兵_《Java特种兵(上册)》PDF 下载
- 兼容各大浏览器导出Excel
- [DBNETLIB][ConnectionOpen(connect()).]SQL Server 不存在或拒绝访问解决方方法
- matlab怎么显示特征脸,matlab表情识别 Matlab表情识别,特征脸[1 ]作为面部表情分类的方法 联合开发网 - pudn.com...
- 图片怎么压缩小于1m?
- 学术论文写作以及discussions/results与conclusion的区别