Was ist der Unterschied zwischen UNIQUE und DISTINCT in SQL?
In unserem Alltag verwenden wir die Wörter unique und distinct austauschbar. In SQL spielen diese Begriffe jedoch eine ganz andere Rolle. Lassen Sie uns herausfinden, was an ihnen so unterschiedlich ist und wie wir sie in SQL verwenden können.
Obwohl die Wörter unique und distinct Synonyme sind, decken sie in SQL sehr unterschiedliche Dinge ab. Das Schlüsselwort UNIQUE
spielt in SQL die Rolle einer Datenbankbeschränkung; es stellt sicher, dass in einer bestimmten Spalte oder einem Satz von Spalten keine doppelten Werte gespeichert sind. Andererseits wird das Schlüsselwort DISTINCT
in der Anweisung SELECT
verwendet, um eindeutige Zeilen aus einer Tabelle zu holen.
Der beste Ort, um etwas über SQL und Datenbanken zu lernen, ist LearnSQL.de. Es handelt sich um eine Online-Plattform, die Ihnen helfen soll, alle Datenbankthemen zu beherrschen. Sie bietet über 30 SQL-Kurse, darunter einen umfassenden SQL von A bis Z Track mit dem kompletten interaktiven SQL-Lernpfad oder Creating Database Structure, der Sie über Datenbankeinschränkungen wie UNIQUE
unterrichtet.
Schauen wir uns die beiden Schlüsselwörter UNIQUE
und DISTINCT
in SQL genauer an.
Das DISTINCT-Schlüsselwort in SQL
Das Schlüsselwort DISTINCT
in SQL wird zusammen mit der Anweisung SELECT
verwendet. Durch die Verwendung von SELECT
, unmittelbar gefolgt vom Schlüsselwort DISTINCT
, werden alle doppelten Zeilen aus der Ergebnismenge entfernt.
Schauen wir uns ein Beispiel für DISTINCT
in Aktion an.
Wir erhalten die Cars
Tabelle, die die Marken- und Modellinformationen für einige Autos enthält:
Id | Brand | Model | ProductionYear |
---|---|---|---|
AQ16 | Audi | Q7 | 2011 |
FK19 | Ford | Kuga | 2019 |
JC07 | Jeep | Cherokee | 2012 |
JW15 | Jeep | Wrangler | 2015 |
TS14 | Tesla | Model S | 2014 |
TY20 | Tesla | Model Y | 2020 |
Führen wir eine einfache SELECT
-Anweisung aus, um alle Automarken zu erhalten, die nach 2011 hergestellt wurden:
SELECT Brand FROM Cars WHERE ProductionYear > 2011;
Das Ergebnis der obigen Abfrage lautet wie folgt.
Brand |
---|
Ford |
Jeep |
Jeep |
Tesla |
Tesla |
Wie Sie sehen können, haben wir doppelte Werte für Jeep und Tesla. Was, wenn wir einen einzelnen Datensatz für jeden Wert benötigen? Wir verwenden das Schlüsselwort DISTINCT
:
SELECT DISTINCT Brand FROM Cars WHERE ProductionYear > 2011;
Und das Ergebnis ist...
Brand |
---|
Ford |
Jeep |
Tesla |
Jetzt sehen Sie, wie einfach und bequem es ist, das Schlüsselwort DISTINCT
zu verwenden.
Wenn Sie einen tieferen Einblick in das Schlüsselwort DISTINCT
in SQL erhalten möchten, lesen Sie unseren Artikel Was ist die Rolle von DISTINCT in SQL?
Das UNIQUE-Schlüsselwort in SQL
Das Schlüsselwort UNIQUE
in SQL kennzeichnet eine der Datenbankbeschränkungen. Durch die Verwendung der Einschränkung UNIQUE
für eine Spalte oder einen Satz von Spalten können Sie verhindern, dass doppelte Werte in dieser Spalte oder diesem Satz gespeichert werden (d. h. die Kombination von Spaltenwerten muss eindeutig sein, obwohl jeder Wert mehrmals in derselben Spalte vorkommen kann).
Schauen wir uns die UNIQUE
Einschränkung in Aktion an. Wir erstellen eine Person
Tabelle, die den Namen, die Sozialversicherungsnummer und die Nationalität einer Person speichert.
CREATE TABLE Person ( RowId INTEGER PRIMARY KEY, FirstName varchar(50), LastName varchar(50), SSN varchar(20) UNIQUE, Nationality varchar(30) );
In diesem Fall darf die SSN-Spalte nur nicht-duplizierende Werte speichern; daher gibt es ein UNIQUE
-Schlüsselwort in der Definition dieser Spalte, das ihr die UNIQUE-Beschränkung auferlegt.
Weitere Übungen zur Tabellenerstellung und zum Datenbankdesign finden Sie in unserem Track zur Erstellung von Datenbankstrukturen. Er umfasst die Grundlagen der Tabellenerstellung, SQL-Datentypen, Beschränkungen und mehr. Und um einen Einblick in den Track zu bekommen, lesen Sie diesen Artikel.
Fügen wir nun einige Werte in die Person
Tabelle ein.
INSERT INTO Person VALUES (1, 'John', 'Black', '321456987123', 'American');
INSERT INTO Person VALUES (2, 'Isabella', 'Sanchez', '987456345123', 'Spanish');
INSERT INTO Person VALUES (3, 'Klaus', 'Schmidt', '987456345123', 'German');
Wir erhalten einen Fehler bei der dritten INSERT
Anweisung. Und warum? Weil eine UNIQUE
Einschränkung für die Spalte SSN
definiert wurde; daher kann derselbe Wert nicht zweimal in der Spalte SSN
erscheinen. Sowohl Isabella als auch Klaus haben denselben SSN
Wert, daher erhalten wir eine Fehlermeldung. Wir haben uns nicht an die Regeln gehalten, die durch die UNIQUE
-Beschränkung festgelegt wurden.
Wenn wir die letzte INSERT
-Anweisung in... ändern.
INSERT INTO Person VALUES (3, 'Klaus', 'Schmidt', '876456345123', 'German');
... es wird in die Tabelle aufgenommen. Nach dem Ausführen aller drei INSERT
Anweisungen, einschließlich der korrigierten dritten Anweisung, sieht die Person
sieht die Tabelle wie folgt aus:
RowId | FirstName | LastName | SSN | Nationality |
---|---|---|---|---|
1 | John | Black | 321456987123 | American |
2 | Isabella | Sanchez | 987456345123 | Spanish |
3 | Klaus | Schmidt | 876456345123 | German |
Die UNIQUE
-Beschränkung verhindert, dass INSERTs
oder UPDATEs
in einer Tabelle zu doppelten Werten in der Spalte oder dem Satz von Spalten führen, die die Beschränkung implementieren.
Die nachstehende Tabelle verletzt also die UNIQUE
-Beschränkung, die für die Spalte SSN
gilt...
RowId | FirstName | LastName | SSN | Nationality |
---|---|---|---|---|
1 | John | Black | 321456987123 | American |
2 | Isabella | Sanchez | 987456345123 | Spanish |
3 | Klaus | Schmidt | 987456345123 | German |
...und diese Tabelle befolgt die UNIQUE
-Beschränkung für die SSN
-Spalte.
RowId | FirstName | LastName | SSN | Nationality |
---|---|---|---|---|
1 | John | Black | 321456987123 | American |
2 | Isabella | Sanchez | 987456345123 | Spanish |
3 | Klaus | Schmidt | 876456345123 | German |
Sie können die UNIQUE
Einschränkung während der Tabellenerstellung definieren, wie hier gezeigt wurde, oder nachdem die Tabelle erstellt wurde. Die UNIQUE
Einschränkung kann auch später geändert oder entfernt werden. Wie das geht, erfahren Sie im Artikel What Is a Unique Constraint in SQL? Wir bieten auch einen interaktiven Kurs über SQL-Beschränkungen an, um Ihnen zu helfen, die verschiedenen Beschränkungen, die SQL zur Verfügung stellt, zu verstehen.
Alles zusammenfügen: UNIQUE vs. DISTINCT in SQL
Wir haben die Schlüsselwörter UNIQUE und DISTINCT definiert. Aber was sind die tatsächlichen Unterschiede zwischen ihnen?
Das SchlüsselwortUNIQUE
kennzeichnet eine Datenbankbeschränkung und wird bei der Tabellenerstellung oder später für eine bestimmte Spalte oder einen Satz von Spalten definiert. Das Schlüsselwort DISTINCT
wird verwendet, wenn die Ergebnismenge aus der Datenbank abgerufen wird. Es folgt direkt auf dasSchlüsselwortSELECT
, wenn wir sicherstellen wollen, dass alle Zeilen der Ergebnismenge eindeutige Werte oder einen eindeutigen Satz von Werten enthalten.
Wir wissen, dass es immer gut ist, so viel praktische Erfahrung wie möglich zu sammeln, deshalb haben wir ein SQL-Übungssatz vorbereitet, mit dem Sie die verschiedenen Funktionen von SQL erlernen und üben können. Um sich selbst zu motivieren, schauen Sie sich unseren Artikel über die SQL-Übungssatz.
Viel Erfolg!