【SQL系列】取差集

简介: 【SQL系列】取差集

问题

从一张表中检索没有出现在另一张表中的值。例如,你想找出 DEPT 表中都有哪些部门没有出现在 EMP 表中。

解决方案

计算差集的函数很有用。DB2、PostgreSQL、SQL Server 和 Oracle 都支持差集运算。注意: MySQL 解决方案为使用子查询,具有普适性。

DB2、PostgreSQL 和 SQL Server

使用集合运算 EXCEPT。

select deptno from dept

except

select deptno from emp

Oracle

使用集合运算 MINUS。

select deptno

from dept

minus

select deptno

from emp;

MySQL

使用子查询将 EMP 表中所有的 DEPTNO 都返回给外部查询,而外部查询在 DEPT 表中查找 DEPTO 没有出现在子查询返回结果中的行。

select deptno

from dept

where deptno not in (select deptno from emp)

扩展

使用 MySQL 解决方案时,必须考虑消除重复行的问题。示例中,DEPTNO 是主键,因此在 DEPT 表中不会重复。其他情况可参考下面扩展方法。

select d.deptno

from dept d

where not exists(

       select deptno

       from emp e

       where d.deptno = e.deptno

   )

在 SQL 中,TRUE or NULL 的结果为 TRUE,但 FALSE or NULL 的结果为 NULL!使用谓词 IN 或执行逻辑 OR 运算时,如果涉及 NULL 值,务必牢记这一点。


点个赞吧,这对我非常重要!

目录
相关文章
|
6月前
|
SQL 数据库
SQL UNION 操作符
SQL UNION 操作符
64 3
|
SQL
08SQL - union 操作符
08SQL - union 操作符
38 0
08SQL - union 操作符
|
SQL 关系型数据库 MySQL
索引和写SQL语句的注意点二
索引和写SQL语句的注意点二
65 0
|
SQL 关系型数据库 MySQL
索引和写SQL语句的注意点
索引和写SQL语句的注意点
61 0
|
SQL
【SQL系列】复杂排序
【SQL系列】复杂排序
278 0
|
SQL 关系型数据库 MySQL
SQL语句如何强制使用索引
SQL语句如何强制使用索引
SQL语句如何强制使用索引
|
SQL Oracle 关系型数据库
SQL 去重的 3 种方法​,还有谁不会?
SQL 去重的 3 种方法​,还有谁不会?
381 0
SQL 去重的 3 种方法​,还有谁不会?
|
SQL 数据处理
|
SQL 分布式计算 Spark
【译】SQL Pivot介绍
本文介绍SQL Pivot以及如何使用该功能
2403 0