Verwenden von äußeren Verknüpfungen
Innere Verknüpfungen geben nur Zeilen zurück, wenn in beiden Tabellen mindestens jeweils eine Zeile vorhanden ist, die der Verknüpfungsbedingung entspricht. Innere Verknüpfungen entfernen die Zeilen, die nicht mit einer Zeile aus der anderen Tabelle übereinstimmen. Äußere Verknüpfungen dagegen geben alle Zeilen aus mindestens einer der in der FROM-Klausel genannten Tabellen oder Sichten zurück, sofern diese Zeilen ggf. die WHERE- oder HAVING-Suchbedingungen erfüllen. Es werden alle Zeilen aus der linken Tabelle, auf die in einer linken äußeren Verknüpfung verwiesen wird, und alle Zeilen aus der rechten Tabelle, auf die in einer rechten äußeren Verknüpfung verwiesen wird, abgerufen. Alle Zeilen aus beiden Tabellen werden in einer vollständigen äußeren Verknüpfung zurückgegeben.
SQL Server verwendet die folgenden ISO-Kennwörter für die in einer FROM-Klausel angegebenen äußeren Verknüpfungen:
LEFT OUTER JOIN oder LEFT JOIN
RIGHT OUTER JOIN oder RIGHT JOIN
FULL OUTER JOIN oder FULL JOIN
Verwenden von linken äußeren Verknüpfungen
Ziehen Sie z. B. eine Verknüpfung der Product-Tabelle und der ProductReview-Tabelle über deren ProductID-Spalten in Betracht. Die Ergebnisse zeigen nur die Produkte, für die Bewertungen geschrieben wurden.
Verwenden Sie eine linke äußere Verknüpfung von ISO, um alle Produkte in die Ergebnisse aufzunehmen, unabhängig davon, ob für die Produkte eine Bewertung abgegeben wurde oder nicht. Im Folgenden wird die Abfrage aufgeführt:
USE AdventureWorks;
GO
SELECT p.Name, pr.ProductReviewID
FROM Production.Product p
LEFT OUTER JOIN Production.ProductReview pr
ON p.ProductID = pr.ProductID
Die linke äußere Verknüpfung (LEFT OUTER JOIN) nimmt alle Zeilen in der Product-Tabelle in die Ergebnisse auf, unabhängig davon, ob eine Übereinstimmung mit der ProductID-Spalte in der ProductReview-Tabelle besteht. Beachten Sie, dass in den Ergebnissen, in denen es keine übereinstimmende Produktbewertungs-ID für ein Produkt gibt, die Zeile in der ProductReviewID-Spalte einen Nullwert enthält.
Verwenden von rechten äußeren Verknüpfungen
Ziehen Sie z. B. eine Verknüpfung der SalesTerritory-Tabelle und der SalesPerson-Tabelle über deren TerritoryID-Spalten in Betracht. Die Ergebnisse zeigen alle Regionen, die einem Vertriebsmitarbeiter zugewiesen wurden. Der ISO-Operator für die rechte äußere Verknüpfung, RIGHT OUTER JOIN, gibt an, dass alle Zeilen in der zweiten Tabelle in die Ergebnisse übernommen werden sollen, unabhängig davon, ob entsprechende Daten in der ersten Tabelle enthalten sind.
Mit einer rechten äußeren Verknüpfung von ISO nehmen Sie alle Vertriebsmitarbeiter in die Ergebnisse auf, unabhängig davon, ob ihnen eine Region zugewiesen wurde oder nicht. Es folgen die Transact-SQL-Abfrage und die Ergebnisse der rechten äußeren Verknüpfung:
USE AdventureWorks;
GO
SELECT st.Name AS Territory, sp.SalesPersonID
FROM Sales.SalesTerritory st
RIGHT OUTER JOIN Sales.SalesPerson sp
ON st.TerritoryID = sp.TerritoryID ;
Dies ist das Resultset.
Territory SalesPersonID
-------------------------------------------------- -------------
NULL 268
Northeast 275
Southwest 276
Central 277
Canada 278
Southeast 279
Northwest 280
Southwest 281
Canada 282
Northwest 283
NULL 284
United Kingdom 285
France 286
Northwest 287
NULL 288
Germany 289
Australia 290
(17 row(s) affected)
Eine äußere Verknüpfung kann durch Verwenden eines Prädikats weiter eingeschränkt werden. Dieses Beispiel enthält ebenfalls eine rechte äußere Verknüpfung, enthält jedoch ausschließlich Vertriebsregionen mit einem Umsatz von weniger als 2.000.000$.
USE AdventureWorks;
GO
SELECT st.Name AS Territory, sp.SalesPersonID
FROM Sales.SalesTerritory st
RIGHT OUTER JOIN Sales.SalesPerson sp
ON st.TerritoryID = sp.TerritoryID
WHERE st.SalesYTD < $2000000;
Weitere Informationen zu Prädikaten finden Sie unter WHERE (Transact-SQL).
Verwenden von vollständigen äußeren Verknüpfungen
Um die nicht übereinstimmenden Daten durch Einfügen der nicht übereinstimmenden Zeilen in die Ergebnisse einer Verknüpfung beizubehalten, sollten Sie eine vollständige äußere Verknüpfung verwenden. SQL Server stellt den Operator für vollständige äußere Verknüpfungen, FULL OUTER JOIN, bereit, der alle Zeilen aus beiden Tabellen einschließt, unabhängig davon, ob die andere Tabelle einen übereinstimmenden Wert enthält.
Ziehen Sie z. B. eine Verknüpfung der SalesTerritory-Tabelle und der SalesPerson-Tabelle über deren TerritoryID-Spalten in Betracht. Die Ergebnisse zeigen nur die Produkte, für die es Bestellungen gibt. Der FULL OUTER JOIN-Operator von ISO gibt an, dass alle Zeilen aus beiden Tabellen in die Ergebnisse übernommen werden sollen, unabhängig davon, ob übereinstimmende Daten in den Tabellen enthalten sind.
Sie können eine WHERE-Klausel mit einer vollständigen äußeren Verknüpfung einschließen, um nur die Zeilen zurückzugeben, in denen es keine zwischen den Tabellen übereinstimmenden Daten gibt. Die folgende Abfrage gibt nur solche Produkte zurück, denen keine Bestellung zugeordnet ist, sowie die Bestellungen, die keinem Produkt zugeordnet sind (obwohl in diesem Fall alle Bestellungen einem Produkt zugeordnet sind).
USE AdventureWorks;
GO
-- The OUTER keyword following the FULL keyword is optional.
SELECT p.Name, sod.SalesOrderID
FROM Production.Product p
FULL OUTER JOIN Sales.SalesOrderDetail sod
ON p.ProductID = sod.ProductID
WHERE p.ProductID IS NULL
OR sod.ProductID IS NULL
ORDER BY p.Name ;