In diesem Kapitel lernst du, wie du Daten aus mehreren Tabellen kombinierst und komplexe Abfragen erstellst. Wir werden uns mit JOINs, UNION und Unterabfragen (Subqueries) beschäftigen.
5.1 JOINs
JOINs werden verwendet, um Daten aus mehreren Tabellen basierend auf einer Beziehung zwischen ihnen zu kombinieren. Die häufigsten JOIN-Typen sind:
INNER JOIN
Der INNER JOIN gibt nur die Datensätze zurück, bei denen die JOIN-Bedingung in beiden Tabellen erfüllt ist.
Syntax:
SELECT spalten FROM tabelle1 INNER JOIN tabelle2 ON tabelle1.spalte = tabelle2.spalte;
Beispiel:
Angenommen, wir haben zwei Tabellen: benutzer
und bestellungen
. Um den Namen jedes Benutzers und das Datum seiner Bestellungen abzurufen, schreibst du:
SELECT benutzer.name, bestellungen.datum FROM benutzer INNER JOIN bestellungen ON benutzer.id = bestellungen.benutzer_id;
LEFT JOIN
Der LEFT JOIN gibt alle Datensätze aus der linken Tabelle (tabelle1
) und die passenden Datensätze aus der rechten Tabelle (tabelle2
) zurück. Wenn keine Übereinstimmung gefunden wird, enthält das Ergebnis NULL
-Werte für die rechte Tabelle.
Beispiel:
SELECT benutzer.name, bestellungen.datum FROM benutzer LEFT JOIN bestellungen ON benutzer.id = bestellungen.benutzer_id;
RIGHT JOIN
Der RIGHT JOIN gibt alle Datensätze aus der rechten Tabelle (tabelle2
) und die passenden Datensätze aus der linken Tabelle (tabelle1
) zurück. Wenn keine Übereinstimmung gefunden wird, enthält das Ergebnis NULL
-Werte für die linke Tabelle.
Beispiel:
SELECT benutzer.name, bestellungen.datum FROM benutzer RIGHT JOIN bestellungen ON benutzer.id = bestellungen.benutzer_id;
FULL JOIN
Der FULL JOIN gibt alle Datensätze zurück, wenn es eine Übereinstimmung in einer der Tabellen gibt. Wenn keine Übereinstimmung gefunden wird, enthält das Ergebnis NULL
-Werte für die fehlenden Seiten.
Beispiel:
SELECT benutzer.name, bestellungen.datum FROM benutzer FULL JOIN bestellungen ON benutzer.id = bestellungen.benutzer_id;
5.2 UNION
Die UNION-Klausel wird verwendet, um die Ergebnisse von zwei oder mehr SELECT
-Anweisungen zu kombinieren. Die Anzahl und die Reihenfolge der Spalten müssen in allen SELECT
-Anweisungen gleich sein.
Syntax:
SELECT spalte1, spalte2 FROM tabelle1 UNION SELECT spalte1, spalte2 FROM tabelle2;
Beispiel:
Um die Namen aller Benutzer und Mitarbeiter in einer Liste zu kombinieren, schreibst du:
SELECT name FROM benutzer UNION SELECT name FROM mitarbeiter;
Hinweis:
UNION
entfernt doppelte Zeilen. Wenn du doppelte Zeilen behalten möchtest, verwendeUNION ALL
.
5.3 Unterabfragen (Subqueries)
Eine Unterabfrage ist eine Abfrage, die in einer anderen Abfrage verschachtelt ist. Sie kann in SELECT
, INSERT
, UPDATE
, DELETE
oder sogar in einer anderen Unterabfrage verwendet werden.
Beispiel:
Um alle Benutzer abzurufen, die eine Bestellung aufgegeben haben, schreibst du:
SELECT name FROM benutzer WHERE id IN (SELECT benutzer_id FROM bestellungen);
5.4 Zusammenfassung
In diesem Kapitel hast du gelernt:
Wie du Daten aus mehreren Tabellen mit JOINs kombinierst.
Wie du Ergebnisse von Abfragen mit UNION kombinierst.
Wie du Unterabfragen verwendest, um komplexe Abfragen zu erstellen.
Im nächsten Kapitel werden wir uns mit Aggregationen beschäftigen und lernen, wie du Daten zusammenfassend analysierst.
Quiz zu Daten abfragen
Teste dein Wissen mit diesen Fragen:
Welcher JOIN-Typ gibt nur die Datensätze zurück, bei denen die JOIN-Bedingung in beiden Tabellen erfüllt ist?
a)
LEFT JOIN
b)
INNER JOIN
c)
FULL JOIN
Wie kombinierst du die Ergebnisse von zwei
SELECT
-Anweisungen, ohne doppelte Zeilen zu entfernen?a)
UNION
b)
UNION ALL
c)
JOIN
Was ist eine Unterabfrage?
a) Eine Abfrage, die in einer anderen Abfrage verschachtelt ist.
b) Eine Abfrage, die nur eine Spalte zurückgibt.
c) Eine Abfrage, die nur eine Zeile zurückgibt.
Antworten:
1. b) INNER JOIN
2. b) UNION ALL
3. a) Eine Abfrage, die in einer anderen Abfrage verschachtelt ist.