Weiter zum Inhalt

Mengenoperatoren in SQL: Der umfassende Guide

Meistere SQL-Mengenoperatoren: UNION, UNION ALL, INTERSECT und EXCEPT. Lerne die Syntaxregeln, sieh dir Praxisbeispiele an und erfahre, wann welcher Operator passt.
Aktualisiert 2. Juni 2026  · 11 Min. lesen

Mengenoperationen sind ein Grundpfeiler von SQL und ermöglichen es, Daten aus mehreren Quellen zu kombinieren, zu vergleichen und zu filtern. Sie sind unverzichtbar – von der Datenintegration und -bereinigung bis hin zu Advanced Analytics und Reporting.

In diesem Tutorial schauen wir uns an, was Mengenoperatoren sind, wie sie in SQL eingesetzt werden, wofür sie praktisch sind und mehr. Wenn du eine komplette SQL-Lernressource suchst, wirf einen Blick auf den sieben Kurs umfassenden SQL Fundamentals-Lernpfad.

Für alle, die es eilig haben, starten wir mit einer kurzen Antwort darauf, was Mengenoperationen in SQL sind.

Erhalte eine Top-SQL-Zertifizierung

Stelle deine SQL-Kenntnisse unter Beweis und bringe deine Datenkarriere voran.
Werde SQL-zertifiziert

Was sind Mengenoperationen in SQL?

Mengenoperationen in SQL sind Techniken, um die Ergebnisse von zwei oder mehr SELECT-Anweisungen zu kombinieren oder zu vergleichen. Sie verhalten sich wie mathematische Mengenoperationen und ermöglichen es uns, die Vereinigung, den Schnitt oder die Differenz zwischen den von unseren Abfragen zurückgegebenen Zeilen zu finden. Das macht sie unverzichtbar, wenn wir Daten aus mehreren Quellen oder Blickwinkeln analysieren.

Hier ein schneller Überblick über die zentralen Mengenoperatoren:

  • UNION: Führt alle eindeutigen Zeilen aus zwei oder mehr SELECT-Anweisungen zusammen und entfernt Duplikate.

  • UNION ALL: Führt alle Zeilen aus zwei oder mehr SELECT-Anweisungen zusammen und behält Duplikate bei.

  • INTERSECT: Gibt nur die Zeilen zurück, die in beiden SELECT-Anweisungen vorkommen.

  • EXCEPT: Gibt die Zeilen aus der ersten SELECT-Anweisung zurück, die in der zweiten nicht vorkommen.

Vergleich mit Operationen der relationalen Algebra

Die relationale Algebra ist ein theoretischer Rahmen, der das Verständnis von Datenbankabfragen erleichtert. Sie bietet abstrakte Operationen wie Projektion, Selektion und Join, die auf mathematischen Prinzipien beruhen und unabhängig von konkreten Datenbanksystemen sind. Du kannst sie dir als die Logik „unter der Haube“ vorstellen, die unsere Datenbankinteraktionen antreibt.

Mengenoperatoren in SQL sind eine praktische Umsetzung dieser Konzepte in einer Datenbankumgebung. Sie ermöglichen es, Mengenoperationen wie Vereinigung, Schnitt und Differenz direkt auf die Ergebnismengen von SQL-Abfragen anzuwenden.

Während die relationale Algebra die formale Basis für Datenbankoperationen liefert, bieten Mengenoperatoren in SQL eine standardisierte, benutzerfreundliche Schnittstelle für Datenmanipulationsaufgaben.

Wer den Zusammenhang zwischen Mengenoperatoren und relationaler Algebra versteht, gewinnt Einblick in die theoretischen Grundlagen von SQL – und schreibt Abfragen mit einem klareren mentalen Modell dessen, was im Hintergrund passiert.

Arten von Mengenoperatoren in SQL

Es gibt drei primäre Mengenoperatoren in SQL:

  • UNION

  • INTERSECT

  • EXCEPT (in einigen Dialekten MINUS)

