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