Выражение 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      |
    +---------+