Diese Operatoren entsprechen mathematisch den Konzepten Vereinigung, Schnitt und Mengendifferenz.

Regeln für die Verwendung von Mengenoperatoren

Bevor du Abfragen mit Mengenoperatoren kombinierst, müssen vier Voraussetzungen erfüllt sein. Wenn eine davon nicht passt, führt die Abfrage zu einem Fehler.

  • Gleiche Spaltenanzahl: Jede SELECT-Anweisung muss die gleiche Anzahl an Spalten zurückgeben. Liefert eine Abfrage drei und eine andere zwei Spalten, wirft die Datenbank einen Fehler.

  • Kompatible Datentypen: Entsprechende Spalten müssen passende Typen haben. Du kannst in derselben Position keine VARCHAR-Namensspalte mit einer INTEGER-ID kombinieren.

  • Gleiche Spaltenreihenfolge: SQL ordnet Spalten nach Position, nicht nach Name zu. Die erste Spalte der ersten Abfrage wird der ersten Spalte der zweiten Abfrage zugeordnet – unabhängig von den Spaltennamen.

  • ORDER BY nur am Ende: ORDER BY darf nur einmal ganz am Ende der kombinierten Abfrage stehen. Innerhalb einzelner SELECT-Anweisungen ist es nicht erlaubt.

Noch ein Detail: Die Spaltennamen in der Ausgabe stammen aus der ersten SELECT-Anweisung. Aliasse in späteren Abfragen werden ignoriert. Wenn du eigene Ausgabebezeichnungen brauchst, setze Aliasse nur in der ersten Abfrage.

So verwendest du den Operator UNION in SQL

Der Operator UNION kombiniert die Ergebnisse von zwei oder mehr SELECT-Abfragen zu einer Ergebnismenge und entfernt dabei standardmäßig doppelte Zeilen.

Angenommen, wir haben zwei Tabellen, employees und contractors, jeweils mit ähnlichen Spalten wie name, department und salary. Für Lernzwecke betrachten wir diese beiden Beispieltables:

employees:

name

department

salary

Alice

Marketing

65000

Bob

Sales

70000

Carol

Engineering

80000

John

HR

55000

contractors:

name

department

salary

David

Marketing

60000

Eva

Sales

68000

Carol

Engineering

75000

Wir können die Ergebnisse beider Tabellen mit folgendem Befehl kombinieren:

-- Using UNION to combine all employees and contractors
SELECT name, department, salary FROM employees
UNION
SELECT name, department, salary FROM contractors;

Diese Abfrage wählt die Spalten name, department und salary sowohl aus der Tabelle employees als auch aus contractors und führt sie zu einer einzigen Ergebnismenge zusammen. Der Operator UNION entfernt dabei automatisch doppelte Zeilen aus dem finalen Ergebnis.

name

department

salary

Alice

Marketing

65000

Bob

Sales

70000

Carol

Engineering

80000

John

HR

55000

David

Marketing

60000

Eva

Sales

68000

Beachte: Carol, die in beiden Tabellen vorkommt, wird im Ergebnis nur einmal aufgeführt. Wenn wir beide Carol-Einträge (mit unterschiedlichen Gehältern) behalten möchten, würden wir UNION ALL verwenden.

UNION vs. UNION ALL

Der Operator UNION entfernt keine NULL-Werte per se. Wenn eine Spalte in einem Resultset NULL-Werte enthält und die entsprechende Spalte im anderen Resultset Nicht-NULL-Werte, bleiben die NULL-Werte im finalen Ergebnis erhalten.

Wenn wir sicherstellen wollen, dass wirklich alle Zeilen inklusive NULL-Werten erhalten bleiben, verwenden wir UNION ALL. Dieser Operator kombiniert die Ergebnisse mehrerer SELECT-Abfragen und behält alle Zeilen – auch Duplikate und NULL-Werte.

So verwendest du den Operator INTERSECT in SQL

