【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 值,务必牢记这一点。


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

目录
相关文章
|
12月前
|
SQL 弹性计算 关系型数据库
SQL 必知必会(2)—— SQL的增删改查及函数应用
本实验提供一台基础环境为CentOS的ECS(云服务器)实例。我们将会在这台服务器上安装mysql,然后学习基本的SQL语句。 体验此场景后,可以掌握的知识有: (1)MySQL安装。 (2)基本SQL语句的使用。
|
SQL
【SQL系列】复杂排序
【SQL系列】复杂排序
241 0
|
SQL Oracle 关系型数据库
SQL常用函数集合(一)
SQL常用函数集合(一)
129 0
SQL常用函数集合(一)
|
SQL Oracle 关系型数据库
SQL 去重的 3 种方法​,还有谁不会?
SQL 去重的 3 种方法​,还有谁不会?
336 0
SQL 去重的 3 种方法​,还有谁不会?
|
SQL 数据处理
|
SQL HIVE
SQL之行列转换
Hive 查询语句之行列转换
144 0
SQL 差集计算的例子
SELECT a.assigned_to_workno from (SELECT DISTINCT(assigned_to_workno) from issue ) a where a.
1217 0
|
SQL 数据安全/隐私保护