PostgreSQL – EXCEPT 运算符
在 PostgreSQL 中,在比较两个或多个查询的结果集时,EXCEPT运算符用于从第一个(左)查询中返回不在第二个(右)查询输出中的不同行。
Syntax:
SELECT column_list
FROM A
WHERE condition_a
EXCEPT
SELECT column_list
FROM B
WHERE condition_b;
使用 EXCEPT运算符时必须遵守以下规则:
- 两个查询中的列数及其顺序必须相同。
- 各列的数据类型必须兼容。
下面的维恩图说明了 EXCEPT运算符的结果:
在本文中,我们将使用示例 DVD 租赁数据库,此处进行了说明,可以通过单击示例中的此链接进行下载。
示例 1:
在这里,我们将使用 EXCEPT运算符从示例数据库的“film”和“inventory”表的数据中查询不在库存中的电影,并根据电影名称使用 ORDER BY 子句对其进行排序。
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;
输出:
示例 2:
在这里,我们将使用 EXCEPT运算符从示例数据库的“电影”和“语言”表的数据中查询仅使用英语(即 language_id = 1)的电影,并使用 ORDER BY 子句基于片名。
SELECT
language_id,
title
FROM
film
WHERE
language_id = 1
EXCEPT
SELECT
DISTINCT language.language_id,
name
FROM
language
INNER JOIN film ON film.language_id = language.language_id
ORDER BY title;;
输出: