SQL Server Essentials: Verwendung von SQL Joins

In relationalen Datenbanken wie SQL Server wird die SQL JOIN-Anweisung verwendet, um Daten aus mehreren Tabellen abzufragen, zu verbinden und abzurufen, basierend auf den Datenbeziehungen zwischen diesen Tabellen. Sie können die SQL JOIN-Anweisung mit zwei oder mehr Tabellen verwenden, und sie gibt im Wesentlichen Datensätze zurück, die übereinstimmende Werte in den verschiedenen Tabellen haben. In diesem Tutorial werde ich erklären, wie man die gängigsten SQL JOIN-Typen verwendet, einschließlich des SQL INNER JOIN, des SQL LEFT JOIN, des SQL RIGHT JOIN und des SQL OUTER JOIN.

SQL Joins sind ein wesentliches Feature, das verwendet wird, wenn man mit relationalen Datenbanken arbeitet. Sie werden hauptsächlich mit der SQL SELECT-Anweisung ausgeführt. Weitere Informationen zum Einstieg in die T-SQL SELECT-Anweisung finden Sie in meinem vorherigen Artikel zu SQL Servern: Verwendung von SQL SELECT und den WHERE- und HAVING-Klauseln zum Abrufen von Daten.

Werbung

SQL INNER JOIN

Die SQL INNER JOIN-Operation erstellt einen Ergebnissatz, indem Zeilen kombiniert werden, die übereinstimmende Werte in zwei oder mehr Tabellen haben. Dies ist wahrscheinlich die am häufigsten verwendete Join-Operation in T-SQL. SQL INNER JOIN gibt nur Zeilen zurück, die übereinstimmende Werte haben, und wird verwendet, um Daten abzurufen, die in allen Tabellen erscheinen.

Das folgende Diagramm veranschaulicht, wie eine SQL INNER JOIN-Operation mit zwei Tabellen funktioniert.

How an SQL INNER JOIN operation works with two tables (Image credit: Petri/Michael Otey)

Die Syntax für einen INNER JOIN ist ziemlich einfach. Als Teil Ihrer SELECT-Anweisung geben Sie die beiden Tabellen an, die verbunden werden sollen, und die Spalten, die zum Abgleichen von Zeilen verwendet werden sollen.

Werfen wir einen genaueren Blick auf zwei Tabellen aus der AdventureWorksLT2019-Beispieldatenbank. Wenn wir die Tabellen SalesLT.Customer und SalesLT.SalesOrderHeader verwenden, können wir einen SQL INNER JOIN verwenden, um die Bestellungen für die Kunden in der Tabelle SalesLT.Customer abzurufen, indem wir die beiden Tabellen anhand der Spalte CustomerID verknüpfen, die eine gemeinsame Spalte in beiden Tabellen ist.

Werbung

Hier ist die T-SQL-Abfrage, die Sie verwenden können, um dies zu erreichen:

USE AdventureWorksLT2019

SELECT c.CustomerID, c.FirstName, c.LastName, soh.SalesOrderID, soh.OrderDate 
FROM SalesLT.Customer c
INNER JOIN SalesLT.SalesOrderHeader soh ON c.CustomerID = soh.CustomerID

So funktioniert die Syntax für den SQL INNER JOIN:

  • Hier sehen Sie, dass wir die Spalten ‚CustomerID‘, ‚FirstName‘ und ‚LastName‘ aus der Tabelle SalesLT.Customer auswählen und die Spalten ‚SalesOrderID‘ und ‚OrderDate‘ aus der Tabelle SalesLT.SalesOrderHeader auswählen.
  • Die ‚c‘ und ’soh‘ sind Kurzformen für Tabellenaliase, die es ermöglichen, den vollständigen Tabellennamen nicht immer verwenden zu müssen, wenn auf Spalten verwiesen wird.
  • Wir verwenden das INNER JOIN-Schlüsselwort, um die beiden Tabellen zu verknüpfen. Das ON-Schlüsselwort gibt die Spalte an, die für den Join verwendet werden soll. Hier ist es die Spalte ‚CustomerID‘.

Diese Abfrage liefert einen Ergebnissatz, der die Spalten ‚CustomerID‘, ‚Vorname‘, ‚Nachname‘, ‚SalesOrderID‘ und ‚Bestelldatum‘ für jeden Kunden enthält, der eine Bestellung aufgegeben hat, wie Sie in der folgenden Abbildung sehen können.

The result of our SQL INNER JOIN query (Image credit: Petri/Michael Otey)

SQL LEFT JOIN

Die SQL LEFT OUTER JOIN-Operation erstellt ebenfalls einen Ergebnissatz, indem Zeilen zwischen unseren beiden vorherigen Tabellen abgeglichen werden. Mit dem SQL LEFT JOIN werden jedoch, wenn keine Datensätze aus der linken Tabelle übereinstimmen, diese Datensätze mit Nullwerten angezeigt.

Werbung

