提要:在本教程中,您将学习如何使用 PostgreSQL 的 EXCEPT 运算符将多个查询的结果合并到一个结果集里。

PostgreSQL EXCEPT 简介

UNION(并集)INTERSECT(交集) 类似,EXCEPT(差集)也是用来将多个查询的结果合并到单个结果集里。EXCEPT 返回在第一张表出现,但在第二张表不存在的记录。

它的语法如下:

SELECT column_list
FROM A
WHERE condition_a
EXCEPT 
SELECT column_list
FROM B
WHERE condition_b;

下面是它的示意图:

EXCEPT

PostgreSQL EXCEPT 示例

我们使用示例数据库中的 filminventory 表来做演示。

下面的查询将返回 film 表中所有的影片:

SELECT
 film_id,
 title
FROM
 film
ORDER BY
 title;

film

下面的查询将返回库存里所有的影片:

SELECT
 distinct inventory.film_id,
 title
FROM
 inventory
INNER JOIN film ON film.film_id = inventory.film_id
ORDER BY title;

库存影片

两个查询都返回了相同的字段:film_idtitle

要获取不在 inventory 表里的影片,可以使用 EXCEPT

SELECT
 film_id,
 title
FROM
 film
EXCEPT
 SELECT
 DISTINCT inventory.film_id,
 title
 FROM
 inventory
 INNER JOIN film ON film.film_id = inventory.film_id
ORDER BY title;

影片库存差集

要对合并后的结果集进行排序,可以在最后一个查询后面加上 ORDER BY——只在最后一个查询后面加,不是每个查询都加。

相关主题

上一篇:PostgreSQL的交集