Share via


Verwenden von inneren Verknüpfungen

Bei einer inneren Verknüpfung werden die Werte in den verknüpften Spalten mithilfe eines Vergleichsoperators verglichen.

Nach dem ISO-Standard können innere Verknüpfungen 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 Verknüpfungen werden als innere Verknüpfungen des alten Typs bezeichnet.

Die folgende Transact-SQL-Abfrage ist ein Beispiel für eine innere Verknüpfung:

USE AdventureWorks;
GO
SELECT *
FROM HumanResources.Employee AS e
    INNER JOIN Person.Contact AS c
    ON e.ContactID = c.ContactID
ORDER BY c.LastName

Bei dieser inneren Verknüpfung handelt es sich um eine Gleichheitsverknüpfung. Sie gibt alle Spalten in beiden Tabellen und nur die Zeilen zurück, die einen übereinstimmenden Wert in der Verknüpfungsspalte 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 Verknüpfungen verwendet werden, können auch für Ungleichverknüpfungen verwendet werden. Weitere Informationen zu den verfügbaren Operatoren und Prädikaten, die in Verknüpfungen verwendet werden können, finden Sie unter Verwenden von Operatoren in Ausdrücken und WHERE (Transact-SQL).

Das folgende Beispiel verwendet eine Verknüpfung mit Kleiner als (<), um nach den Verkaufspreisen von Produkt 718 zu suchen, die kleiner als der für das Produkt empfohlene Listenpreis sind.

USE AdventureWorks;
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          Selling Price
----------- --------------------------- ------------------ -------------
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 row(s) affected)

Verknüpfungen mithilfe des Ungleichoperators

Die Verknüpfung mit Ungleich (<>) wird selten verwendet. In der Regel sind solche Verknüpfungen nur in Kombination mit einer Selbstverknüpfung sinnvoll. Mit folgender Ungleich- und Selbstverknüpfung von Transact-SQL ermitteln Sie beispielsweise die Unterkategorien, die mindestens zwei verschiedene Preise unter $15 enthalten:

USE AdventureWorks;
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 Ungleichverknüpfung in Kombination mit einer Selbstverknüpfung, 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 AdventureWorks;
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