SQL - Verwenden von Joins: Ein umfassender Leitfaden für Anfänger
Hallo da draußen, angehende Datenbankenthusiasten! Als Informatiklehrer mit jahrelanger Erfahrung freue ich mich, Euch durch die aufregende Welt der SQL-Joins zu führen. Keine Sorge, wenn Ihr neu im Programmieren seid – wir beginnen bei den Grundlagen und arbeiten uns hoch. Bis zum Ende dieses Tutorials werdet Ihr Tabellen wie ein Profi verknüpfen können!
Was sind SQL-Joins?
Stellt Euch vor, Ihr organisiert eine große Familientreffen. Ihr habt eine Liste mit Namen und Alter und eine andere Liste mit Namen und Lieblingsessen. Wär es nicht toll, wenn Ihr diese Listen kombinieren könntet, um ein vollständiges Bild jedes Familienmitglieds zu bekommen? Genau das tun SQL-Joins für Datenbanktabellen!
In SQL wird eine Join-Klausel verwendet, um Zeilen aus zwei oder mehr Tabellen basierend auf einer verwandten Spalte zwischen ihnen zu kombinieren. Es ist, als ob Ihr eine Super-Tabelle mit Informationen aus mehreren Quellen erstellt.
Die SQL-Join-Klausel
Die grundlegende Syntax für einen SQL-JOIN sieht so aus:
SELECT Spaltenname(n)
FROM Tabelle1
JOIN Tabelle2
ON Tabelle1.Spaltenname = Tabelle2.Spaltenname;
Lassen wir das auseinanderbrechen:
- Wir SELECT die Spalten, die wir in unserem Ergebnis sehen möchten.
- Wir geben die erste Tabelle (Tabelle1) im FROM-Klausel an.
- Wir verwenden JOIN, um anzuzeigen, dass wir mit einer anderen Tabelle kombinieren möchten (Tabelle2).
- Die ON-Klausel gibt an, wie die Tabellen übereinstimmen sollten.
Arten von Joins in SQL
Nun tauchen wir ein in die verschiedenen Arten von Joins, die in SQL verfügbar sind. Ich mag es, diese als verschiedene Möglichkeiten zu betrachten, Gästelisten für unser Familientreffen zu kombinieren!
1. INNER JOIN
Der INNER JOIN ist wie das Einladen nur der Cousins, die sowohl auf Eurer Liste als auch auf der Liste Eurer Schwester stehen. Er gibt Zeilen zurück, die sowohl in beiden Tabellen passende Werte haben.
SELECT Bestellungen.BestellID, Kunden.Kundenname
FROM Bestellungen
INNER JOIN Kunden ON Bestellungen.KundenID = Kunden.KundenID;
Diese Abfrage wird alle Bestellungen zusammen mit dem Kundennamen zurückgeben, aber nur für Kunden, die Bestellungen aufgegeben haben.
2. LEFT (OUTER) JOIN
Der LEFT JOIN ist wie das Einladen aller auf Eurer Liste, auch wenn sie nicht auf der Liste Eurer Schwester stehen. Er gibt alle Zeilen aus der linken Tabelle und die passenden Zeilen aus der rechten Tabelle zurück.
SELECT Kunden.Kundenname, Bestellungen.BestellID
FROM Kunden
LEFT JOIN Bestellungen ON Kunden.KundenID = Bestellungen.KundenID;
Dies wird alle Kunden anzeigen, auch diejenigen, die keine Bestellungen aufgegeben haben (deren BestellID wird NULL sein).
3. RIGHT (OUTER) JOIN
Der RIGHT JOIN ist das Gegenteil des LEFT JOIN. Es ist, als ob Ihr die Liste Eurer Schwester als Hauptliste verwendet. Er gibt alle Zeilen aus der rechten Tabelle und die passenden Zeilen aus der linken Tabelle zurück.
SELECT Bestellungen.BestellID, Mitarbeiter.Nachname
FROM Bestellungen
RIGHT JOIN Mitarbeiter ON Bestellungen.MitarbeiterID = Mitarbeiter.MitarbeiterID;
Dies wird alle Mitarbeiter anzeigen, auch diejenigen, die keine Bestellungen bearbeitet haben.
4. FULL (OUTER) JOIN
Der FULL JOIN ist wie das Kombinieren beider Listen, einschließlich aller von beiden Seiten. Er gibt alle Zeilen zurück, wenn es eine Übereinstimmung in der linken oder rechten Tabelle gibt.
SELECT Kunden.Kundenname, Bestellungen.BestellID
FROM Kunden
FULL OUTER JOIN Bestellungen ON Kunden.KundenID = Bestellungen.KundenID;
Dies wird alle Kunden und alle Bestellungen anzeigen, mit NULL-Werten, wo keine Übereinstimmung besteht.
Praktische Beispiele
Lassen wir uns mit einigen realen Szenarien unsere Kenntnisse testen!
Beispiel 1: Kombinieren von Kunden- und Bestellinformationen
Angenommen, wir haben zwei Tabellen: Kunden
und Bestellungen
. Wir möchten alle Kunden und ihre Bestellungen (falls vorhanden) sehen.
SELECT Kunden.Kundenname, Bestellungen.BestellID, Bestellungen.Bestelldatum
FROM Kunden
LEFT JOIN Bestellungen ON Kunden.KundenID = Bestellungen.KundenID
ORDER BY Kunden.Kundenname;
Diese Abfrage wird:
- Alle Kunden auflisten, auch diejenigen ohne Bestellungen.
- Die BestellID und das Bestelldatum für Kunden anzeigen, die Bestellungen aufgegeben haben.
- NULL für BestellID und Bestelldatum anzeigen, wenn Kunden keine Bestellungen haben.
- Die Ergebnisse nach Kundenname sortieren.
Beispiel 2: Finden von Mitarbeitern, die keine Verkäufe getätigt haben
Angenommen, wir möchten Mitarbeiter identifizieren, die noch keine Bestellungen bearbeitet haben.
SELECT Mitarbeiter.MitarbeiterID, Mitarbeiter.Nachname, Mitarbeiter.Vorname
FROM Mitarbeiter
LEFT JOIN Bestellungen ON Mitarbeiter.MitarbeiterID = Bestellungen.MitarbeiterID
WHERE Bestellungen.BestellID IS NULL;
Diese Abfrage wird:
- Die Mitarbeiter- und Bestelltabellen verknüpfen.
- Mit der WHERE-Klausel filtern, um Mitarbeiter ohne passende Bestellungen zu finden.
- Nur die Mitarbeiter zurückgeben, die keine Bestellungen bearbeitet haben.
Tipps und Tricks
- Beginnt immer mit einem einfachen Join und baut die Komplexität schrittweise auf.
- Verwendet TabellenAliase für Lesbarkeit, insbesondere bei langen Tabellenamen:
SELECT k.Kundenname, b.BestellID FROM Kunden k LEFT JOIN Bestellungen b ON k.KundenID = b.KundenID;
- Seid achtsam bei der Leistung mit großen Datensätzen. Joins können ressourcenintensiv sein.
Häufige Join-Methoden
Hier ist eine praktische Tabelle, die die Join-Methoden zusammenfasst, die wir besprochen haben:
Join-Typ | Beschreibung |
---|---|
INNER JOIN | Gibt Zeilen zurück, die passende Werte in beiden Tabellen haben |
LEFT JOIN | Gibt alle Zeilen aus der linken Tabelle und die passenden Zeilen aus der rechten Tabelle zurück |
RIGHT JOIN | Gibt alle Zeilen aus der rechten Tabelle und die passenden Zeilen aus der linken Tabelle zurück |
FULL JOIN | Gibt alle Zeilen zurück, wenn es eine Übereinstimmung in der linken oder rechten Tabelle gibt |
Merkt Euch, Übung macht den Meister! Versucht diese Joins mit verschiedenen Datensätzen auszuprobieren, und bald werdet Ihr Tabellen wie ein Datenbank-Zauberer kombinieren können. Viel Spaß beim Coden und möge Eure Joins stets erfolgreich sein!
Credits: Image by storyset