Podkwerendy z w
Wynik podzapytanie wprowadzone W (lub NOT IN) jest listą wartości zero lub więcej.Po podzapytanie zwraca wyniki, zewnętrznej kwerendy powoduje, że ich użycie.
Następująca kwerenda wyszukuje nazwy produktów koło Adventure Works Cycles ułatwia.
USE AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE ProductSubcategoryID IN
(SELECT ProductSubcategoryID
FROM Production.ProductSubcategory
WHERE Name = 'Wheels');
W tym polu jest wynikiem:
Name
----------------------------
LL Mountain Front Wheel
ML Mountain Front Wheel
HL Mountain Front Wheel
LL Road Front Wheel
ML Road Front Wheel
HL Road Front Wheel
Touring Front Wheel
LL Mountain Rear Wheel
ML Mountain Rear Wheel
HL Mountain Rear Wheel
LL Road Rear Wheel
ML Road Rear Wheel
HL Road Rear Wheel
Touring Rear Wheel
(14 row(s) affected)
To instrukcja jest oceniany w dwóch etapach.Po pierwsze wewnętrzne kwerenda zwraca numer identyfikacyjny podkategorii, który odpowiada nazwie "Koła" (17).Po drugie, wartość ta jest podstawiona do zewnętrznej kwerendy, nazwy produktu, który znajduje przejdź z numerami identyfikacyjnymi podkategorii w Product.
USE AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE ProductSubcategoryID IN ('17');
Jedna różnica w za pomocą łączyć zamiast podzapytanie w tym i podobnych problemów jest, że łączyć umożliwia pokazywanie kolumn z więcej niż jednej tabela w wyniku.Na przykład jeśli chcesz umieścić nazwę podkategoria produktu w wyniku należy użyć wersja łączyć.
Use AdventureWorks2008R2;
GO
SELECT p.Name, s.Name
FROM Production.Product p
INNER JOIN Production.ProductSubcategory s
ON p.ProductSubcategoryID = s.ProductSubcategoryID
AND s.Name = 'Wheels';
W tym polu jest wynikiem:
Name Name
LL Mountain Front Wheel Wheels
ML Mountain Front Wheel Wheels
HL Mountain Front Wheel Wheels
LL Road Front Wheel Wheels
ML Road Front Wheel Wheels
HL Road Front Wheel Wheels
Touring Front Wheel Wheels
LL Mountain Rear Wheel Wheels
ML Mountain Rear Wheel Wheels
HL Mountain Rear Wheel Wheels
LL Road Rear Wheel Wheels
ML Road Rear Wheel Wheels
HL Road Rear Wheel Wheels
Touring Rear Wheel Wheels
(14 row(s) affected)
Następująca kwerenda powoduje znalezienie wszystkich dostawców, których poziom kredytu jest dobry, od którego pochodzi nazwa Adventure Works Cycles zamówień, co najmniej 20 elementów i których średni czas realizacji do dostarczenia jest mniejsza niż 16 dni.
Use AdventureWorks2008R2;
GO
SELECT Name
FROM Purchasing.Vendor
WHERE CreditRating = 1
AND BusinessEntityID IN
(SELECT BusinessEntityID
FROM Purchasing.ProductVendor
WHERE MinOrderQty >= 20
AND AverageLeadTime < 16);
W tym polu jest wynikiem:
Name
--------------------------------------------------
Compete Enterprises, Inc
International Trek Center
First National Sport Co.
Comfort Road Bicycles
Circuit Cycles
First Rate Bicycles
Jeff's Sporting Goods
Competition Bike Training Systems
Electronic Bike Repair & Supplies
Crowley Sport
Expert Bike Co
Team Athletic Co.
Compete, Inc.
(13 row(s) affected)
Sprawdzane jest wewnętrzną kwerendą produkujących numery identyfikatorów dostawców, którzy spełniają kwalifikacji podzapytanie.Następnie sprawdzane jest kwerenda zewnętrznego.Należy zauważyć, że w klauzula WHERE, wewnętrzne i zewnętrzne kwerenda może zawierać więcej niż jeden warunek.
Za pomocą łączyć, tej samej kwerendzie wyrażony następująco:
USE AdventureWorks2008R2;
GO
SELECT DISTINCT Name
FROM Purchasing.Vendor v
INNER JOIN Purchasing.ProductVendor p
ON v.BusinessEntityID = p.BusinessEntityID
WHERE CreditRating = 1
AND MinOrderQty >= 20
AND AverageLeadTime < 16;
łączyć zawsze można wyrazić jako podzapytanie.podzapytanie można często, ale nie zawsze być wyrażone jako łączyć.Jest tak, ponieważ są symetryczne sprzężenia: Możesz łączyć tabela a do b w dowolnej kolejności i korzystaj z tej samej odpowiedzi.Nie jest taka sama wartość true, jeśli jest zaangażowany, podzapytanie.