Lektionen des Moduls (3/4)
OUTER JOIN: Die „Lücken“ finden
In Modul 3 haben Sie LEFT JOIN gesehen: Behalten Sie alle Zeilen auf der linken Seite, auch diese
ohne Übereinstimmung auf der rechten Seite (die zu NULL werden). In diesem Kapitel haben wir
Erweitern Sie das Toolkit mit RIGHT JOIN und FULL OUTER JOIN, und wir lernen
wie man sie verwendet, um die „Lücken“ in den Daten zu finden: Zeilen in einer Tabelle, die
kein Gegenstück im anderen haben.
Die drei Arten von OUTER JOIN
A LEFT JOIN B ON … -- tutte le righe di A, con o senza match in B
A RIGHT JOIN B ON … -- tutte le righe di B, con o senza match in A
A FULL JOIN B ON … -- tutte le righe di A *e* di B; NULL dove non c'è matchA RIGHT JOIN B kann jederzeit mit demselben in B LEFT JOIN A umgeschrieben werden
ON: Es ist eine Frage der Lesbarkeit. Viele Stile (einschließlich dieses Kurses)
Verwenden Sie aus Konsistenzgründen lieber immer LEFT JOIN.
Das „Anti-Join“-Muster: Die fehlenden finden
Die häufigste Verwendung von LEFT JOIN ist „nicht mit den Daten anreichern“.
rechts", aber finden Sie die Zeilen auf der linken Seite, für die es KEINE Übereinstimmung gibt
richtig. Es heißt ein Anti-Join:
-- Prodotti senza nessuna recensione:
SELECT p.id, p.name
FROM products p
LEFT JOIN reviews r ON r.product_id = p.id
WHERE r.id IS NULL
ORDER BY p.id;Musterlogik:
LEFT JOINfügt die Bewertungen jedes Produkts bei, falls vorhanden;- Bei Produkten ohne Bewertungen sind alle
r-SpaltenNULL; WHERE r.id IS NULLbehält nur diese Produkte.
Schlüsselprüfung: ein id IS NULL für eine NOT NULL-Spalte der rechten Tabelle
bedeutet "es gab keine Übereinstimmung". Sie filtern oft nach der PK der rechten Hand
Tisch genau aus diesem Grund.
VOLLSTÄNDIGER ÄUSSERER JOIN
FULL OUTER JOIN hält beide Seiten ohne Übereinstimmung. Es wird selten verwendet,
Typischerweise für Datenintegritätsprüfungen:
SELECT c.id AS customer_id, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o ON o.customer_id = c.id
WHERE c.id IS NULL OR o.id IS NULL;Zeilen mit c.id IS NULL wären verwaiste Aufträge (ein customer_id, der
existiert nicht in customers). Diejenigen mit o.id IS NULL sind Kunden
ohne Befehle. In unserem Datensatz garantieren die Fremdschlüssel, dass kein Waisenschlüssel vorhanden ist
Aufträge liegen vor; Es bleiben nur die Kunden ohne Bestellungen übrig.
Probieren Sie es selbst aus
Finden Sie alle Produkte, die ich noch nicht gelesen habe. Mostra solo la colonna name. Ordina pro Name.
Hinweis anzeigen
Muster Anti-Join: LEFT JOIN prüft su Produkt-ID, POI, WO r.id NULL IST.
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
Ich suche Kunden, die ich nicht beauftragen konnte. Mostra-E-Mail. Bestellung per E-Mail.
Hinweis anzeigen
Stesso Pattern dell'esercizio previous, ma fra Kunden und Bestellungen.
Lösung nach 3 Versuchen verfügbar