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