数据库SQL——嵌套子查询(IN/NOT IN/SOME/ALL/EXIST/NOT EXIST)

news2024/11/14 11:00:50

        嵌套子查询是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 1SELECT *任何其他有效的选择列表因为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的部门的员工。

补充! 

  1. 相关子查询

    • 定义:在嵌套查询中,如果子查询的查询条件依赖于外层查询(或父查询)中的某个值,则称为相关子查询。
    • 特点:
      • 内部查询可以引用外部查询的表或字段,并根据外部查询的结果动态地改变条件。
      • 内部查询的执行依赖于外部查询的结果,内部查询的结果随外部查询的结果而变化。
      • 可以多层嵌套,即在一个子查询中嵌套另一个子查询。
      • 需要重复求值以供外部查询使用,因此处理次数可能较多。
  2. 不相关子查询

    • 定义:在嵌套查询中,如果子查询的查询条件不依赖于外层查询(或父查询)中的某个值,则称为不相关子查询。
    • 特点:
      • 内部查询与外部查询相互独立,内部查询无法引用外部查询的表或字段。
      • 内部查询的执行与外部查询无关,内部查询的结果在执行过程中保持不变。
      • 通常只包含单层查询,不涉及多层嵌套。
      • 处理一次完成,执行后传递给外部查询作为固定条件或数据源。

执行流程

  1. 相关子查询

    • 执行流程:先执行外部查询,然后根据外部查询的结果为内部查询提供条件,最后执行内部查询。
    • 示例:假设有一个员工表(employee)和一个部门表(department),要查询每个部门中薪资最高的员工,可以使用相关子查询。
  2. 不相关子查询

    • 执行流程:先执行内部查询,然后将内部查询的结果作为条件传递给外部查询进行执行。
    • 示例:假设有一个学生表(student)和一个成绩表(score),要查询所有成绩高于平均分的学生,可以使用不相关子查询。

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

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

相关文章

ArcGIS Pro SDK Addin-DAML

ArcGIS Pro SDK Addin-DAML 文章目录 ArcGIS Pro SDK Addin-DAML1 Panes: 重置窗格2 Button: 从功能区中移除核心按钮3 Button: 将新按钮插入功能区上的现有组4 Menu: 在图层上下文菜单中插入一个新按钮5 Menu: 在 Map Container 上下文菜单中插入新菜单6 Menu: 在2D Map上下文…

FPGA学习笔记#7 Vitis HLS 数组优化和函数优化

本笔记使用的Vitis HLS版本为2022.2&#xff0c;在windows11下运行&#xff0c;仿真part为xcku15p_CIV-ffva1156-2LV-e&#xff0c;主要根据教程&#xff1a;跟Xilinx SAE 学HLS系列视频讲座-高亚军进行学习 学习笔记&#xff1a;《FPGA学习笔记》索引 FPGA学习笔记#1 HLS简介及…

熊猫追剧 1.0.2 | 免费影视播放,独家蓝光线路

熊猫追剧是一款免费的视频播放软件&#xff0c;集合了网络上的电影、电视剧、综艺、动漫以及短剧等多种类型的视频资源。经过测试&#xff0c;该软件内没有广告干扰&#xff0c;采用独家蓝光线路&#xff0c;提供高清流畅的观影体验。用户还可以享受视频投屏、下载和倍速播放等…

[CKS] K8S AppArmor Set Up

最近准备花一周的时间准备CKS考试&#xff0c;在准备考试中发现有一个题目关于AppArmor Pod操作权限的问题。 ​ 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[CKS] …

Tomcat漏洞利用工具-TomcatScanPro(二)

项目地址 https://github.com/lizhianyuguangming/TomcatScanPro 简介 本项目是一个针对 Tomcat 服务的弱口令检测、漏洞检测以及本地文件包含&#xff08;LFI&#xff09;攻击工具。除了支持 CVE-2017-12615 漏洞的多种利用方式外&#xff0c;新版本还集成了 CNVD-2020-104…

【XML协议】轻松掌握使用C++ XML解析库——pugixml

文章介绍了xml协议的组成以及C xml解析库pugixml的常用操作。源于开发中每次遇到xml操作时&#xff0c;都要回过头查看pugixml库常用操作时什么样的&#xff0c;能不能有个更深刻和清晰的认识呢&#xff1f;其实搞清楚xml结构和pugixml组织结构的对照关系&#xff0c;以及pugix…

《无线重构世界》射频模组演进

射频前端四大金刚 射频前端由PA、LNA、滤波器、开关“四大金刚” 不同的模块有自己的工艺和性能特点 分层设计 射频前端虽然只由PA、LNA、开关、混频器4个模块构成&#xff0c;但不同模块之间相互连接且相互影响。如果将射频系统当成一个整体来理解&#xff0c;其中的细节和…

