DBAtlas · Atlas für Datenbankbetrieb

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;

Mengenoperatoren kombinieren die Ergebnismengen zweier Abfragen. UNION entfernt Duplikate (langsamer), UNION ALL behält alle (schneller), INTERSECT liefert gemeinsame Zeilen, und der Differenzoperator liefert Zeilen, die nur in der ersten Menge vorkommen. Für die Differenz nutzt Oracle MINUS statt des Standard-EXCEPT (EXCEPT gibt es seit 21c ebenfalls).

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 unterstützt Standard-UNION, UNION ALL, INTERSECT und EXCEPT vollständig (EXCEPT, nicht MINUS, für die Differenz). Die ALL-Form jedes Operators (INTERSECT ALL, EXCEPT ALL) bewahrt die Anzahl der Duplikate. Spaltenanzahl und -typen müssen kompatibel sein.

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;

Lange unterstützte MySQL nur UNION / UNION ALL; INTERSECT und EXCEPT kamen erst mit MySQL 8.0.31 (MariaDB 10.3). In älteren Versionen nutze INNER JOIN/EXISTS für die Schnittmenge und LEFT JOIN ... IS NULL oder NOT EXISTS für die Differenz.

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 unterstützt Standard-UNION, UNION ALL, INTERSECT und EXCEPT (2005+); der Differenzoperator ist EXCEPT (nicht MINUS). INTERSECT/EXCEPT vergleichen Zeilen und behandeln NULL-Werte dabei als gleich.

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
])

Die Stage $unionWith in MongoDB 4.4+ kombiniert die Ergebnisse zweier Collections (wie UNION ALL). Um Duplikate zu entfernen, dedupliziere anschließend mit $group. INTERSECT/EXCEPT haben keine direkte Entsprechung; sie werden mit $lookup oder Mengenoperatoren ($setIntersection, $setDifference) modelliert.

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 hat kein SQL, aber der Datentyp Set bietet native Mengenoperationen: SUNION (Vereinigung), SINTER (Schnittmenge), SDIFF (Differenz) und deren STORE-Varianten, die das Ergebnis speichern. Sie arbeiten auf vorab aufgebauten Set-Mitgliedern, nicht auf Abfrageergebnissen.

Elasticsearch

# There is no direct set operator.
# For a union, search multiple indices in one query:
GET customer,supplier/_search
{ "query": { "match_all": {} } }

Elasticsearch bietet kein UNION/INTERSECT/EXCEPT. Eine Vereinigung erreichst du, indem du mehrere kommagetrennte Indizes abfragst; für Schnittmenge und Differenz nutze die Klauseln must/should/must_not einer bool-Abfrage oder Mengenlogik in der Anwendung.

In DBAtlas öffnen →