首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
数据库
›
图数据库
›
数据库:SQL嵌套子查询本领全剖析
返回列表
发新帖
数据库:SQL嵌套子查询本领全剖析
[复制链接]
发表于 2025-11-22 10:44:18
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
嵌套子查询是SQL中一种强盛的查询方式,它答应将一个查询语句嵌套在另一个查询语句内部实行。或称为子查询嵌套查询,是指在一个查询语句中嵌套一个或多个查询语句。这些嵌套的查询语句成为外层查询(也称为主查询或父查询)的一部门,并将子查询(里层查询)的结果作为条件来举行主查询。
1、聚集成员资格
(1).IN
:用于测试某个值是否存在于子查询的结果会合。
SELECT *
FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE location_id = 1700);
复制
代码
在这个例子中,外层查询选择全部员工,
但仅限于
那些
存在于
内层子查询返回的结果聚集中的员工。内层子查询选择全部位于位置ID为1700的部门ID。
以是这个查询返回全部部门位置ID位于1700的员工
(2).NOT IN
:与IN相反,用于测试某个值是否不在子查询的结果会合。
SELECT *
FROM employees
WHERE employee_id NOT IN (SELECT manager_id FROM departments);
复制
代码
这段sql语句。外层查询选择全部员工。但仅限于那些不存在于内层子查询 中的员工。内层子查询选择全部部门司理。
以是这个查询返回全部不是任何部门司理的员工
增补!
在SQL中,
SELECT DISTINCT 和 SELECT INTERSECT
是两种用于处置处罚查询结果
会合重复数据
的差别方法。
SELECT DISTINCT:
用于从查询结果中删除重复的行,只返回唯一的行。它确保结果会合的每一行都是唯一的。
比方
假设你有一个名为 employees 的表,此中有一列 department 表现员工的部门。假如你想要查询全部差别的部门
SELECT DISTINCT department
FROM employees;
复制
代码
这将返回 employees 表中全部差别的部门名称,每个部门只出现一次。
SELECT INTERSECT
: 用于返回两个或多个查询结果集的交集,即同时出现在全部查询结果会合的行。它要求每个查询的结果会合的列数和列的数据范例必须匹配。
比方
假设你有两个表 employees_dept1 和 employees_dept2,它们分别包罗两个差别部门中的员工。假如你想要找出同时在这两个部门中的员工(假设它们有一个共同的列 employee_id)
SELECT employee_id
FROM employees_dept1
INTERSECT
SELECT employee_id
FROM employees_dept2;
复制代码
这将返回同时出现在 employees_dept1 和 employees_dept2 表中的 employee_id 值。
2、聚集比力
在SQL中,
SOME 和 ALL
是与比力运算符(如大于号 >、小于号 <、大于便是号 >= 和小于便是号 <=)联合利用的量词,用于在子查询的结果集上举行比力。只管 SOME 在许多
数据库
体系中可以互换利用 ANY,但意义类似。
(1).利用 ALL
当你利用 ALL 时,你正在指定一个条件,该条件必须对于子查询返回的
全部行都为真
。换句话说,外层查询中的值必须与子查询结果会合的每一个值举行比力,而且必须满意指定的比力条件。
比方 假设你有一个名为 employees 的表,此中包罗 salary(工资)列。找出工资高于某个部门全部员工工资的员工:
SELECT *
FROM employees e1
WHERE e1.department_id = '部门A'
AND e1.salary > ALL (SELECT e2.salary
FROM employees e2
WHERE e2.department_id = '部门B');
复制代码
这将返回部门A中全部工资高于部门B中全部员工工资的员工。(即>最大)
(2).利用 SOME 或 ANY
当你利用 SOME(或 ANY)时,你正在指定一个条件,该条件只需对于子查询返回的行中的至少一个为真即可。换句话说,外层查询中的值只需与子查询结果会合的某一个值举行比力,而且满意指定的比力条件。
比方 找出工资高于公司某些员工(但不是全部员工)工资的员工:
SELECT *
FROM employees e1
WHERE e1.salary > SOME (SELECT e2.salary
FROM employees e2
WHERE e2.department_id = '部门D');
复制代码
这将返回全部工资高于部门D中至少一个员工工资的员工。即(>最小)
3.空关系测试
(1)
EXISTS
:
用于测试子查询是否返回至少一行数据。假如子查询返回至少一行,则EXISTS条件为真。
SELECT *
FROM employees e
WHERE EXISTS (SELECT 1 FROM departments d WHERE e.department_id = d.department_id AND d.location_id = 1700);
复制代码
这个查询返回全部属于位于位置ID为1700的部门的员工。
注意!这里的子查询可以利用SELECT 1、SELECT *或
任何其他有用的选择列表
,
由于EXISTS只关心是否返回行,而不关心返回的详细内容。
(2)
NOT EXISTS:
与EXISTS相反,用于测试子查询是否不返回任何行。
SELECT *
FROM employees
WHERE NOT EXISTS (SELECT 1 FROM departments WHERE departments.department_id = employees.department_id AND departments.location_id = 1800);
复制代码
这个查询返回全部不属于位于位置ID为1800的部门的员工。
增补!
相干子查询
界说:在嵌套查询中,假如子查询的查询条件依赖于外层查询(或父查询)中的某个值,则称为相干子查询。
特点:
内部查询可以引用外部查询的表或字段,并根据外部查询的结果动态地改变条件。
内部查询的实行依赖于外部查询的结果,内部查询的结果随外部查询的结果而变革。
可以多层嵌套,即在一个子查询中嵌套另一个子查询。
须要重复求值以供外部查询利用,因此处置处罚次数大概较多。
不相干子查询
界说:在嵌套查询中,假如子查询的查询条件不依赖于外层查询(或父查询)中的某个值,则称为不相干子查询。
特点:
内部查询与外部查询相互独立,内部查询无法引用外部查询的表或字段。
内部查询的实行与外部查询无关,内部查询的结果在实行过程中保持稳固。
通常只包罗单层查询,不涉及多层嵌套。
处置处罚一次完成,实行后转达给外部查询作为固定条件或数据源。
实行流程
相干子查询
实行流程:先实行外部查询,然后根据外部查询的结果为内部查询提供条件,末了实行内部查询。
示例:假设有一个员工表(employee)和一个部门表(department),要查询每个部门中薪资最高的员工,可以利用相干子查询。
不相干子查询
实行流程:先实行内部查询,然后将内部查询的结果作为条件转达给外部查询举行实行。
示例:假设有一个弟子表(student)和一个结果表(score),要查询全部结果高于匀称分的弟子,可以利用不相干子查询。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
返回列表
盛世宏图
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表