UNION / UNION ALL / INTERSECT / EXCEPT (MINUS)
Oracle
-- Union without duplicates
SELECT city FROM customer
UNION
SELECT city FROM supplier;
-- Intersection and difference (MINUS instead of EXCEPT in Oracle)
SELECT city FROM customer INTERSECT SELECT city FROM supplier;
SELECT city FROM customer MINUS SELECT city FROM supplier;Операторы множеств объединяют наборы результатов двух запросов. UNION удаляет дубликаты (медленнее), UNION ALL сохраняет все (быстрее), INTERSECT возвращает общие строки, а оператор разности — строки, которые есть только в первом наборе. Для разности Oracle использует MINUS вместо стандартного EXCEPT (EXCEPT также есть начиная с 21c).
PostgreSQL
SELECT city FROM customer
UNION
SELECT city FROM supplier;
SELECT city FROM customer INTERSECT SELECT city FROM supplier;
SELECT city FROM customer EXCEPT SELECT city FROM supplier;PostgreSQL полностью поддерживает стандартные UNION, UNION ALL, INTERSECT и EXCEPT (для разности — EXCEPT, а не MINUS). Форма ALL каждого оператора (INTERSECT ALL, EXCEPT ALL) сохраняет количество дубликатов. Число и типы столбцов должны быть совместимы.
MySQL
SELECT city FROM customer
UNION
SELECT city FROM supplier;
-- INTERSECT/EXCEPT arrive with MySQL 8.0.31+ and MariaDB 10.3+
SELECT city FROM customer INTERSECT SELECT city FROM supplier;Долгое время MySQL поддерживал только UNION / UNION ALL; INTERSECT и EXCEPT добавлены лишь в MySQL 8.0.31 (MariaDB 10.3). В старых версиях используйте INNER JOIN/EXISTS для пересечения и LEFT JOIN ... IS NULL или NOT EXISTS для разности.
SQL Server
SELECT city FROM customer
UNION
SELECT city FROM supplier;
SELECT city FROM customer INTERSECT SELECT city FROM supplier;
SELECT city FROM customer EXCEPT SELECT city FROM supplier;SQL Server поддерживает стандартные UNION, UNION ALL, INTERSECT и EXCEPT (2005+); оператор разности — EXCEPT (не MINUS). INTERSECT/EXCEPT сравнивают строки, считая значения NULL равными.
MongoDB
// Closest equivalent: $unionWith (MongoDB 4.4+)
db.customer.aggregate([
{ $project: { city: 1, _id: 0 } },
{ $unionWith: { coll: "supplier",
pipeline: [ { $project: { city: 1, _id: 0 } } ] } },
{ $group: { _id: "$city" } } // UNION (distinct) effect
])Этап $unionWith в MongoDB 4.4+ объединяет результаты двух коллекций (как UNION ALL). Чтобы убрать дубликаты, затем выполните дедупликацию через $group. Прямых эквивалентов INTERSECT/EXCEPT нет; они моделируются через $lookup или операторы множеств ($setIntersection, $setDifference).
Redis
# Set operations with the Set data type:
SUNION city_customer city_supplier # union
SINTER city_customer city_supplier # intersection
SDIFF city_customer city_supplier # differenceВ Redis нет SQL, но тип данных Set предлагает нативные операции над множествами: SUNION (объединение), SINTER (пересечение), SDIFF (разность) и их варианты STORE, сохраняющие результат. Они работают с заранее построенными членами множеств, а не с результатами запросов.
Elasticsearch
# There is no direct set operator.
# For a union, search multiple indices in one query:
GET customer,supplier/_search
{ "query": { "match_all": {} } }Elasticsearch не предлагает UNION/INTERSECT/EXCEPT. Эффект объединения достигается запросом к нескольким индексам через запятую; для пересечения и разности используйте предложения must/should/must_not запроса bool или логику множеств на стороне приложения.