Der Operator INTERSECT gibt nur die Zeilen zurück, die in beiden Ergebnismengen vorkommen. Denk an Personen, die zu beiden Gruppen gehören.

Nutzen wir INTERSECT für unsere Tabellen oben. Der Einfachheit halber betrachten wir nur die Spalten name und department:

-- Using INTERSECT to find common employees
SELECT name, department FROM employees
INTERSECT
SELECT name, department FROM contractors;

Diese Abfrage wählt die Spalten name und department aus beiden Tabellen und gibt nur die Zeilen zurück, die auf Basis aller ausgewählten Spalten in beiden Tabellen existieren.

name

department

Carol

Engineering

Der Operator INTERSECT behandelt NULL-Werte gemäß den Standardvergleichsregeln und betrachtet entsprechende NULL-Werte als gleich. Bei leeren Ergebnismengen liefert er als Ergebnis ebenfalls eine leere Menge.

Anders gesagt: Wenn in einem Resultset ein NULL steht und in der entsprechenden Spalte des anderen Resultsets ein Nicht-NULL-Wert, gelten die Zeilen nicht als gleich – sie werden nicht in den Schnitt aufgenommen.

Zusätzlich gilt: Ist eines der an INTERSECT übergebenen Resultsets leer, ist auch das Gesamtergebnis leer. Eine leere Menge hat mit nichts eine Überschneidung.

So verwendest du den Operator EXCEPT in SQL

Der Operator EXCEPT gibt die Zeilen aus der ersten Ergebnismenge zurück, die in der zweiten nicht vorkommen.

In Oracle Database wird EXCEPT als MINUS geschrieben; alle anderen großen Dialekte (PostgreSQL, SQL Server, MySQL 8.0.31+, SQLite) verwenden EXCEPT.

Angenommen, wir führen folgende Abfrage aus:

-- Using EXCEPT to find employees who are not contractors
SELECT name, department, salary FROM employees
EXCEPT
SELECT name, department, salary FROM contractors;

Die Spalten name, department und salary werden aus der Tabelle employees ausgewählt und es werden nur die Zeilen zurückgegeben, die nicht in der Tabelle contractors existieren.

name

department

salary

Alice

Marketing

65000

Bob

Sales

70000

John

HR

55000

Der Operator EXCEPT folgt ebenfalls den Standardregeln zum Umgang mit NULL-Werten. Bei leeren Ergebnismengen gilt: Ist das erste Resultset leer, ist das Ergebnis leer; ist das zweite leer, werden alle Zeilen aus dem ersten Resultset zurückgegeben.

SQL-Mengenoperatoren: Performance und Optimierung

Der Einfluss von Mengenoperatoren auf die Abfrageperformance in SQL hängt von Faktoren wie der Größe der beteiligten Datensätze, der Komplexität der Abfragen und dem verwendeten Datenbankmanagementsystem (DBMS) ab.

Schauen wir uns die Schlüsselfaktoren und Optimierungsstrategien an.

Datenvolumen und Abfragekomplexität

Bei großen Datenmengen können Mengenoperatoren die Performance deutlich beeinflussen, weil die Größe der zu kombinierenden, zu schneidenden oder zu vergleichenden Ergebnismengen den Verarbeitungsaufwand erhöht.

Komplexe Abfragen mit mehreren Unterabfragen, Joins oder Mengenoperatoren verursachen zusätzlichen Overhead und können die Performance verschlechtern. Verkettete oder geschachtelte Mengenoperationen verschärfen das Problem weiter.

Indexierung und Optimierungstechniken

Eine geeignete Indexierung der an Mengenoperationen beteiligten Spalten kann die Abfrageperformance stark verbessern. Indexe helfen der Datenbank-Engine, relevante Zeilen schnell zu finden, Volltabellenscans zu vermeiden und Ausführungszeiten zu senken.

