JOINS in SQL Server: Typen mit Beispielen

⚡ Intelligente Zusammenfassung

Mit JOINs in SQL Server werden Zeilen aus zwei oder mehr Tabellen anhand einer verknüpften Spalte kombiniert. Dabei werden INNER, LEFT OUTER, RIGHT OUTER und FULL OUTER Joins verwendet, um zu steuern, welche übereinstimmenden und nicht übereinstimmenden Zeilen im Ergebnis erscheinen.

  • 🔗 Zweck: Ein JOIN ruft zusammengehörige Daten aus zwei oder mehr Tabellen ab, indem er eine gemeinsame Spalte, in der Regel einen Schlüssel, abgleicht.
  • 🎯 INNERE VERBINDUNG: INNER JOIN gibt nur die Zeilen zurück, in denen die Join-Bedingung in beiden Tabellen wahr ist.
  • ⬅️ LINKER ÄUSSERER JOIN: LEFT OUTER JOIN gibt jede Zeile der linken Tabelle zurück und füllt nicht übereinstimmende Spalten der rechten Tabelle mit NULL auf.
  • ➡️ RECHTER ÄUSSERER JOIN: RIGHT OUTER JOIN gibt jede Zeile aus der rechten Tabelle zurück und füllt nicht übereinstimmende Spalten der linken Tabelle mit NULL auf.
  • 🔄 VOLLSTÄNDIGER OUTER JOIN: FULL OUTER JOIN gibt alle Zeilen aus beiden Tabellen zurück und verwendet NULL, wo immer die Bedingung nicht erfüllt ist.
  • 🔑 EIN Zustand: Die ON-Klausel benennt die Spalten, die die Tabellen verknüpfen, meistens ein Primärschlüssel- und ein Fremdschlüsselpaar.

JOINs in SQL Server: Beispiele für INNER, LEFT, RIGHT und FULL OUTER JOIN

Was sind Joins in SQL Server?

Daten können mithilfe der JOIN-Anweisung aus mehr als einer Tabelle abgerufen werden. SQL ServerEin JOIN kombiniert Zeilen aus zwei oder mehr Tabellen anhand einer gemeinsamen Spalte, meistens einer Spalte im Datensatz. Primärschlüssel abgestimmt auf FremdschlüsselIn SQL Server gibt es im Wesentlichen vier Arten von JOINs:

  • INNER JOIN / einfacher Join
  • LEFT OUTER JOIN / LEFT JOIN
  • RIGHT OUTER JOIN / RIGHT JOIN
  • KOMPLETTE AUSSENVERBINDUNG

Die folgende Tabelle fasst zusammen, welche Zeilen die einzelnen JOIN-Typen zurückgeben:

JOIN-Typ zurückgegebene Zeilen
INNER JOIN Nur Zeilen, in denen die Verknüpfungsbedingung in beiden Tabellen erfüllt ist.
LEFT OUTER JOIN Alle Zeilen aus der linken Tabelle sowie die entsprechenden Zeilen aus der rechten Tabelle (NULL-Werte, falls keine Übereinstimmung vorliegt).
RECHTER ÄUSSERER JOIN Alle Zeilen aus der rechten Tabelle sowie die entsprechenden Zeilen aus der linken Tabelle (NULL-Werte, falls keine Übereinstimmung vorliegt).
KOMPLETTE AUSSENVERBINDUNG Alle Zeilen aus beiden Tabellen, wobei NULL-Werte überall dort eingefügt werden, wo die Bedingung nicht erfüllt ist.

Die folgenden Beispiele verwenden zwei TabellenDie Daten zu Studierenden und Gebühren wurden über die gemeinsame Spalte für die Zulassung verknüpft. Jeder Abschnitt erläutert einen JOIN-Typ mit seiner Syntax, einer Beispielabfrage und dem Ergebnis.

INNER JOIN

Diese Art von SQL Server JOIN gibt Zeilen aus allen Tabellen zurück, in denen die Verknüpfungsbedingung erfüllt ist. Die Syntax lautet wie folgt:

SELECT columns
FROM table_1 
INNER JOIN table_2
ON table_1.column = table_2.column;

Wir werden dies anhand der folgenden zwei Tabellen veranschaulichen. Die untenstehende Tabelle „Studenten“ listet jeden Studenten und seine Zulassungsnummer auf:

Tabelle der Studierenden mit den Spalten Zulassungsnummer, Vorname und Nachname

Die untenstehende Gebührentabelle zeigt den Betrag, der für jede Eintrittsnummer gezahlt wurde:

Gebührentabelle mit Angabe der Eintrittsnummern und der Spalte „Betrag_bezahlt“

Der folgende Befehl demonstriert einen INNER JOIN in SQL Server anhand eines Beispiels:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
INNER JOIN Fee
ON Students.admission = Fee.admission

Der Befehl liefert folgendes Ergebnis, das nur die in beiden Tabellen vorhandenen Zulassungsnummern anzeigt:

INNER JOIN-Ergebnis, das nur die Studierenden anzeigt, deren Zulassung in beiden Tabellen erscheint

