SQL实战新手入门:EXCEPT和MINUS操作符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL实战新手入门:EXCEPT和MINUS操作符相关的知识,希望对你有一定的参考价值。

参考技术A

   EXCEPT和MINUS操作符

  数据库程序设计的目标就是最大限度地减少需要通过网络传送的数据量 并消除客户端不必要的处理过程 也就是说 只向RDBMS请求需要的数据 不触动其余任何之物 INTERSECT操作符可以求取两个查询结果的交集 而EXCEPT操作符则用于求取两个查询结果的差集

  INTERSECT操作符和EXCEPT操作符是一种便利的表示方式 可以使用INNER JOIN和OUTER JOIN来分别替代它们(加上某些调整 消除重复的记录)

  在上面的例子中 如果使用EXCEPT操作符代替INTERSECT操作符 查询结果将显示在书柜上还没有分配到位置的所有图书(即在LOCATION表中没有相应的记录)

  SELECT bk_id FROM books

  EXCEPT

  SELECT fk_bk_loc FROM location;

  bk_id

  

  ( row(s) affected)

  该查询仅返回在BOOKS表中存在的同时在LOCATION表中不存在相应记录的记录 在本章结尾的练习中将尝试使用INTERSECT操作符和EXCEPT操作符

  可以使用NOT EXISTS操作符和相关子查询来代替EXCEPT(或MINUS)关键字 虽然没有获得SQL标准委员会的官方支持 但所有RDBMS都支持这种语法(除了在OpenOffice中作为嵌入式RDBMS的HSQLDB例外)

  DB Microsoft SQL Server和PostgreSQL都实现了EXCEPT关键字 Oracle则使用MINUS关键字 mysql和HSQLDB既支持EXCEPT操作符 又支持MINUS关键字 Microsoft Access对两者都不支持

   试一试求取数据集的差集

  为了进一步观察数据集操作符(例如INTERSECT操作符和EXCEPT操作符)的使用 下面将在已经完美匹配的数据中添加一些新数据 在本章之前讨论LEFT OUTER JOIN时已经执行过类似的操作 在下面的练习中可以再次使用相同的记录

  接下来将在BOOKS表中添加一条不匹配的记录 用于演示INTERSECT操作符和EXCEPT操作符的应用

  ( ) 打开Microsoft SQL Server Management Studio 使用Windows身份验证连接到数据库

  ( ) 单击位于左上角的New Query按钮

  ( ) 在打开的查询窗口(中间的窗格)中输入下面的SQL查询

  INSERT INTO books (bk_id bk_title)

  VALUES ( UNMATCHED RECORD )

  ( ) 现在BOOKS表中已经具有一条新记录 该记录在LOCATION表中没有对应的位置 此时使用INTERSECT操作符和EXCEPT操作符将查询到什么结果呢?首先 执行一个使用INTERSECT操作符的查询

  SELECT bk_id FROM books

  INTERSECT

  SELECT fk_bk_loc FROM location;

  ( ) 可以预见 该查询只会返回 条记录 BOOKS表与LOCATION表中都匹配的记录

  ( ) 运行使用EXCEPT操作符的查询将产生一个不同的结果

  SELECT bk_id FROM books

  EXCEPT

  SELECT fk_bk_loc FROM location;

  bk_id

  

  

  ( row(s) affected)

   示例说明

  在将一条新记录插入到BOOKS表之后 BOOKS表中包含了 条记录 但只有 条记录在LOCATION表中具有相匹配的记录 这模拟了买到一本新书但还没有在书柜中分配图书摆放位置的情形 INTERSECT操作符仅返回那些在两个表中都匹配的记录 因此 BK_ID = 的记录将被排除在外

  当运行EXCEPT查询时 将分别从BOOKS表和LOCATION表中抽取匹配的记录 并将不匹配的记录返回 在本例中 不匹配的记录就是新插入的UNMATCHED RECORD这条记录

       返回目录 SQL实战新手入门

       编辑推荐

       Oracle索引技术

       高性能MySQL

lishixinzhi/Article/program/SQL/201311/16454

oracl中的集合操作符

1:union(并集)     union连接两条sql语句,并且去除两条sql语句重复的记录

2.union all(并集) 接两句sql语句,两句sql语句的和不用去掉重复的记录。 

3:intersect(交集)Intersect连接两句sql语句 取查询出来的两个集合的 共同部分。

4:minus(补集)  Minus 连接两句sql 语句,取查询出来的两个集合的差。

 

以上是关于SQL实战新手入门:EXCEPT和MINUS操作符的主要内容,如果未能解决你的问题,请参考以下文章

SQL入门之集合操作

SQL语句的MINUS,INTERSECT和UNION ALL

SQL语句的MINUS,INTERSECT和UNION ALL

MySQL 8.0新特性之INTERSECT和EXCEPT

MySQL 8.0新特性之INTERSECT和EXCEPT

SQL SERVER: 合并相关操作(Union,Except,Intersect) - 转载