Zur Performanceverbesserung können Admins und Entwickler Techniken wie Query-Rewriting, Analyse von Ausführungsplänen und Schemaoptimierung einsetzen. Auch Query-Caching und materialisierte Sichten können helfen, Ergebnisse komplexer Abfragen vorab zu berechnen und zu speichern, um den Rechenaufwand bei Mengenoperationen zu reduzieren.

Datenbank-Engine und Hardware-Ressourcen

Die Performance von Mengenoperationen variiert je nach Datenbank-Engine und deren Optimierungsfähigkeiten. Verschiedene DBMS nutzen unterschiedliche Strategien und Algorithmen, was zu abweichender Leistung führen kann.

Auch verfügbare Hardware-Ressourcen wie CPU, Arbeitsspeicher und Disk-I/O beeinflussen die Performance bei Mengenoperatoren. Ausreichende Ressourcen helfen, Engpässe zu vermeiden und eine effiziente Ausführung sicherzustellen.

SQL-Mengenoperatoren in der Praxis

Mengenoperatoren sind nicht nur Theorie; sie haben handfeste Anwendungsfälle, die Geschäftsentscheidungen spürbar beeinflussen können. Gehen wir ein vereinfachtes Beispiel durch, wie ein Unternehmen Mengenoperatoren zur Kundensegmentierung für zielgerichtete Marketingkampagnen nutzt.

Das Szenario

Ein Unternehmen verkauft online und in stationären Läden. Es gibt zwei getrennte Datensätze:

  1. Onlinekäufe: Kunden-ID, Kaufhistorie, Demografie und Standort der Online-Kundschaft.
  2. Filialtransaktionen: Ähnliche Informationen für Kundinnen und Kunden, die vor Ort einkaufen.

Einsatz der Mengenoperatoren

Für einen vollständigen Überblick über alle Kundinnen und Kunden nutzt das Unternehmen zunächst UNION, um beide Datensätze zu einer Tabelle zu vereinen und Duplikate zu entfernen. So entsteht eine einheitliche Sicht auf die gesamte Kundenbasis.

Anschließend kann INTERSECT verwendet werden, um Personen zu identifizieren, die sowohl online als auch im Laden eingekauft haben – eine besonders wertvolle, kanalübergreifend engagierte Gruppe.

Um Cross-Channel-Potenziale zu heben, kommt EXCEPT ins Spiel. Zum Beispiel findet SELECT * FROM online_purchases EXCEPT SELECT * FROM in_store_transactions jene Kundinnen und Kunden, die nur online, aber nicht im Laden gekauft haben. Diese Gruppe kann gezielt mit Aktionen angesprochen werden, die zum Besuch einer Filiale motivieren.

Mehr als nur Segmentierung

Auf Basis dieser Segmente lässt sich weiter verfeinern – etwa nach Demografie oder Kaufhistorie. Dieses granulare Verständnis ermöglicht präzisere, wirkungsvollere Kampagnen.

Mengenoperatoren vs. JOINs

Sowohl Mengenoperatoren als auch SQL JOINs kombinieren Daten aus mehreren Abfragen, funktionieren aber unterschiedlich. Die Kernfrage ist, ob du Zeilen oder Spalten kombinieren willst.

Merkmal Mengenoperatoren JOINs
Kombiniert Zeilen (stapelt Abfragen vertikal) Spalten (erweitert Zeilen horizontal)
Voraussetzung Gleiche Spaltenanzahl und kompatible Datentypen Gemeinsame Schlüsselspalte zwischen Tabellen
Einsatz, wenn Ähnliche Datensätze zusammengeführt oder Überschneidungen/Differenzen zwischen Ergebnismengen gefunden werden sollen Eine Zeile mit verwandten Daten aus einer anderen Tabelle angereichert werden soll
Umgang mit Duplikaten UNION entfernt Duplikate; UNION ALL behält sie Hängt vom Join-Typ und den Daten ab
Arten UNION, UNION ALL, INTERSECT, EXCEPT/MINUS INNER, LEFT, RIGHT, FULL OUTER, CROSS

