Выражение INTERSECT

Выражение INTERSECT возвращает все строки, содержащиеся в результатах и первого, и второго запроса. Другими словами, это выражение вычисляет пересечение результатов двух запросов.

Чтобы можно было вычислить пересечение для двух запросов, эти запросы должны быть совместимыми. Это означает, что они должны иметь одинаковое число колонок и соответствующие колонки должны быть совместимых типов.

Синтаксис

SELECT ...
INTERSECT
SELECT ...

Примеры

  • Выведем список стран, которые встречаются в колонке country и в таблице столиц и в таблице количества населения:

    CREATE TABLE capitals (country VARCHAR, capital VARCHAR);
    CREATE TABLE population (country VARCHAR, population_mil BIGINT);
    
    INSERT INTO capitals VALUES
        ('Russia', 'Moscow'),
        ('Italy', 'Rome'),
        ('Spain', 'Madrid'),
        ('France', 'Paris');
    INSERT INTO population VALUES
        ('Russia', 143),
        ('Spain', 48),
        ('Brazil', 211);
    
    SELECT country FROM capitals
    INTERSECT
    SELECT country FROM population;
    +---------+
    | country |
    +---------+
    | Russia  |
    +---------+
    | Spain   |
    +---------+
  • Используем функции unnest и generate_series и вычислим пересечение двух запросов — для чисел от 1 до 10 и для чисел от 10 до 20:

    SELECT unnest(generate_series(1, 10)) as numbers
    INTERSECT
    SELECT unnest(generate_series(10, 20)) as numbers;
    +---------+
    | numbers |
    +---------+
    | 10      |
    +---------+