Database
 sql >> Datenbank >  >> RDS >> Database

So kombinieren Sie die Ergebnisse zweier Abfragen in SQL

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.