Wir können erkennen, welche Studierenden ihre Gebühren bezahlt haben. Dazu haben wir die Spalte mit übereinstimmenden Werten in beiden Tabellen verwendet, nämlich die Zulassungsspalte.

LEFT OUTER JOIN

Diese Art von Join gibt alle Zeilen der linken Tabelle sowie die Datensätze der rechten Tabelle mit übereinstimmenden Werten zurück. Zum Beispiel:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
LEFT OUTER JOIN Fee
ON Students.admission = Fee.admission

Der Code liefert folgendes Ergebnis, keeping jeder Student, auch wenn kein Gebührennachweis übereinstimmt:

LEFT OUTER JOIN result keeping Jeder Student rudert mit NULL für unübertroffene Gebühren

Die Datensätze ohne übereinstimmende Werte werden in den entsprechenden Spalten durch NULL-Werte ersetzt.

RECHTER ÄUSSERER JOIN

Dieser Join-Typ gibt alle Zeilen aus der rechten Tabelle zurück und nur diejenigen mit übereinstimmenden Werten in der linken Tabelle. Zum Beispiel:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
RIGHT OUTER JOIN Fee
ON Students.admission = Fee.admission

Die Anweisung für OUTER JOINS in SQL Server liefert folgendes Ergebnis:

Ergebnis RIGHT OUTER JOIN keeping jede Gebührenzeile und die entsprechenden Studentenzeilen

Der Grund für die obige Ausgabe ist, dass alle Zeilen in der Gebührentabelle in der Studententabelle verfügbar sind, wenn sie in der Zulassungsspalte abgeglichen werden.

KOMPLETTE AUSSENVERBINDUNG

Diese Art von Join gibt alle Zeilen aus beiden Tabellen zurück, wobei NULL-Werte überall dort verwendet werden, wo die JOIN-Bedingung nicht erfüllt ist. Zum Beispiel:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
FULL OUTER JOIN Fee
ON Students.admission = Fee.admission

Der Code liefert für FULL OUTER JOIN-Abfragen folgendes Ergebnis zurück: SQL, indem jede Zeile aus beiden Tabellen kombiniert wird:

Ergebnis des FULL OUTER JOIN, bei dem alle Zeilen für Studenten und Gebühren mit NULL-Werten für Lücken kombiniert werden.

Häufig gestellte Fragen

Ein CROSS JOIN liefert das kartesische Produkt zweier Tabellen, indem jede Zeile der ersten Tabelle mit jeder Zeile der zweiten Tabelle verknüpft wird. Da keine ON-Bedingung erforderlich ist, ergeben eine Tabelle mit 10 Zeilen und eine Tabelle mit 5 Zeilen insgesamt 50 Zeilen.

Sie verwenden einen SELF JOIN: Die Tabelle wird zweimal mit unterschiedlichen Aliasen aufgelistet und anschließend über eine zugehörige Spalte verknüpft, um Zeilen innerhalb derselben Tabelle zu vergleichen. Dies ist üblich für hierarchische Daten, beispielsweise um jeden Mitarbeiter seinem Vorgesetzten zuzuordnen.

Ein JOIN verknüpft Spalten aus verwandten Tabellen nebeneinander und gleicht Zeilen anhand einer Bedingung ab. UNION stapelt die Ergebnisse zweier SELECT-Abfragen vertikal und fügt Zeilen hinzu. JOIN verbreitert das Ergebnis; UNION verlängert es.

Ja. Die ON-Klausel kann mehrere Spalten mit AND verknüpfen, zum Beispiel ON a.col1 = b.col1 AND a.col2 = b.col2. Zusammengesetzte Bedingungen sind üblich, wenn eine einzelne Spalte eine Zeile nicht eindeutig identifiziert.

Die ON-Klausel definiert, wie die Tabellen abgeglichen werden und wird während der Ausführung des Joins angewendet. Die WHERE-Klausel filtert das kombinierte Ergebnis anschließend. Bei OUTER JOINs kann das Verschieben einer Bedingung zwischen den Tabellen die zurückgegebenen Zeilen verändern.

Ja. Die Anweisung JOIN ohne Präfix führt standardmäßig zu INNER JOIN und gibt daher nur übereinstimmende Zeilen zurück. Durch Hinzufügen von LEFT, RIGHT oder FULL vor OUTER JOIN wird festgelegt, welche nicht übereinstimmenden Zeilen im Ergebnis beibehalten werden.

Ja. GitHub-Copilot Sie können INNER-, LEFT-, RIGHT- und FULL OUTER JOIN-Abfragen anhand einer natürlichsprachlichen Eingabeaufforderung erstellen. Überprüfen Sie stets die ON-Bedingung und den Join-Typ, damit das Ergebnis Ihren Erwartungen entspricht.

KI- und Machine-Learning-Assistenten schlagen den korrekten Join-Typ vor, generieren ON-Bedingungen für mehrere Tabellen und kennzeichnen fehlende Schlüssel oder versehentliche kartesische Produkte. Sie können auch Indizes für Join-Spalten empfehlen. Der Entwickler überprüft jeden Vorschlag, bevor er ihn ausführt.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: