📜  PostgreSQL – EXCEPT 运算符

📅  最后修改于: 2022-05-13 01:57:15.102000             🧑  作者: Mango

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;;

输出: