Problem:
Sie möchten Daten aus bestimmten Spalten (eines ähnlichen Datentyps) aus zwei Tabellen in SQL anzeigen.
Beispiel:
Es gibt zwei Tabellen in unserer Datenbank:employee
und customer
.
Der employee
Tabelle enthält Daten in den folgenden Spalten:id , Vorname , Nachname , und Alter .
id | Vorname | Nachname | Alter |
---|---|---|---|
1 | Tom | Müller | 22 |
2 | Johannes | Smith | 26 |
3 | Lisa | Williams | 30 |
4 | Karl | Davis | 21 |
5 | James | Moore | 22 |
Der customer
Tabelle enthält Daten in den folgenden Spalten:id , Vorname , Nachname , und Alter .
id | Vorname | Nachname | Alter |
---|---|---|---|
1 | Mailand | Smith | 45 |
2 | Karl | Davis | 21 |
3 | Markieren | Unterstützer | 19 |
Lassen Sie uns in einem Ergebnissatz den Vornamen, den Nachnamen und das Alter für alle Personen in der Datenbank anzeigen, sowohl für Mitarbeiter als auch für Kunden.
Lösung 1:
Wir verwenden UNION ALL
um Daten aus Spalten in zwei Tabellen zu verbinden.
Hier ist die Abfrage, die Sie schreiben würden:
SELECT first_name, last_name, age FROM employee UNION ALL SELECT first_name, last_name, age FROM customer;
Hier ist das Ergebnis:
Vorname | Nachname | Alter |
---|---|---|
Tom | Müller | 22 |
Johannes | Smith | 26 |
Lisa | Williams | 30 |
Charles | Davis | 21 |
James | Moore | 28 |
Mailand | Smith | 45 |
Charles | Davis | 21 |
Markieren | Unterstützer | 19 |
Diskussion:
Verwenden Sie die UNION ALL-Klausel, um Daten aus Spalten in zwei oder mehr Tabellen zu verknüpfen. In unserem Beispiel führen wir Daten vom employee
und customer
Tische. Platzieren Sie links neben dem Schlüsselwort UNION ALL die erste SELECT-Anweisung, um Daten aus der ersten Tabelle abzurufen (in unserem Beispiel die Tabelle employee
). Verwenden Sie rechts eine weitere SELECT-Anweisung, um Daten aus der zweiten Tabelle abzurufen (in unserem Beispiel customer
).
Denken Sie daran, dass die ausgewählten Daten in beiden Tabellen in jeder Spalte denselben Datentyp haben müssen. Wenn beispielsweise die erste Spalte im ersten SELECT ein String-Datentyp ist, muss die erste Spalte im zweiten SELECT ebenfalls ein String-Datentyp sein. Wenn die zweite Spalte in der ersten SELECT-Anweisung eine Ganzzahl ist, muss die zweite Spalte in der zweiten Tabelle ebenfalls vom Typ Ganzzahl sein.
In der ersten Abfrage haben wir das Alter (das Alter des Mitarbeiters, bei dem es sich um einen ganzzahligen Datentyp handelt) für die dritte Spalte ausgewählt. Daher ist die dritte Spalte im zweiten SELECT auch ein ganzzahliger Wert; es ist das Alter des Kunden.
Die zweiten Spalten in beiden SELECT-Anweisungen sind vom gleichen Datentyp. Wenn die Werte jedoch in beiden Tabellen gleich sind, werden sie mehrfach angezeigt; „Charles Davis 21“ wird beispielsweise zweimal im Ergebnissatz angezeigt.
Was ist, wenn Sie nicht mehrere identische Datensätze in der Ergebnistabelle haben möchten? Verwenden Sie in diesem Fall UNION
. Es ähnelt UNION ALL
, aber es entfernt doppelte Datensätze. Sehen Sie sich das folgende Beispiel an.
Lösung 2:
Hier ist die Abfrage, die doppelte Datensätze vermeidet:
SELECT first_name, last_name FROM employee UNION SELECT first_name, last_name FROM customer;
Hier ist das Ergebnis der obigen Abfrage:
Vorname | Nachname |
---|---|
Markieren | Unterstützer |
James | Moore |
Johannes | Smith |
Karl | Davis |
Mailand | Smith |
Tom | Müller |
Lisa | Williams |
Hinweis:
UNION ALL
ist schneller als UNION
, aber UNION
entfernt doppelte Zeilen. Die Wahl hängt von den von uns benötigten Ergebnisdaten ab.