Stell dir vor, du willst eine eindeutige Liste aller Länder sehen, in denen deine Kunden leben. Deine Tabelle enthält aber jeden Kunden einzeln – natürlich mit vielen doppelten Ländernamen. Wenn du jetzt einfach alle Länder ausliest, bekommst du eine lange Liste voller Wiederholungen. Das erschwert nicht nur die Übersicht, sondern kann auch die spätere Analyse verfälschen.
Hier kommt DISTINCT ins Spiel. Mit diesem Schlüsselwort kannst du genau diese doppelten Werte effizient entfernen und erhältst nur die einzigartigen Einträge. Egal, ob du eindeutige Länder, Produktkategorien oder Mitarbeitende ausgeben möchtest – DISTINCT ist das Werkzeug der Wahl, um deine Abfrage sauber und übersichtlich zu halten.
Nach diesem Artikel wirst du genau wissen:
- Wie du
DISTINCTrichtig einsetzt - Wann es sinnvoll ist,
DISTINCTzu verwenden - Welche Stolperfallen du vermeiden solltest
So bist du bestens gerüstet, um doppelte Daten gezielt zu filtern und deine SQL-Abfragen effizienter zu gestalten.
Grundlagen: Die Syntax von DISTINCT
Die Verwendung von DISTINCT in SQL ist denkbar einfach. Es wird direkt nach
SELECT eingefügt und sorgt dafür, dass nur eindeutige Werte aus deiner Abfrage
zurückgegeben werden. Die Grundsyntax sieht so aus:
SELECT DISTINCT spaltenname
FROM tabellenname;
Dabei gilt: DISTINCT bezieht sich immer auf die gesamte Auswahl der Spalten.
Das bedeutet, dass die Kombination aller ausgewählten Spalten einzigartig sein muss, damit
ein Datensatz in der Ergebnisliste erscheint.
Im nächsten Abschnitt schauen wir uns ein konkretes Beispiel an, um den Effekt von
DISTINCT auf eine einzelne Spalte zu sehen.
Einfaches Praxisbeispiel (Eine Spalte)
Betrachten wir eine Beispieltabelle bestellungen mit der Spalte land:
| id | kunde | land |
|----|------------|------------|
| 1 | Müller | Deutschland|
| 2 | Schmidt | Deutschland|
| 3 | Meier | Frankreich |
| 4 | Schulz | Deutschland|
| 5 | Dubois | Frankreich |
Eine einfache Abfrage ohne DISTINCT liefert alle Einträge, inklusive Duplikate:
SELECT land
FROM bestellungen;
| land |
|------------|
| Deutschland|
| Deutschland|
| Frankreich |
| Deutschland|
| Frankreich |
Mit DISTINCT werden die doppelten Länder entfernt:
SELECT DISTINCT land
FROM bestellungen;
| land |
|------------|
| Deutschland|
| Frankreich |
So siehst du sofort, dass nur die eindeutigen Länder ausgegeben werden.
DISTINCT ist also genau das Werkzeug, wenn du eine übersichtliche Liste
ohne Wiederholungen haben möchtest.
DISTINCT auf mehrere Spalten anwenden
Ein häufiger Stolperstein ist, dass DISTINCT nicht nur auf eine einzelne Spalte wirkt,
sondern auf die Kombination aller ausgewählten Spalten. Das bedeutet: Nur die Kombination der Werte
muss eindeutig sein.
Beispiel: Eine Tabelle mitarbeiter mit den Spalten vorname und nachname:
| vorname | nachname |
|---------|----------|
| Thomas | Müller |
| Thomas | Schmidt |
| Anna | Meier |
| Thomas | Müller |
Wenn du nur vorname auswählst, werden trotzdem Duplikate entfernt:
SELECT DISTINCT vorname
FROM mitarbeiter;
| vorname |
|---------|
| Thomas |
| Anna |
Wenn du hingegen beide Spalten auswählst, muss die Kombination aus Vor- und Nachname eindeutig sein:
SELECT DISTINCT vorname, nachname
FROM mitarbeiter;
| vorname | nachname |
|---------|----------|
| Thomas | Müller |
| Thomas | Schmidt |
| Anna | Meier |
Du siehst: Der Vorname „Thomas“ kommt mehrfach vor, aber jede Kombination aus Vor- und Nachname ist einzigartig.
Das ist der entscheidende Punkt bei DISTINCT auf mehreren Spalten.
Die häufigsten Fallstricke und Missverständnisse
DISTINCT ist nicht GROUP BY
Ein häufiger Fehler ist, DISTINCT mit GROUP BY zu verwechseln.
GROUP BY wird für Aggregationen wie COUNT oder SUM verwendet,
während DISTINCT ausschließlich dazu dient, doppelte Zeilen aus dem Ergebnis zu entfernen.
Performance-Killer
DISTINCT kann bei großen Tabellen schnell die Performance belasten, da es intern oft einen Sortiervorgang erzwingt.
Vermeide es also, DISTINCT gedankenlos als „Quick Fix“ einzusetzen, z.B. nach fehlerhaften JOINs.
Prüfe zuerst deine JOIN-Bedingungen, bevor du einfach DISTINCT darauf setzt.
DISTINCT und NULL-Werte
DISTINCT behandelt NULL wie jeden anderen Wert. Wenn mehrere NULL-Werte in der
Ergebnismenge vorkommen, bleibt nur einer davon erhalten.
DISTINCT in Kombination mit Aggregatfunktionen
DISTINCT wird besonders mächtig, wenn es zusammen mit Aggregatfunktionen eingesetzt wird.
Ein typisches Beispiel ist die Verwendung mit COUNT, um die Anzahl eindeutiger Werte zu ermitteln:
SELECT COUNT(DISTINCT land)
FROM kunden;
Diese Abfrage beantwortet die Frage: „Wie viele verschiedene Länder sind in der Tabelle hinterlegt?“
Das ist ein entscheidender Unterschied zu COUNT(land), das alle nicht-NULL-Einträge zählt,
oder COUNT(*), das einfach alle Zeilen zählt.
Mit COUNT(DISTINCT spalte) kannst du also schnell die Kardinalität einer Spalte prüfen,
ohne zusätzliche Abfragen oder Gruppierungen zu benötigen.
Wann man DISTINCT (nicht) verwenden sollte – Best Practices
Verwenden, wenn:
- Du wirklich eine eindeutige Liste von Werten benötigst, z. B. für ein Dropdown-Menü in einer Anwendung.
- Du in Kombination mit
COUNTeinzigartige Vorkommen zählen willst.
Vermeiden, wenn:
- Du es aus Gewohnheit benutzt, ohne zu prüfen, ob die Duplikate nicht von einem Fehler im Datenmodell oder in JOIN-Bedingungen stammen.
- Performance kritisch ist und die Tabelle sehr groß ist, da
DISTINCToft einen teuren Sortiervorgang ausführt.
Zusammengefasst: DISTINCT ist ein sehr nützliches Werkzeug, aber es sollte gezielt und bewusst eingesetzt werden. Prüfe immer zuerst, ob die Duplikate durch die Datenstruktur oder Abfragen verursacht werden, bevor du einfach DISTINCT einsetzt.
Fortgeschrittene Alternative: GROUP BY
Oft liefert auch GROUP BY ein ähnliches Ergebnis wie DISTINCT, besonders wenn du mehrere Spalten auswählst:
SELECT vorname, nachname
FROM mitarbeiter
GROUP BY vorname, nachname;
Der Unterschied liegt darin, dass GROUP BY besonders mächtig wird, wenn du Aggregatfunktionen kombinierst,
z. B. COUNT, SUM oder AVG. DISTINCT hingegen ist nur für das Entfernen
von Duplikaten gedacht und bietet keine Möglichkeit zur Aggregation.
Kurz gesagt: Wenn du nur eindeutige Kombinationen brauchst, reicht DISTINCT.
Wenn du gleichzeitig Werte aggregieren möchtest, ist GROUP BY der richtige Weg.
Zusammenfassung und Key Takeaways
Die wichtigsten Punkte zu DISTINCT auf einen Blick:
DISTINCTentfernt doppelte Zeilen aus dem Abfrageergebnis.- Es arbeitet mit der Kombination aller ausgewählten Spalten – nicht nur mit einzelnen Spalten.
- Vorsicht vor Performance-Problemen bei großen Datenmengen, insbesondere bei komplexen JOINs.
COUNT(DISTINCT spalte)ist ein praktisches Werkzeug, um die Anzahl eindeutiger Werte zu ermitteln.
Mit diesen Grundkenntnissen kannst du DISTINCT gezielt einsetzen und sowohl saubere als auch performante Abfragen schreiben.
Übungsaufgabe
Teste dein Wissen praktisch und wende DISTINCT an.
Betrachten wir eine Tabelle lieferanten mit den Spalten lieferant_id, stadt und land:
| lieferant_id | name | stadt | land |
|--------------|----------------|--------------|------------|
| 1 | Müller GmbH | Berlin | Deutschland|
| 2 | Schmidt KG | München | Deutschland|
| 3 | Dupont SA | Lyon | Frankreich |
| 4 | Müller GmbH | Berlin | Deutschland|
| 5 | Meier GmbH | Paris | Frankreich |
Aufgabe: Schreibe eine Abfrage, die die **eindeutigen Kombinationen von stadt und land** ausgibt.
Die Ausgabe sollte nur die unterschiedlichen Kombinationen enthalten, Duplikate müssen entfernt werden.
Lösung:
SELECT DISTINCT stadt, land
FROM lieferanten;
| stadt | land |
|--------|------------|
| Berlin | Deutschland|
| München| Deutschland|
| Lyon | Frankreich |
| Paris | Frankreich |
Erklärung: DISTINCT prüft die Kombination aus stadt und land.
Doppelte Zeilen wie „Berlin / Deutschland“ werden entfernt. So erhältst du eine saubere Liste der einzigartigen Städte-Länder-Kombinationen.
Bonus-Aufgabe: Zähle, wie viele unterschiedliche Städte in jedem Land vertreten sind.
Tipp: Du kannst COUNT(DISTINCT stadt) zusammen mit GROUP BY land verwenden.
Fazit
DISTINCT ist ein einfaches, aber sehr mächtiges Werkzeug in SQL, um doppelte Werte aus einer Ergebnismenge zu entfernen.
Mit wenigen Zeilen Code kannst du saubere, eindeutige Listen erzeugen und die Datenqualität verbessern.
Wichtig ist, dass du dir immer bewusst machst, welche Spalten du auswählst und dass DISTINCT die Kombination aller gewählten Spalten betrachtet. Außerdem solltest du die Performance im Blick behalten, insbesondere bei großen Tabellen oder komplexen Joins.
Nutze DISTINCT gezielt, um eindeutige Ergebnisse zu erhalten, z. B. für Listen, Auswertungen oder in Kombination mit Aggregatfunktionen wie COUNT. Für weitergehende Aggregationen oder komplexere Auswertungen kann GROUP BY die bessere Alternative sein.
Mit diesem Wissen bist du gut gerüstet, um DISTINCT effektiv und sicher in deinen SQL-Abfragen einzusetzen.
Von SQL zu Power BI/Tableau – so funktioniert der Datenfluss
In der modernen Datenanalyse spielen SQL und BI-Tools wie Power...
Artikel lesenIndexes verstehen: Warum manche Queries ewig dauern und andere nicht
Hattest du jemals eine SQL-Query, die mal in Millisekunden und...
Artikel lesenWas sind eigentlich Datenbanken und Tabellen?
Im Alltag sammeln sich überall Informationen an: Kundendaten im Onlineshop,...
Artikel lesenWarum deine SQL-Abfrage keine Ergebnisse liefert – 5 häufige Ursachen
Du hast deine SQL-Abfrage geschrieben, sie läuft ohne Fehlermeldung durch...
Artikel lesen