Einschränkungen und Besonderheiten von Mengenoperatoren

Bei der Verwendung von Mengenoperatoren in SQL solltest du einige Limitierungen und Faktoren beachten, die Performance, Ergebnisgenauigkeit und Handhabung beeinflussen.

Datentypkompatibilität und NULL-Werte

Entsprechende Spalten in den Ergebnismengen müssen kompatible Datentypen haben. Prüfe vor dem Kombinieren, ob die Datentypen passen – Typkonflikte führen leicht zu übersehbaren Fehlern.

Mengenoperatoren können NULL-Werte je nach DBMS und Operator unterschiedlich behandeln. Um Fehler zu vermeiden, solltest du wissen, wie NULL in deinem System interpretiert wird.

Performance-Auswirkungen und doppelte Zeilen

Mengenoperationen können die Performance deutlich beeinflussen, besonders bei großen oder komplexen Datensätzen. Faktoren wie Indizes, Query-Optimierung und Hardware-Ressourcen spielen eine Rolle. Geeignete Optimierungstechniken und Tuning-Strategien sind entscheidend, um Engpässe zu vermeiden.

Standardmäßig entfernen Mengenoperatoren doppelte Zeilen aus dem Ergebnis. Manchmal müssen Duplikate jedoch erhalten bleiben. Verstehe das Verhalten der Operatoren bezüglich Duplikaten und setze bei Bedarf passende Techniken ein.

Sortierung der Ergebnisse und Speicherbeschränkungen

Mengenoperatoren garantieren keine Sortierung der finalen Ausgabe. Um das kombinierte Ergebnis zu sortieren, füge eine ORDER BY-Klausel ganz am Ende der gesamten Abfrage – nach der letzten SELECT-Anweisung – hinzu.

Mengenoperationen können viel Speicher und Ressourcen verbrauchen, insbesondere bei großen Datensätzen. Berücksichtige Speicher- und Ressourcengrenzen, um Performanceeinbußen oder Instabilitäten zu vermeiden.

Komplexität, Wartbarkeit und DBMS-Übergreifendes

Komplexe Abfragen mit mehreren Mengenoperatoren, Unterabfragen und Joins sind schwerer zu verstehen, zu warten und zu debuggen. Für Lesbarkeit und Wartbarkeit sollten Abfragen prägnant, gut dokumentiert und modular sein.

Mengenoperatoren können sich in Syntax und Verhalten je nach Datenbankmanagementsystem unterscheiden. Diese Unterschiede zu kennen ist wichtig, wenn du SQL für mehrere Plattformen schreibst.

Fazit

Mengenoperatoren lösen ein klares Problem: Ergebnismengen kombinieren oder vergleichen, ohne vorher zu wissen, welche Zeilen sich überschneiden.

Dazu gehören UNION, INTERSECT und EXCEPT – die drei Operatoren zum Vereinen, Vergleichen und Subtrahieren von Ergebnismengen.

Wenn du tiefer einsteigen willst, schau dir diesen Kurs zu Joining Data in SQL an.

SQL-Operatoren: FAQs

Was ist der Unterschied zwischen UNION ALL und UNION?

UNION ALL nimmt alle Zeilen beider Abfragen auf – auch Duplikate. UNION entfernt doppelte Zeilen.

Worin unterscheidet sich UNION von JOIN in SQL?

UNION kombiniert Abfrageergebnisse vertikal, indem es Zeilen aneinanderhängt. JOIN kombiniert Tabellen horizontal, indem Zeilen über eine verwandte Spalte abgeglichen werden und ein breiteres Resultset entsteht.

Gibt es Performance-Aspekte bei der Verwendung von Mengenoperationen?

Mengenoperationen können rechnerisch aufwendig sein, besonders bei großen Datensätzen. Optimiere die einzelnen Abfragen und setze, wo möglich, Indizes ein, um die Performance zu verbessern.

Was ist der Unterschied zwischen EXCEPT und NOT IN?