Dies ist nützlich, wenn Sie alle Zeilen aus der ersten Tabelle und nur die übereinstimmenden Zeilen aus der zweiten Tabelle einschließen möchten, auch wenn es keine Übereinstimmung in der rechten Tabelle gibt. Der SQL LEFT OUTER JOIN gibt Nullwerte in Spalten aus der rechten Tabelle zurück, wenn keine Übereinstimmung vorhanden ist.

Das folgende Diagramm veranschaulicht, wie eine SQL LEFT OUTER JOIN-Operation mit zwei Tabellen funktioniert.

How an SQL LEFT OUTER JOIN works with two tables (Image credit: Petri/Michael Otey)

Die Syntax für den LEFT JOIN ist ebenfalls recht einfach. Im Rahmen der SELECT-Anweisung geben Sie die beiden Tabellen an, die verbunden werden sollen, die Spalten, die zum Abgleichen von Zeilen verwendet werden sollen, und die LEFT JOIN-Klausel.

Werfen wir einen genaueren Blick auf zwei Tabellen aus der AdventureWorksLT2019-Datenbank. Um beispielsweise alle Kunden und deren Bestellungen abzurufen, können Sie die Tabellen SalesLT.Customer und SalesLT.SalesOrderHeader verwenden und ein LEFT JOIN durchführen, wie Sie im folgenden Listing sehen können:

USE AdventureWorksLT2019

SELECT c.CustomerID, c.FirstName, c.LastName, soh.SalesOrderID, soh.OrderDate
FROM SalesLT.Customer c 
LEFT JOIN SalesLT.SalesOrderHeader soh ON c.CustomerID = soh.CustomerID
  • In diesem Beispiel wählen wir die Spalten ‚CustomerID‘, ‚Vorname‘, ‚Nachname‘, ‚SalesOrderID‘ und ‚Bestelldatum‘ aus den Tabellen SalesLT.Customer und SalesLT.SalesOrderHeader aus.
  • Wir verwenden das Schlüsselwort LEFT JOIN, um die beiden Tabellen zu verbinden, und das Schlüsselwort ON, das wir in der Spalte ‚CustomerID‘ verwenden werden, um die beiden Tabellen zu verbinden.

Die Ergebnisse dieser SQL LEFT JOIN-Abfrage können Sie in der Abbildung unten sehen.

The results of our SQL LEFT JOIN query (Image credit: Petri/Michael Otey)

Diese Abfrage liefert einen Ergebnissatz, der alle Kunden in der Tabelle SalesLT.Customer sowie alle entsprechenden Bestellinformationen aus der Tabelle SalesLT.SalesOrderHeader enthält. Wenn ein Kunde keine Bestellungen in der Tabelle SalesLT.SalesOrderHeader hat, werden die Spalten aus dieser Tabelle null sein. Sie können mehrere Nullwerte in der vorherigen Abbildung sehen.

SQL RIGHT JOIN

Wie Sie vermuten können, ist die SQL RIGHT OUTER JOIN-Operation im Wesentlichen das Gegenteil des LEFT OUTER JOIN. Der RIGHT OUTER JOIN wählt Daten aus der rechten Tabelle (Tabelle 2) aus und gleicht diese Daten mit den Zeilen aus der linken Tabelle (Tabelle 1) ab.

Der RIGHT JOIN liefert einen Ergebnissatz, der alle Zeilen in der rechten Tabelle enthält, auch wenn sie keine übereinstimmenden Zeilen aus der linken Tabelle haben. Wenn eine Zeile in der rechten Tabelle keine übereinstimmende Zeile in der linken Tabelle hat, werden die Spalten aus der linken Tabelle im Ergebnissatz null sein.

Das folgende Diagramm veranschaulicht, wie ein RIGHT JOIN mit zwei Tabellen funktioniert:

How a right JOIN works with two tables (Image credit: Petri/Michael Otey)

Wir können dies mit den Tabellen SalesLT.Customer und SalesLT.SalesOrderHeader aus der Datenbank AdventuresLT2019 zeigen. Um alle Bestellungen und die entsprechenden Kundendaten abzurufen, können Sie eine RIGHT JOIN-Abfrage verwenden, wie im folgenden Beispiel zu sehen ist:

USE AdventureWorksLT2019

SELECT c.CustomerID, c.FirstName, c.LastName, soh.SalesOrderID, soh.OrderDate
FROM SalesLT.Customer c 
RIGHT JOIN SalesLT.SalesOrderHeader soh ON c.CustomerID = soh.CustomerID
  • In diesem Beispiel wählen wir die Spalten ‚CustomerID‘, ‚FirstName‘, ‚LastName‘, ‚SalesOrderID‘ und ‚OrderDate‘ aus den Tabellen SalesLT.Customer und SalesLT.SalesOrderHeader aus.
  • Der RIGHT JOIN-Keyword wird verwendet, um die beiden Tabellen zu verbinden, und das ON-Keyword legt fest, dass wir die beiden Tabellen an der Spalte ‚CustomerID‘ verbinden.

