INNER JOIN AM HÄUFIGSTEN
Gibt nur Zeilen zurück, die in beiden Tabellen übereinstimmende Werte haben. Das ist der Standard-JOIN-Typ und wird am häufigsten verwendet.
SELECT orders.id, customers.name, orders.amount
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.id
Das Wichtigste:
- Gibt nur übereinstimmende Datensätze aus beiden Tabellen zurück
- Filtert nicht übereinstimmende Zeilen automatisch heraus
- Der performanteste JOIN
- Kann auch einfach als
JOIN geschrieben werden (INNER ist implizit)
📚 Mehr erfahren: SQL JOINs für Einsteiger, MySQL-Joins-Guide, SQL-Server-Joins-Guide
LEFT JOIN
Gibt alle Zeilen der linken Tabelle und die passenden Zeilen der rechten Tabelle zurück. Gibt es keine Übereinstimmung, werden für die Spalten der rechten Tabelle NULL-Werte zurückgegeben.
SELECT customers.name, orders.amount
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id
Das Wichtigste:
- Behält alle Datensätze der linken (ersten) Tabelle
- NULL-Werte für nicht übereinstimmende Spalten der rechten Tabelle
- Auch bekannt als LEFT OUTER JOIN
- Praktisch, um Datensätze ohne zugehörige Daten zu finden
📚 Mehr erfahren: SQL JOINs für Einsteiger, MySQL-Joins-Guide, SQL-Server-Joins-Guide
RIGHT JOIN
Gibt alle Zeilen der rechten Tabelle und die passenden Zeilen der linken Tabelle zurück. Das Gegenstück zum LEFT JOIN.
SELECT orders.amount, customers.name
FROM orders
RIGHT JOIN customers
ON orders.customer_id = customers.id
Das Wichtigste:
- Behält alle Datensätze der rechten (zweiten) Tabelle
- NULL-Werte für nicht übereinstimmende Spalten der linken Tabelle
- Auch bekannt als RIGHT OUTER JOIN
- Lässt sich immer als LEFT JOIN umschreiben
📚 Mehr erfahren: SQL JOINs für Einsteiger, MySQL-Joins-Guide, SQL-Server-Joins-Guide
FULL OUTER JOIN
Gibt alle Zeilen beider Tabellen zurück, mit NULL-Werten dort, wo es in keiner Richtung eine Übereinstimmung gibt.
SELECT customers.name, orders.amount
FROM customers
FULL OUTER JOIN orders
ON customers.id = orders.customer_id
Das Wichtigste:
- Kombiniert die Ergebnisse von LEFT und RIGHT JOIN
- Zeigt alle Datensätze beider Tabellen
- In MySQL nicht unterstützt (stattdessen UNION verwenden)
- Praktisch, um alle Beziehungen und Lücken zu finden
📚 Mehr erfahren: SQL JOINs für Einsteiger, MySQL Full Outer Join, SQL-Server-Joins-Guide
CROSS JOIN MIT VORSICHT VERWENDEN
Gibt das kartesische Produkt beider Tabellen zurück – jede Zeile der ersten Tabelle kombiniert mit jeder Zeile der zweiten Tabelle.
SELECT sizes.name, colors.name
FROM sizes
CROSS JOIN colors
SELECT sizes.name, colors.name
FROM sizes, colors
Das Wichtigste:
- Keine ON-Klausel nötig (keine Join-Bedingung)
- Anzahl der Ergebniszeilen = (Zeilen links × Zeilen rechts)
- Kann schnell riesige Ergebnismengen erzeugen
- Praktisch zum Erzeugen von Kombinationen oder Testdaten
📚 Mehr erfahren: SQL JOINs für Einsteiger, PostgreSQL Cross Join
LEFT ANTI JOIN
Gibt Zeilen der linken Tabelle zurück, zu denen es in der rechten Tabelle keine passenden Zeilen gibt. Praktisch, um Datensätze ohne Beziehungen zu finden.
SELECT customers.name
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id
WHERE orders.id IS NULL
SELECT customers.name
FROM customers
WHERE NOT EXISTS (
SELECT 1 FROM orders
WHERE orders.customer_id = customers.id
)
Das Wichtigste:
- Umgesetzt mit LEFT JOIN + WHERE IS NULL
- Findet Datensätze ohne zugehörige Daten
- Auch „LEFT EXCLUDING JOIN“ genannt
- Beispiel: Kunden, die nie eine Bestellung aufgegeben haben
RIGHT ANTI JOIN
Gibt Zeilen der rechten Tabelle zurück, zu denen es in der linken Tabelle keine passenden Zeilen gibt. Das Gegenstück zum LEFT ANTI JOIN.
SELECT orders.id
FROM customers
RIGHT JOIN orders
ON customers.id = orders.customer_id
WHERE customers.id IS NULL
SELECT orders.id
FROM orders
LEFT JOIN customers
ON orders.customer_id = customers.id
WHERE customers.id IS NULL
Das Wichtigste:
- Umgesetzt mit RIGHT JOIN + WHERE IS NULL
- Findet verwaiste Datensätze in der rechten Tabelle
- Lässt sich immer als LEFT ANTI JOIN umschreiben
- Beispiel: Bestellungen ohne gültigen Kunden