INNER JOIN gegen LEFT JOIN die Frage. Heute werden wir kurz erklären, wie diese beiden Join-Typen verwendet werden und was der Unterschied ist. Wir werden dieses Thema später noch einmal durchgehen, wenn wir unser Modell erweitern und viel komplexere Abfragen schreiben können.
Änderungen in den Daten
Bevor wir INNER JOIN vs. LEFT JOIN, mal sehen, was wir aktuell wissen. Bisher haben wir in dieser Reihe die Grundlagen der Datenbank erläutert: Erstellen von Datenbanken und Tabellen, Auffüllen von Tabellen mit Daten und Überprüfen der darin gespeicherten Daten mithilfe einfacher Abfragen. Wir haben im vorherigen Artikel sogar zwei Tabellen zusammengefügt. Jetzt sind wir bereit für den nächsten Schritt.
Bevor wir jedoch fortfahren, nehmen wir nur eine geringfügige Änderung an vor unsere Daten. Mit den folgenden INSERT INTO-Befehlen fügen wir der Ländertabelle zwei Zeilen hinzu:
Jetzt überprüfen wir den Inhalt beider Tabellen:
Sie können leicht feststellen, dass wir zwei neue Zeilen im Tabellenland haben, eine für Spanien und eine für Russland. Ihre IDs sind 6 und 7. Beachten Sie auch, dass in der Stadttabelle keine country_id mit dem Wert 6 oder 7 vorhanden ist. Dies bedeutet einfach, dass wir keine Stadt aus Russland oder Spanien in unserer Datenbank haben. Wir werden diese Tatsache später verwenden.
INNER JOIN
Lassen Sie uns diese beiden Abfragen diskutieren:
Das Ergebnis, das sie zurückgeben, ist in der folgenden Abbildung dargestellt:
Beide Abfragen geben genau das gleiche Ergebnis zurück. Dies ist kein Zufall, sondern das Ergebnis der Tatsache, dass es sich um dieselbe Abfrage handelt, die auf zwei verschiedene Arten geschrieben wurde. Beide Methoden sind korrekt, und Sie können jede davon verwenden.
In der ersten Abfrage haben wir alle Tabellen aufgelistet, die wir im FROM-Teil der Abfrage (FROM-Land, Stadt) verwenden, und sind dann zum Join übergegangen Bedingung im WHERE-Teil der Abfrage (WHERE city.country_id = country.id). Falls wir vergessen haben, diese Verknüpfungsbedingung aufzuschreiben, haben wir das kartesische Produkt beider Tabellen.
In der zweiten Abfrage haben wir nur eine Tabelle im FROM-Teil der Abfrage (FROM-Land) und Dann haben wir die zweite Tabelle und die JOIN-Bedingung im JOIN-Teil der Abfrage (INNER JOIN city ON city.country_id = country.id).
Obwohl beide Abfragen gut geschrieben sind, würde ich dies vorschlagen Sie verwenden immer INNER JOIN, anstatt Tabellen aufzulisten und sie im WHERE-Teil der Abfrage zu verknüpfen. Dafür gibt es einige Gründe:
- Die Lesbarkeit ist viel besser, da die verwendete Tabelle und die zugehörige JOIN-Bedingung identisch sind Linie. Sie können leicht erkennen, ob Sie die JOIN-Bedingung weggelassen haben oder nicht.
- Wenn Sie später andere JOINs verwenden möchten (LINKS oder RECHTS), können Sie dies (leicht) nur tun, wenn Sie zuvor INNER JOIN verwendet haben dass
Lassen Sie uns nun kommentieren, welche Abfragen tatsächlich zurückgegeben wurden:
- Alle Paare von Ländern und Städten, die miteinander verbunden sind (über einen Fremdschlüssel)
- Wir haben keine 2 Länder in der Liste (Spanien und Russland), da sie keine verwandte Stadt in der Stadttabelle haben.
LEFT JOIN
Ich wiederhole dies – „Wir haben keine 2 Länder auf der Liste (Spanien und Russland), weil sie keine verwandte Stadt in der Stadttabelle haben“. Dies wird sich beim Vergleich von INNER JOIN mit LEFT JOIN als entscheidend erweisen.
In einigen Fällen möchten wir sogar diese Aufzeichnungen in unseren Ergebnissen haben. Sie möchten beispielsweise nur im Ergebnis sehen, dass diese Länder keine zugehörigen Datensätze in einer anderen Tabelle haben. Dies könnte Teil einer Kontrolle sein oder einfach nur Fälle zählen usw. Egal, was die Motivation hinter diesem Wunsch ist, wir sollten technisch in der Lage sein, dies zu tun. Und wir sind. In Datenbanken macht LEFT JOIN genau das.
Das Ergebnis von LEFT JOIN muss mit dem Ergebnis von INNER JOIN + übereinstimmen. Wir haben Zeilen aus der „linken“ Tabelle ohne ein Paar in der „richtige“ Tabelle. Wir verwenden dieselbe INNER JOIN-Abfrage und ersetzen einfach das Wort INNER durch LEFT. Dies ist das Ergebnis:
Sie können leicht feststellen, dass wir im Vergleich zum Ergebnis von INNER zwei weitere Zeilen haben JOIN-Abfrage. Dies sind Reihen für Russland und Spanien. Da beide keine verwandte Stadt haben, haben alle Stadtattribute in diesen beiden Zeilen NULL-Werte (sind nicht definiert). Dies ist der größte Unterschied beim Vergleich von INNER JOIN und LEFT JOIN.
RIGHT JOIN
Sie werden zumindest von RIGHT JOIN hören. Es wird selten verwendet, da es das gleiche Ergebnis wie LEFT JOIN zurückgibt. Auf der anderen Seite sind Abfragen, die LEFT JOIN verwenden, viel einfacher zu lesen, da wir Tabellen einfach nacheinander auflisten.
Dies entspricht der vorherigen Abfrage mit RIGHT JOIN:
Sie können feststellen, dass die zurückgegebenen Werte identisch sind. Nur in diesem Fall befinden sich die Werte aus der Stadttabelle in den ersten 5 Spalten und in den Ländern. Verwandte Werte folgen ihnen.
INNER JOIN gegen LEFT JOIN
INNER JOIN gegen LEFT JOIN?Eigentlich ist das überhaupt nicht die Frage. Sie verwenden INNER JOIN, wenn Sie nur Datensätze mit einem Paar auf beiden Seiten zurückgeben möchten, und Sie verwenden LEFT JOIN, wenn Sie alle Datensätze aus der „linken“ Tabelle benötigen, unabhängig davon, ob sie ein Paar in der „rechten“ Tabelle haben oder nicht. Wenn Sie alle Datensätze aus beiden Tabellen benötigen, unabhängig davon, ob sie ein Paar haben, müssen Sie CROSS JOIN verwenden (oder es mit LEFT JOINs und UNION simulieren). Mehr dazu in den kommenden Artikeln.
Inhaltsverzeichnis
SQL lernen: CREATE DATABASE & CREATE TABLE Operations
SQL lernen: INSERT IN TABLE
SQL lernen: Primärschlüssel
SQL lernen: Fremdschlüssel
SQL lernen: SELECT-Anweisung
SQL lernen: INNER JOIN vs LEFT JOIN
SQL lernen: SQL-Skripte
SQL lernen: Arten von Beziehungen
SQL lernen: Mehrere Tabellen verbinden
SQL lernen: Aggregatfunktionen
Lernen SQL: So schreiben Sie eine komplexe SELECT-Abfrage
Lernen Sie SQL: Die INFORMATION_SCHEMA-Datenbank
Lernen Sie SQL: SQL-Datentypen
SQL lernen: Theorie festlegen
SQL lernen: Benutzerdefinierte Funktionen
SQL lernen: Benutzerdefinierte gespeicherte Prozeduren
SQL lernen: SQL-Ansichten
SQL lernen: SQL-Trigger
SQL lernen: SQL-Abfragen üben
SQL lernen: Beispiele für SQL-Abfragen
SQL lernen: Erstellen Sie einen Bericht manuell Verwenden von SQL-Abfragen
Lernen Sie SQL: SQL Server-Datums- und Uhrzeitfunktionen
Lernen Sie SQL: Erstellen Sie SQL Server-Berichte mit Datums- und Zeitfunktionen
Lernen Sie SQL: SQL Server-Pivot-Tabellen
Lernen Sie SQL: SQL Server-Export nach Excel
Lernen Sie SQL: Einführung in SQL Server-Schleifen
SQL lernen: SQL Server-Cursor
SQL lernen: SQL Best Practices zum Löschen und Aktualisieren von Daten
SQL lernen: Namenskonventionen
SQL lernen: SQL-bezogene Jobs
SQL lernen: Nicht-Equi-Joins in SQL Server
SQL lernen: SQL Injektion
- Autor
- Letzte Beiträge
Seine bisherigen und gegenwärtigen Engagements reichen von Datenbankdesign und -codierung bis hin zu Lehren, Beraten und Schreiben über Datenbanken. Auch nicht zu vergessen, BI, Algorithmen erstellen, Schach, Philatelie, 2 Hunde, 2 Katzen, 1 Frau, 1 Baby …
Sie finden ihn auf LinkedIn
Alle Beiträge von Emil Drkusic anzeigen
- SQL lernen: SQL Injection – 2. November 2020
- SQL lernen: Nicht-Equi-Joins in SQL Server – 29. September 2020
- SQL lernen: SQL-bezogene Jobs – 1. September 2020