本专栏收录了数据库的知识点,而基础DQL系列文章将对每种查询都单独写一篇文章,提供给有需要的小伙伴参考,本专栏地址可以戳下面链接查看
🎈 数据库知识点总结(持续更新中):【数据库知识点】
🔑 数据库相关练习题(持续更新中):【数据库练习题】
🔥 一个提供给Java学习者的专栏:【拼图小游戏(Java)】
一、前言
本文将讲述多表查询中的子查询,也是一个难点
二、概述
- SQL语句中嵌套的SELECT语句,被称为嵌套查询,又称子查询
- 子查询的外部语句可以是
INSERT
/UPDATE
/DELETE
/SELECT
中任何一个 - 根据子查询的不同结果,可分为:表量子查询(子查询结果为单个值)/ 列子查询(子查询结果为一列)/ 行子查询(查询结果为一行)/ 表子查询(子查询结果为多行多列 )
三、标量子查询
1.概述
子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式
2.常用操作符
- =,<>,>,>=,<,<=
3.实例
查询"销售部"的所有员工信息
思路
- 查询"销售部"部门ID
SELECT id FROM Dept WHERE Name = '销售部';
- 根据销售部部门ID,查询员工信息
SELECT * FROM emp WHERE Dept_id = 4;
完整语句
SELECT * FROM emp WHERE Dept_id = (SELECT id FROM Dept WHERE Name = '销售部');
四、列子查询
1.概述
子查询返回的结果是一列(可以是多行)
2.常用操作符
- IN、NOT IN、ANY、SOME、ALL
操作符 | 描述 |
---|---|
IN | 在指定集合之内,多选一 |
NOT IN | 不在指定集合范围只能 |
ANY | 子查询返回列表中,有任意一个满足即可 |
SOME | 与ANY等同,使用 SOME的地方都可以使用ANY |
ALL | 子查询返回列表的所有值都必须满足 |
3.实例
查询比财务部所有人工资都高的员工信息
思路
- 查询财务部部门ID
SELECT id FROM Dept WHERE Name = '财务部'
- 查询财务部人员工资
SELECT Salary FROM emp WHERE Dept_id = ( SELECT id FROM Dept WHERE Name = '财务部');
- 比财务部所有人工资都高的员工信息
完整语句
SELECT * FROM emp WHERE Salary > ALL(SELECT Salary FROM emp
WHERE Dept_id = ( SELECT id FROM Dept WHERE Name = '财务部'));
五、行子查询
1.概述
子查询返回的结果是一行(可以是多列)
2.常用操作符
- =、<>、IN、NOT IN
3.实例
查找与"张三"的薪资及其直属领导相同的员工信息
思路
- 查找与"张三"的薪资与直属领导
SELECT Salary,managerid FROM emp WHERE name = '张无忌';
- 查询与"张三"的薪资及直属领导相同的员工信息
完整语句
SELECT * FROM emp (Salary,managerid) = (SELECT Salary,managerid FROM emp WHERE name = '张无忌')
六、表子查询
1.概述
子查询返回结果是多行多列
2.常用操作符
- IN
3.实例
查找与"张三"、"李四"的薪资与直属领导相同的员工信息
思路同上
完整语句
SELECT * FROM emp (Salary,managerid) = (SELECT Salary,managerid FROM emp WHERE name = '张三' OR name = '李四')
七、结语
如果有任何的问题欢迎在评论区留言