Verwenden von inneren Joins
Bei einem inneren Join werden die Werte in den verknüpften Spalten mithilfe eines Vergleichsoperators verglichen.
Nach dem ISO-Standard können innere Joins in FROM- oder WHERE-Klauseln angegeben werden. Innere Verknüpfungen sind die einzigen Verknüpfungen, die ISO in WHERE-Klauseln unterstützen. In WHERE-Klauseln angegebene innere Joins werden als innere Joins des alten Typs bezeichnet.
Die folgende Transact-SQL-Abfrage ist ein Beispiel für einen inneren Join:
USE AdventureWorks2008R2;
GO
SELECT *
FROM HumanResources.Employee AS e
INNER JOIN Person.Person AS p
ON e.BusinessEntityID = p.BusinessEntityID
ORDER BY p.LastName
Bei diesem inneren Join handelt es sich um einen Gleichheitsjoin. Sie gibt alle Spalten in beiden Tabellen und nur die Zeilen zurück, die einen übereinstimmenden Wert in der Joinspalte enthalten.
Verknüpfungen mithilfe von anderen Operatoren als dem Gleichoperator
Sie können auch Werte in zwei Spalten verknüpfen, die nicht gleich sind. Dieselben Operatoren und Prädikate, die für innere Joins verwendet werden, können auch für Ungleichjoins verwendet werden. Weitere Informationen zu den verfügbaren Operatoren und Prädikaten, die in Joins verwendet werden können, finden Sie unter Verwenden von Operatoren in Ausdrücken und WHERE (Transact-SQL).
Das folgende Beispiel verwendet einen Join mit Kleiner als (<), um nach den Verkaufspreisen von Produkt 718 zu suchen, die kleiner als der für das Produkt empfohlene Listenpreis sind.
USE AdventureWorks2008R2;
GO
SELECT DISTINCT p.ProductID, p.Name, p.ListPrice, sd.UnitPrice AS 'Selling Price'
FROM Sales.SalesOrderDetail AS sd
JOIN Production.Product AS p
ON sd.ProductID = p.ProductID AND sd.UnitPrice < p.ListPrice
WHERE p.ProductID = 718;
GO
Dies ist das Resultset.
ProductID Name ListPrice Verkaufspreis
----------- --------------------------- ------------------ -------------
718 HL Road Frame - Red, 44 1431.5000 758.0759
718 HL Road Frame - Red, 44 1431.5000 780.8182
718 HL Road Frame - Red, 44 1431.5000 858.90
(3 Zeile(n) betroffen)
Joins mithilfe des Ungleichoperators
Der Join mit Ungleich (<>) wird selten verwendet. In der Regel sind solche Verknüpfungen nur in Kombination mit einem Selbstjoin sinnvoll. Mit folgendem Ungleich- und Selbstjoin von Transact-SQL ermitteln Sie beispielsweise die Unterkategorien, die mindestens zwei verschiedene Preise unter $15 enthalten:
USE AdventureWorks2008R2;
GO
SELECT DISTINCT p1.ProductSubcategoryID, p1.ListPrice
FROM Production.Product p1
INNER JOIN Production.Product p2
ON p1.ProductSubcategoryID = p2.ProductSubcategoryID
AND p1.ListPrice <> p2.ListPrice
WHERE p1.ListPrice < $15 AND p2.ListPrice < $15
ORDER BY ProductSubcategoryID;
Hinweis |
---|
Der Ausdruck NOT column_name = column_name entspricht column_name <> column_name. |
Das folgende Transact-SQL-Beispiel verwendet eine Ungleichjoin in Kombination mit einem Selbstjoin, um in der ProductVendor-Tabelle alle Gruppen von zwei oder mehr Zeilen zu ermitteln, die dieselbe ProductID, jedoch eine unterschiedliche VendorID besitzen (d. h. Produkte mit mehreren Anbietern):
USE AdventureWorks2008R2;
GO
SELECT DISTINCT p1.VendorID, p1.ProductID
FROM Purchasing.ProductVendor p1
INNER JOIN Purchasing.ProductVendor p2
ON p1.ProductID = p2.ProductID
WHERE p1.VendorID <> p2.VendorID
ORDER BY p1.VendorID