Freigeben über


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;
HinweisHinweis

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