《Python编程实训快速上手》第五天--模式匹配与正则表达式

一、不用正则表达式查找文本模式 文本模式是一种人为规定的结构&#xff0c;现在有一个模式&#xff1a;3个数字-3个数字-4个数字 使用isPhoneNumber()函数来判断字符串是否匹配该模式 def isPhoneNumber(number):if len(number) ! 12:return Falsefor i in range(0,3):if n…

文件读写函数(1)

大家好&#xff0c;今天我们来介绍一下文件读写函数&#xff0c;昨天我们已经简单提及了一下文件的概念&#xff0c;那么我们今天就不多说&#xff0c;下面我们来看函数。 1.fopen函数 这个函数是用来打开文件的&#xff0c;它的两个参数分别是文件名和文件的打开模式&#x…

华为数通HCIA系列第5次考试-【2024-46周-周一】

文章目录 1、子网掩码有什么作用&#xff0c;和IP地址是什么关系&#xff0c;利用子网掩码可以获取哪些信息&#xff1f;2、已知一个IP地址是192.168.1.1&#xff0c;子网掩码是255.255.255.0&#xff0c;求其网络地址3、已知某主机的IP地址是192.168.100.200&#xff0c;子网掩…

Linux(CentOS)运行 jar 包

1、在本地终端运行&#xff0c;关闭终端&#xff0c;程序就会终止 java -jar tlias-0.0.1-SNAPSHOT.jar 发送请求&#xff0c;成功 关闭终端&#xff08;程序也会终止&#xff09; 发送请求&#xff0c;失败 2、在远程终端运行&#xff0c;关闭终端&#xff0c;程序就会终止 …

GIT:如何查找已删除的文件的历史记录

首先你得知道文件的名称和路径 然后打开 gitlab&#xff0c;到项目中&#xff0c;仓库-> 文件 查找文件 复制文件名到可能存在过这个文件的分支当中&#xff0c;就能看到了

C++builder中的人工智能(21):Barabási–Albert model(BA)模型

在此之前&#xff0c;大多数网络被想当然的认为是随机的&#xff0c;因此连接度分布可以近似用泊松分布来表示&#xff0c;而巴拉巴西与其学生阿尔伯特、郑浩雄通过对万维网度分布测量的结果却显示万维网度分布服从幂律分布&#xff0c;存在枢纽节点&#xff08;拥有大量链接的…

新手 Vue 项目运行

前言&#xff1a;前面讲了我们已经将spingboot项目运行起来了&#xff0c;现在我们只需将后台管理的Vue项目运行起来即可完成整个项目。 在运行vue项目之前&#xff0c;请先运行springboot项目&#xff0c;运行步骤请看&#xff1a;运行Springboot Vue 项目_springbootvue项目…

AUTOSAR_EXP_ARAComAPI的7章笔记(2)

☞返回总目录 相关总结&#xff1a;服务发现实现策略总结 7.2 服务发现的实现策略 如前面章节所述&#xff0c;ara::com 期望产品供应商实现服务发现的功能。服务发现功能基本上是在 API 级别通过 FindService、OfferService 和 StopOfferService 方法定义的&#xff0c;协议…

计算机网络分析题

网络的布置 根据具体需求布置网络 第二小题、网络的划分 根据路由表作出路由器拓扑图 ARP跨网络寻址 TCP报文段格式概念 网桥的转发表与动作 网络嗅探报文 十六进制化作十进制 嗅探以太网帧首部 除MAC帧以外&#xff0c;其他各层协议数据单元都是源地址在前&#xff0c;目…

【初阶数据结构与算法】线性表之链表的分类以及双链表的定义与实现

文章目录 一、链表的分类二、双链表的实现1.双链表结构的定义2.双链表的初始化和销毁初始化函数1初始化函数2销毁函数 3.双链表的打印以及节点的申请打印函数节点的申请 4.双链表的头插和尾插头插函数尾插函数 5.双链表的查找和判空查找函数判空函数 6.双链表的头删和尾删头删函…

【AI写作宝-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

【HarmonyNext】显示提示文字的方法

【HarmonyNext】显示提示文字的方法 本文介绍在 HarmonyNext 中显示提示文字的两种常见方法&#xff1a;使用自定义弹窗 CustomDialog 和使用 promptAction 的 showToast 方法。 一、使用自定义弹窗 CustomDialog 在 HarmonyNext 中&#xff0c;自定义弹窗是实现复杂提示信…

【3D Slicer】的小白入门使用指南

一、3D Slicer认识 3D Slicer是一个开源医学影像分析和可视化平台(本质是TotalSegmentator的软件版)。(补充:TotalSegmentator 是一个用于医学图像分割的开源工具,能够对104种解剖结构进行精确分割。该项目基于深度学习技术,支持CT和MR图像的处理。TotalSegmentator 提供…