`
myboy123
  • 浏览: 13447 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

交集和差集的查询:EXISTS

    博客分类:
  • SQL
 
阅读更多

使用关键字 EXISTS 引入子查询可以将该子查询用作存在性测试,即测试是否存在满足子查询准则的数据。如果子查询返回的结果是空集,则判断为不存在,即 EXISTS失败,NOT EXISTS 成功。如果子查询返回至少一行的数据记录,则判断为存在,即
EXISTS 成功,NOT EXISTS 失败。 
      关键字 EXISTS 引入子查询的语法有所特别: 
●  关键字 EXISTS 一般直接跟在外围查询的 WHERE 关键字后面。它的前面没有列名、常量或者表达式; 
●  关键字 EXISTS 引入的子查询的 SELECT 列表清单可以而且通常都是由星号 “*”组成的。因为我们只是测试满足子查询的数据行的存在性,在子查询的 SELECT列表清单中加入列名没有实际意义。 
      将关键字 EXISTS 与无关子查询一起使用的意义不大,如果这么做,作用仅仅是子查询返回空值,外围查询返回的结果也就为空,如果子查询返回非空值,外围查询就会返回所有外层表的数据行。所以实际上,EXISTS 通常都和相关子查询一起使用。我们
知道,在使用相关子查询时,对外表中的每一行,子查询都要运行一遍,该行的值也要在子查询的 WHERE 子句中被使用。这样,我们通过 EXISTS 子句就能将外层表中的各行数据依次与子查询处理的内层表中的数据进行存在性比较,得到我们需要的结果。下
面我们就要为大家介绍如何使用关键字EXISTS和相关子查询来查找两个表的交集和差集。 
       两个集合的交集是指同属于这两个集合中的元素所构成的集合,而差集则是指这两个集合中的只属于第一个集合的元素所构成的集合。下面我们举一些例子来说明如何使用关键字(NOT) EXISTS 来查找交集和差集。 
       例如,我们想查找有负责过具体项目的部门经理,就需要在部门表 Department 的mgrid 列和项目表 Project 的 pmgrid 列上查找交集: 

SELECT DISTINCT mgrid manager_id 
FROM Department d 
WHERE EXISTS 
     (SELECT * 
FROM Project 
WHERE d.mgrid = pmgrid) 
ORDER BY mgrid 

Results 
Manager_id  
————  
1001 
4001 
[2rows] 

如果,我们想查找的是有负责过具体项目但不是部门经理的员工,就需要查找项目表 Project 的 pmgrid 列和部门表 Department 的 mgrid 列上的差集: 

SELECT DISTINCT pmgrid 
FROM Project p 
WHERE NOT EXISTS 
     (SELECT * 
FROM Department 
WHERE mgrid = p.pmgrid) 
ORDER BY pmgrid 

Results 
pmgrid  
———— 
1002 
1004 
4003 
4004 
[4rows] 

或者我们希望查找的是没有负责过任何项目,也不是部门经理的公司员工,这样我们就要查找员工表Employee的id列和项目表Project的pmgrid列以及部门表Department的 mgrid 列的差集(表 Employee、Department 和 Project 见附录 I): 

SELECT DISTINCT name Worker_name, id Worker_id 
FROM Employee e 
WHERE NOT EXISTS 
       (SELECT * 
FROM Project p, Department d 
WHERE e.id = p.pmgrid OR 
e.id = d.mgrid) 
ORDER BY id 

Results 
Worker_name   Worker_id  
—————    —— 
李大平        1003 
庞文凯        1005 
刘燕          2002 
林志祥        2003 
吴忠彦        3002 
魏箐          3003 
王静          3004 
张敏燕        4002 
林雪飞        4005 
姜艳成        4006 
梁朝阳        5002 
王力刚        5003 
余文惠        5004 
陈志强        6002 
[14rows] 
文章转自:
http://www.dnew168.com/thread-1767-1-1.html
分享到:
评论

相关推荐

    C# 两个datatable中的数据快速比较返回交集 并集或差集

    当我们处理多个DataTable时,可能需要比较它们之间的数据,找出交集、并集或差集。这在数据分析、数据清洗或者数据库同步等场景中非常常见。本教程将通过一个完整的源码示例,帮助初学者理解如何在C#中快速地完成这...

    sql server 交集,差集的用法详解

     在集合运算中比联接查询和EXISTS/NOT EXISTS更方便。 并集运算(UNION) 并集:两个集合的并集是一个包含集合A和B中所有元素的集合。 在T-SQL中。UNION集合运算可以将两个输入查询的结果组合成一个结果集。需要...

    实验五 数据库综合查询(学生).doc

    本实验是为了让学生掌握数据库查询的基本语法和查询条件表示方法,了解连接查询、嵌套查询和集合查询的表示及使用。实验的主要内容包括了 SELECT 语句的基本语法格式和执行方法、查询条件种类和表示方法、连接查询和...

    Delphi使用exists和noexists数据库查询

    摘要:Delphi源码,数据库应用,exists Delphi使用exists和noexists进行...可以求交集和差集,有兴趣参考下。带有数据库文件,在Database文件夹下,测试前请附加好数据库并连接数据库信息。 运行环境:Delphi+MSSQL

    Oracle教程.docx

    * EXISTS 和 NOT EXISTS:检查子查询返回的行是否存在 * ANY、SOME 和 ALL:将值与列表或子查询进行比较 7. 设置操作符 * UNION:合并两个或多个独立查询的结果 * INTERSECT:实现两个独立查询的结果的交集 * ...

    《数据库原理》所有实验.doc

    - 集合运算:使用`UNION`进行集合合并,通过`AND`或`OR`实现集合交集和差集。 3. 实验示例 实验给出了多个具体的查询例子,如: - 查询所有性别为“男”的学生,按学号升序排列。 - 计算学生的选课成绩对应的积分,...

    SQL各种查询方法

    10. **集合查询**:`INTERSECT`和`EXCEPT`操作符用于找出两个查询结果的交集或差集。 11. **聚合查询**:使用`HAVING`子句对分组后的结果进行过滤,它类似于`WHERE`,但`HAVING`只能在聚合函数之后使用。 以上是...

    数据库查询2(各种查询,全)

    全)”及描述,本文将详细介绍以下几种数据库查询方法:简单查询、普通多表连接查询、自表查询、外连接查询、表示否定的查询、表示仅有的查询、表示至少的查询、表示全称的查询以及表示交集与差集的查询。...

    SQL查询 数据库 实验报告

    4. 集合查询:UNION, UNION ALL, INTERSECT 和 EXCEPT 是集合操作符,分别用于合并结果集(去除重复行)、合并结果集(包含重复行)、找到两个查询结果的交集和找到两个查询结果的差集。 5. GROUP BY子句:用于将...

    数据库系统概论相关习题

    - `EXISTS` 和 `NOT EXISTS`:与 `IN` 相似,但更关注是否有匹配的子查询结果,例如 `(6)` 中的 `SELECT CNO, CNAME FROM C WHERE NOT EXISTS (SELECT * FROM S WHERE NOT EXISTS (SELECT * FROM SC WHERE SC.CNO=C...

    《数据库原理实验授课计划表与要求》.doc

    - **集合运算**:使用UNION进行并集操作,利用AND/OR进行交集和差集操作。 3. **实验步骤示例**: - 查询特定条件的元组,如查询性别为“男”的学生,计算合格课程的积分,查找特定学分的课程,搜索包含特定词汇...

    实验2、SQL的数据查询.doc

    - 使用AND或OR进行交集和差集操作。 例如,查询选修了课程"C++"或"JAVA"的学生编号、姓名和积分: ```sql SELECT S.StudentID, S.Name, SUM([1 + (R.Score - 60) * 0.1] * C.Credit) AS Points FROM Students ...

    SQL之异曲同工审计查询技巧.pdf

    在这样的背景下,SQL提供了多种数据处理技巧,其中包括外连接(Left Outer Join和Right Outer Join)、集合运算(如交集、差集等)以及in、exists等查询技术。这些技术的灵活运用可以极大提高审计效率和效果,它们是...

    浅谈Python 集合(set)类型的操作——并交差

    集合提供了一系列高效的操作方法,包括并集、交集、差集和对称差集等。这些操作对于处理多个数据集之间的关系特别有用,例如数据分析、算法设计等领域。 #### 一、Python集合的基本概念 **定义:** - **集合** 是...

    数据库交互式SQL试验报告

    - **集合查询**:包括并集、交集和差集操作。 - **更新操作**: - **插入数据**:`INSERT INTO`语句用于向表中插入新记录。 - **修改数据**:`UPDATE`语句用于修改现有记录,通常与`WHERE`子句一起使用,指定...

    Oracle9i的简化SQL语法

    2. **集合运算符**:引入了`UNION ALL`、`INTERSECT`和`MINUS`操作符,使得数据集合的并集、交集和差集操作更加直观。 3. **分析函数**:新增了窗口函数,如`ROW_NUMBER()`、`RANK()`、`DENSE_RANK()`,允许在结果...

    Entity_SQL_Framework.docx

    - **Union、Intersect、Except**: 可以使用这些关键字表示并集、交集和差集。 - **Join 表达式**: 支持使用 `JOIN` 语法进行连接操作。 - **级联查询**: 支持类似于 `p.Address.City` 的级联属性访问。 - **不支持的...

    python-集合使用场景.docx

    集合支持多种数学运算,包括并集、交集和差集。 - **并集**(Union):使用`|`运算符,将两个集合的元素合并成一个新的集合,不包含重复元素。 - **交集**(Intersection):使用`&`运算符,返回两个集合共有的...

    数据库结构化查询语言SQL

    SQL查询中的逻辑运算符和谓词包括AND、OR、NOT进行逻辑判断,IN、NOT IN用于包含或排除特定值,EXISTS检查子查询是否存在结果,INTERSECT、UNION和MINUS分别用于集合的交集、并集和差集。 以图书管理关系数据模型为...

    数据库原理及应用实验报告

    7. 交集(`INTERSECT`)和差集(`EXCEPT`)操作:第八题通过`INTERSECT`找出吴宾和张海选修的相同课程,第九题利用`EXCEPT`找出李勇选了但刘晨未选的课程,这两个集合运算符帮助我们分析不同学生之间的课程选择差异...

Global site tag (gtag.js) - Google Analytics