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;Os operadores de conjunto combinam os conjuntos de resultados de duas consultas. UNION remove duplicatas (mais lento), UNION ALL mantém todas (mais rápido), INTERSECT retorna as linhas em comum, e o operador de diferença retorna as linhas encontradas apenas no primeiro conjunto. Para a diferença, o Oracle usa MINUS em vez do EXCEPT padrão (EXCEPT também existe desde o 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;O PostgreSQL suporta totalmente UNION, UNION ALL, INTERSECT e EXCEPT padrão (EXCEPT, não MINUS, para a diferença). A forma ALL de cada operador (INTERSECT ALL, EXCEPT ALL) preserva a contagem de duplicatas. O número e os tipos das colunas devem ser compatíveis.
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;Por muito tempo o MySQL suportou apenas UNION / UNION ALL; INTERSECT e EXCEPT só foram adicionados no MySQL 8.0.31 (MariaDB 10.3). Em versões mais antigas, use INNER JOIN/EXISTS para interseção e LEFT JOIN ... IS NULL ou NOT EXISTS para diferença.
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;O SQL Server suporta UNION, UNION ALL, INTERSECT e EXCEPT padrão (2005+); o operador de diferença é EXCEPT (não MINUS). INTERSECT/EXCEPT comparam as linhas tratando valores NULL como iguais.
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
])O estágio $unionWith do MongoDB 4.4+ combina os resultados de duas coleções (como UNION ALL). Para remover duplicatas, deduplique depois com $group. INTERSECT/EXCEPT não têm equivalente direto; são modelados com $lookup ou operadores de conjunto ($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 # differenceO Redis não tem SQL, mas o tipo de dado Set oferece operações de conjunto nativas: SUNION (união), SINTER (interseção), SDIFF (diferença) e suas variantes STORE, que salvam o resultado. Elas operam sobre membros de conjuntos já montados, não sobre resultados de consultas.
Elasticsearch
# There is no direct set operator.
# For a union, search multiple indices in one query:
GET customer,supplier/_search
{ "query": { "match_all": {} } }O Elasticsearch não oferece UNION/INTERSECT/EXCEPT. Um efeito de união é obtido consultando vários índices separados por vírgula; para interseção e diferença, use as cláusulas must/should/must_not de uma bool query ou lógica de conjuntos no lado da aplicação.