Zurück zur Artikelliste Artikel
7 Leseminuten

Welche Rolle spielt DISTINCT in SQL?

Das Schlüsselwort DISTINCT in SQL spielt eine wichtige Rolle beim Entfernen von doppelten Werten aus Ihren Ergebnissen. In diesem Artikel finden Sie Beispiele, die genau zeigen, wie DISTINCT funktioniert.

Standardmäßig werden bei SQL-Abfragen alle zurückgegebenen Zeilen, einschließlich doppelter Zeilen, in der Ergebnismenge angezeigt. Das Schlüsselwort DISTINCT in der Klausel SELECT wird verwendet, um doppelte Zeilen zu eliminieren und eine eindeutige Liste von Werten anzuzeigen. Mit anderen Worten, das Schlüsselwort DISTINCT ruft eindeutige Werte aus einer Tabelle ab.

Die grundlegende Syntax des Schlüsselworts DISTINCT in SQL lautet:

SELECT DISTINCT
  column_1,
  column_2,
  …,
  column_n
FROM table_name

(Wenn Sie die obige Syntax verwirrend finden, sollten Sie den Kurs LearnSQL.de' SQL für Anfänger besuchen. Er behandelt die Grundlagen von SQL, einschließlich des Schlüsselworts DISTINCT.)

Beachten Sie, dass das Schlüsselwort DISTINCT vor den von Ihnen angegebenen Spalten stehen muss. Sie können mehr als eine Spalte als DISTINCT angeben, so dass SQL nur eindeutige Kombinationen der Werte dieser Spalten zurückgibt. Wenn Sie mehr als eine Spalte auswählen, werden alle Spalten kombiniert und nur die Eindeutigkeit der Zeile wird berücksichtigt. SQL DISTINCT sucht nach einer eindeutigen Zeile, nicht nach einer eindeutigen Spalte.

Lassen Sie uns das Schlüsselwort DISTINCT anhand eines praktischen Beispiels in Aktion sehen. Zunächst sollten wir uns jedoch mit den Daten vertraut machen, mit denen wir arbeiten werden. Stellen Sie sich vor, wir haben eine Tabelle namens employee_infodie Details über die Mitarbeiter unseres Unternehmens enthält:

employee_idfirst_namelast_namedepartmentage
127374JoshuaReesSales26
293421KarenBowerSales45
244813LukePayneNULL42
463281MaxPaigeHuman Resources53
374241JuliaGloverHuman Resources29
568421RoseHarrisHuman Resources43
NULLNULLNULLNULLNULL
839211OliviaBakerSales32
293493KarenBowerSales45
463281MaxPaigeHuman Resources53
244813LukePayneNULL42
933821BernadetteParsonsSalesNULL

SQL DISTINCT für eine einzelne Spalte

Schauen wir uns die Wirkung des Schlüsselworts DISTINCT an, wenn wir versuchen, die Spalte SELECT employee_id zu verwenden. Zunächst sehen wir die Abfrage vor der Anwendung des Schlüsselworts DISTINCT:

SELECT employee_id
FROM employee_info

Das Ergebnis ist das folgende:

employee_id
127374
293421
244813
463281
374241
568421
NULL
839211
293493
463281
244813
933821

Die Ausführung dieser Abfrage gibt die gesamte Spalte employee_id aus unserer Tabelle zurück. Diese Spalte stimmt mit der employee_info Tabelle genau. Bei genauerer Analyse können wir einige doppelte Werte erkennen - 244813 und 463281 erscheinen jeweils zweimal.

Fügen wir das Schlüsselwort DISTINCT hinzu, um diese doppelten Werte zu beseitigen. Denken Sie daran, dass wir das Schlüsselwort DISTINCT hinzufügen, bevor wir die Spalten angeben:

SELECT DISTINCT employee_id 
FROM employee_info
employee_id
127374
293421
244813
463281
374241
568421
NULL
839211
293493
933821

Unser resultierender Datensatz erscheint kürzer; aus dieser Antwort können wir mehrere Dinge lernen.

SQL DISTINCT entfernt doppelte Werte

Wenn wir die ursprüngliche Tabelle mit unserem Ergebnis vergleichen, können wir sehen, dass die Duplikate erfolgreich herausgefiltert wurden. Die Verwendung des Schlüsselworts DISTINCT ist nur eine Methode zum Entfernen doppelter Werte, wie dieser Artikel über die verschiedenen Möglichkeiten zum Entfernen von Duplikaten in SQL zeigt.

Die Tabelle employee_info Tabelle enthielt zwei Vorkommen der folgenden Werte:

employee_id
244813
463281

Unser Ergebnis zeigt diese Werte jedoch nur noch einmal an. Das Schlüsselwort DISTINCT hat den gewünschten Effekt erzielt.

Achten Sie auf die verwendeten Spalten

Wenn Sie die Tabelle zum ersten Mal betrachten employee_info Tabelle sieht es so aus, als ob es sich bei diesen Zeilen um Duplikate handelt.

employee_idfirst_namelast_namedepartmentage
293421KarenBowerSales45
293493KarenBowerSales45

Bei näherer Betrachtung können Sie sehen, dass der Wert von employee_id anders ist. Da wir das Schlüsselwort DISTINCT auf diese Spalte employee_id angewendet haben, werden beide Werte zurückgegeben.

Die Einbeziehung von NULL-Werten

Wahrscheinlich ist Ihnen das Vorhandensein von NULL -Werten in dem zurückgegebenen Datensatz aufgefallen. In SQL wird NULL als eindeutiger Wert betrachtet, d. h. er wird zurückgegeben, wenn das Schlüsselwort DISTINCT verwendet wird. Wenn Sie die Werte von NULL aus dem Ergebnis entfernen möchten, könnten Sie die folgende Abfrage schreiben:

SELECT DISTINCT
  * 
FROM employee_info 
WHERE employee_id IS NOT NULL

SQL DISTINCT mit einer Unterabfrage

Sie können das Schlüsselwort DISTINCT auch als Teil einer Unterabfrage verwenden. Es ist jedoch erwähnenswert, dass eine IN, ANY oder EXISTS Unterabfrage als wahr ausgewertet wird, wenn es mindestens eine Zeile gibt, die die Unterabfrage als wahr auswertet. Dies macht die Verwendung einer DISTINCT mit einer IN, ANY oder EXISTS Unterabfrage unnötig.

SQL DISTINCT mit mehreren Spalten

Die Spalten, die Sie als DISTINCT angeben, spielen eine wichtige Rolle dabei, welche Daten zurückgegeben werden. Sehen Sie sich die folgende Abfrage an:

SELECT DISTINCT
  employee_id,
  first_name,
  last_name 
FROM employee_info

Wir suchen nach eindeutigen Kombinationen dieser drei Spalten. Die Ausführung dieser Abfrage führt zu folgendem Ergebnis:

employee_idfirst_namelast_name
127374JoshuaRees
293421KarenBower
244813LukePayne
463281MaxPaige
374241JuliaGlover
568421RoseHarris
NULLNULLNULL
839211OliviaBaker
293493KarenBower
933821BernadetteParsons

Wenn Sie diese Ergebnismenge durchsuchen, erwarten Sie vielleicht, dass Sie völlig eindeutige Namen zusammen mit deren employee_id sehen. Sehen Sie sich zum Beispiel diese Daten an:

employee_idfirst_namelast_name
293421KarenBower
293493KarenBower

Der Wert employee_id ist für beide Zeilen eindeutig, was bedeutet, dass diese Zeilen auch als eindeutig betrachtet werden. Wenn wir die Abfrage in die folgende ändern:

SELECT DISTINCT
  first_name,
  last_name 
FROM employee_info

... employee_id wird nicht mehr berücksichtigt; jetzt suchen wir nach eindeutigen Kombinationen von Namen. Es wird also nur eine Zeile für "Karen Bower" angezeigt:

first_namelast_name
JoshuaRees
KarenBower
LukePayne
MaxPaige
JuliaGlover
RoseHarris
NULLNULL
OliviaBaker
BernadetteParsons

Wenn Sie bei der Verwendung des Schlüsselworts DISTINCT nicht die gewünschten Ergebnisse erzielen, achten Sie besonders auf die Spalten, die Sie einbezogen haben. Wenn dieses spezielle Beispiel Sie immer noch verwirrt, lesen Sie diesen Artikel über das Zählen unterschiedlicher Werte in SQL.

SQL DISTINCT mit Aggregatfunktionen

Das Schlüsselwort DISTINCT kann zusammen mit Aggregatfunktionen verwendet werden. Die gebräuchlichsten Aggregatfunktionen sind:

  • MIN() - Gibt den kleinsten (minimalen) Wert zurück.
  • MAX() - Gibt den größten (maximalen) Wert zurück.
  • SUM() - Gibt die Summe der angegebenen Werte zurück.
  • AVG() - Gibt den Durchschnitt der angegebenen Werte (z. B. in einer Spalte) zurück.
  • COUNT() - Gibt die Anzahl der Elemente zurück (z. B. in einer Spalte).

Wenn DISTINCT mit SUM(), AVG() und COUNT() verwendet wird, werden doppelte Werte eliminiert, bevor die Summe, der Durchschnitt oder die Anzahl berechnet wird. Sie können das Schlüsselwort DISTINCT zwar mit MIN() und MAX() verwenden, es ist jedoch sinnlos, dies zu tun; es hat keine Auswirkungen auf die Ergebnisse.

Wenden wir diese Informationen auf unser vorheriges Beispiel mit der employee_info Tabelle. Wenn wir die Anzahl der Mitarbeiter zählen wollten, die derzeit in unserem Unternehmen arbeiten, und dabei darauf achten wollten, doppelte Einträge zu entfernen, würden wir die folgende Abfrage schreiben:

SELECT COUNT(DISTINCT employee_id)
FROM employee_info

Das Ergebnis dieser Abfrage ist:

COUNT(DISTINCT employee_id)
9

Dies wäre das einfachste Beispiel dafür, wie das Schlüsselwort DISTINCT in Verbindung mit Aggregatfunktionen verwendet werden kann. Die Ausführung dieser Abfrage ohne das Schlüsselwort DISTINCT würde doppelte Werte in die Zählung einschließen:

SELECT COUNT(employee_id) 
FROM employee_info

Das Ergebnis dieser Abfrage ist:

COUNT(employee_id)
11

Wenn Sie glauben, dass Ihre Tabelle doppelte Datensätze enthalten könnte, ist die Verwendung von DISTINCT eine hervorragende Möglichkeit, um sicherzustellen, dass Ihre Berichte korrekt sind und nicht durch doppelte Werte beeinträchtigt werden. Wenn Ihnen dieser Anwendungsfall nicht klar ist, empfehle ich Ihnen, diesen Artikel über das Zählen unterschiedlicher Werte in SQL zu lesen. Es gibt viele weitere Anwendungsfälle für COUNT(); weitere nützliche Beispiele finden Sie in diesem Artikel, der die Unterschiede zwischen den gängigen Anwendungen der Funktion COUNT() erläutert.

DISTINCT mit Aggregatfunktionen und GROUP BY

Lassen Sie uns eine Aggregatfunktion mit dem Schlüsselwort DISTINCT verwenden, um ein häufiges Problem zu lösen. Wir möchten die Anzahl der potenziellen doppelten employee_id Einträge für jede Namenspaarung in unserer Tabelle ermitteln. Wir wollen den Fall isolieren, in dem der Name des Mitarbeiters genau derselbe ist, aber mit einem anderen employee_id. Hier ist die Abfrage:

SELECT
  first_name,
  last_name,
  COUNT(DISTINCT employee_id) 
FROM employee_info 
GROUP BY first_name, last_name

Und das Ergebnis:

employee_idfirst_nameCOUNT (DISTINCT employee_id)
NULLNULL0
BernadetteParsons1
JoshuaRees1
JuliaGlover1
KarenBower2
LukePayne1
MaxPaige1
OliviaBaker1
RoseHarris1

Aus diesen Ergebnissen können wir ersehen, dass wir zwei verschiedene Einträge für Karen Bower's employee_id haben. Dies ist eine hervorragende Information. Wenn es nicht zwei verschiedene Personen mit dem Namen Karen Bower gibt, die in unserem Unternehmen arbeiten, wissen wir, dass diese Information irrtümlich eingegeben wurde und als Duplikat betrachtet werden kann, das entfernt werden muss.

Das Lernen über DISTINCT in SQL ist nur der Anfang!

Die Fähigkeit, doppelte Daten aus Ihren Abfrageergebnissen zu isolieren und auszuschließen, ist eine wichtige Fähigkeit für alle SQL-Benutzer. Das Schlüsselwort DISTINCT spielt eine wichtige Rolle dabei, dass Sie dies effektiv tun können. Wenn Ihnen dieser Artikel gefallen hat und Sie weiter über SQL lernen möchten, sollten Sie sich unseren SQL-Grundlagen Lernpfad ansehen. Dort lernen Sie die grundlegenden SQL-Anweisungen wie WHERE, GROUP BY, ORDER BY und HAVING. Außerdem erfahren Sie, wie Sie JOIN Tabellen erstellen und Daten in einer Datenbank hinzufügen, ändern oder löschen können.