EXCEPT und NOT IN können ähnliche Ergebnisse liefern, verhalten sich aber bei NULL-Werten unterschiedlich. EXCEPT betrachtet entsprechende NULL-Werte als gleich; zwei NULL in derselben Spaltenposition führen dazu, dass eine Zeile ausgeschlossen wird. NOT IN hingegen liefert gar keine Zeilen, wenn die Unterabfrage irgendeinen NULL enthält, da Vergleiche mit NULL in SQL undefiniert sind. Für große Datensätze ist EXCEPT zudem oft lesbarer als eine korrelierte NOT IN-Unterabfrage.

Kann ich ORDER BY mit Mengenoperatoren verwenden?

Ja, aber nur einmal ganz am Ende der gesamten Abfrage. Innerhalb einzelner SELECT-Anweisungen einer Mengenoperation darfst du kein ORDER BY verwenden. Um das kombinierte Ergebnis zu sortieren, füge eine einzige ORDER BY-Klausel nach der letzten SELECT-Anweisung hinzu.

Beispiel:

SELECT name FROM employees
UNION
SELECT name FROM contractors
ORDER BY name ASC;

Unterstützt MySQL INTERSECT und EXCEPT?

MySQL hat Unterstützung für INTERSECT und EXCEPT in Version 8.0.31 hinzugefügt. Wenn du eine ältere Version nutzt, musst du sie emulieren: Verwende ein INNER JOIN oder eine Unterabfrage mit IN für INTERSECT und ein LEFT JOIN ... WHERE IS NULL oder eine NOT IN-Unterabfrage für EXCEPT. Oracle verwendet MINUS statt EXCEPT.


Kurtis Pykes 's photo
Author
Kurtis Pykes
LinkedIn
Themen

Erfahre mehr über SQL!

Lernpfad

Associate Data Engineer in SQL

30 Std.
Lerne die Grundlagen des Data Engineering: Datenbankdesign und Data Warehousing, die Arbeit mit Technologien wie PostgreSQL und Snowflake!
Details anzeigenRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Tutorial

Python Datenstrukturen Tutorial

Mach dich mit Python-Datenstrukturen vertraut: Lerne mehr über Datentypen und primitive sowie nicht-primitive Datenstrukturen wie Strings, Listen, Stapel usw.
Sejal Jaiswal's photo

Sejal Jaiswal

Tutorial

Python-Anweisungen IF, ELIF und ELSE

In diesem Tutorial lernst du ausschließlich Python if else-Anweisungen kennen.
Sejal Jaiswal's photo

Sejal Jaiswal

Tutorial

Python Switch Case Statement: Ein Leitfaden für Anfänger

Erforsche Pythons match-case: eine Anleitung zu seiner Syntax, Anwendungen in Data Science und ML sowie eine vergleichende Analyse mit dem traditionellen switch-case.
Matt Crabtree's photo

Matt Crabtree

Tutorial

Python-Schleifen-Tutorial

Ein umfassendes Einführungs-Tutorial zu Python-Schleifen. Lerne und übe while- und for-Schleifen, verschachtelte Schleifen, die Schlüsselwörter break und continue, die Range-Funktion und vieles mehr!
Satyabrata Pal's photo

Satyabrata Pal

Tutorial

Python-Lambda-Funktionen: Ein Leitfaden für Anfänger

Lerne mehr über Python-Lambda-Funktionen, wozu sie gut sind und wann man sie benutzt. Enthält praktische Beispiele und bewährte Methoden für eine effektive Umsetzung.
Mark Pedigo's photo

Mark Pedigo

Tutorial

30 coole Python-Tricks für besser lesbaren Code – mit Beispielen

Wir haben 30 coole Python-Tricks zusammengestellt, mit denen du deinen Code verbesserst und deine Python-Kompetenzen ausbaust.
Kurtis Pykes 's photo

Kurtis Pykes

Mehr anzeigenMehr anzeigen