Diese Abfrage wird ein Ergebnis集返回, das alle Aufträge der SalesLT.SalesOrderHeader-Tabelle enthält und deren entsprechende Kundeninformationen aus der SalesLT.Customer-Tabelle, falls verfügbar. Wenn ein Auftrag keine entsprechende Kundeninformation in der SalesLT.Customer-Tabelle hat, werden die Kunden Spalten im Ergebnis集 NULL sein.

Du kannst bemerken, dass diese Abfrage sehr viel wie die vorherige Abfrage aussieht. Allerdings ergab der LEFT JOIN viele Zeilen aus der SaleOrderHeader-Tabelle, die NULL-Werte hatten. Allerdings enthält unsere letzte Abfrage keine NULL-Werte in den Zeilen der SaleOrderHeader-Tabelle.

Die Ergebnisse unserer SQL RIGHT OUTER JOIN-Operation sind in dem folgenden Diagramm dargestellt.

The results of our SQL RIGHT OUTER JOIN operation (Image credit: Petri/Michael Otey)

SQL OUTER JOIN

Der SQL OUTER JOIN ist nicht der häufigste Typ von Verbindungsoperation. Manchmal wird er FULL JOIN genannt, der OUTER JOIN-Abfrage wird nicht nur die zugewiesenen Zeilen, sondern auch die nicht zugewiesenen Zeilen ausgeben. Mit anderen Worten, er gibt Daten aus der verknüpften Tabelle zurück, wenn es eine Übereinstimmung in entweder der linken oder rechten Tabelle gibt.

Wie du vielleicht erwartest, führt das zu größeren Ergebnissen als die anderen Typen von Joins. Das folgende Diagramm zeigt, wie ein SQL OUTER JOIN mit zwei Tabellen funktioniert.

How an SQL OUTER JOIN works with two tables (Image credit: Petri/Michael Otey)

I’ll give you an example of an SQL OUTER JOIN operation using the SalesLT.SalesOrderHeader and SalesLT.SalesOrderDetail tables. Here, we want to retrieve all sales orders and their associated details, including orders that don’t have any details records.

Um dies zu erreichen, können wir einen FULL OUTER JOIN verwenden. Dadurch werden auch alle SalesOrderDetail-Zeilen zurückgegeben, die keine entsprechende SalesOrderHeader-Zeile hatten. In den meisten Fällen sollten alle SalesOrderDetails-Zeilen eine entsprechende SalesOrderHearder-Zeile haben, aber dies könnte nicht der Fall sein, wenn es einen Anwendungs- oder Systemfehler gegeben hat, der so entdeckt werden kann.

Hier ist eine T-SQL-Abfrage, die ein Beispiel für einen FULL OUTER JOIN zeigt:

USE AdventureWorksLT2019

SELECT soh.SalesOrderID, soh.OrderDate, sod.ProductID, sod.OrderQty, sod.UnitPrice
FROM SalesLT.SalesOrderHeader soh
FULL OUTER JOIN SalesLT.SalesOrderDetail sod
ON soh.SalesOrderID = sod.SalesOrderID
  • In diesem Beispiel wählen wir die Spalten ‚SalesOrderID‘, ‚OrderDate‘, ‚ProductID‘, ‚Quantity‘ und ‚UnitPrice‘ aus den Tabellen SalesLT.SalesOrderHeader und SalesLT.SalesOrderDetail aus.
  • Wir verwenden das Schlüsselwort FULL OUTER JOIN, um die beiden Tabellen zu verbinden, und das Schlüsselwort ON, um anzugeben, dass die Spalte SalesOrderID zum Verbinden der beiden Tabellen verwendet wird.
  • Diese Abfrage gibt ein Ergebnis zurück, das alle Verkaufsbestellungen in der Tabelle SalesLT.SalesOrderHeader sowie die entsprechenden Detailinformationen aus der Tabelle SalesLT.SalesOrderDetail enthält. Es werden auch alle Details in der Tabelle SalesLT.SalesOrderDetail mit ihren entsprechenden Auftragskopfinformationen zurückgegeben, sofern verfügbar.
  • Wenn eine Verkaufsbestellung keine Details in der Tabelle SalesLT.SalesOrderDetail hat, werden die Spalten NULL sein. Wenn eine Detailinformation keine entsprechende Verkaufsbestellung in der Tabelle SalesLT.SalesOrderHeader hat, werden die Verkaufsbestellspalten NULL sein.

Die Ergebnisse dieser FULL OUTER JOIN-Operation werden in der folgenden Abbildung gezeigt.

The results of our FULL OUTER JOIN operation (Image credit: Petri/Michael Otey)

Erlernen der Grundlagen von SQL Joins

In diesem Tutorial habe ich die gängigsten Arten von SQL-JOINS behandelt. Ich habe gezeigt, wie man den INNER JOIN, den LEFT JOIN, den RIGHT JOIN und den OUTER JOIN verwendet und auch erklärt, wie sie sich unterscheiden und wo sie eingesetzt werden können. In einem kommenden Beitrag werde ich einige der weniger gebräuchlichen Joins wie den CROSS JOIN und den SELF JOIN behandeln, also bleiben Sie dran bei Petri!

Verwandter Artikel:

Source:
https://petri.com/sql-join/