Выражение INTERSECT
Выражение INTERSECT возвращает все строки, содержащиеся в результатах и первого, и второго запроса. Другими словами, это выражение вычисляет пересечение результатов двух запросов.
Чтобы можно было вычислить пересечение для двух запросов, эти запросы должны быть совместимыми. Это означает, что они должны иметь одинаковое число столбцов и соответствующие столбцы должны быть совместимых типов.
Примеры
-
Выведем список стран, которые встречаются в столбце
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 | +---------+