SQLShack (Deutsch)

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
Emil ist ein Datenbankprofi mit mehr als 10 Jahren Erfahrung in allen Datenbanken. Im Laufe der Jahre arbeitete er in der IT- und Finanzbranche und arbeitet jetzt als Freiberufler.
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

Neueste Beiträge von Emil Drkusic (alle 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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.