Skorelowanej podkwerendy
Wiele kwerendy może przyjmować wykonując podkwerenda tylko raz i podstawianie wartości wyniku lub wartości w klauzula WHERE kwerendy zewnętrzne.W kwerendach zawierających skorelowana podkwerenda (nazywane także powtarzanej podkwerendy) podkwerendę zależy od zewnętrznej kwerendy do jego wartości.Oznacza to, że podkwerendę jest wykonywane wielokrotnie, jeden raz dla każdego wiersza, który może być wybierane przez kwerendę zewnętrznego.
Ta kwerenda pobiera jedno wystąpienie każdego pracownika imienia i ostatnio nazwy, dla których podwyższenia w SalesPerson Tabela jest 5000 i dla których numery identyfikacyjne pracowników zgodne pod względem Employee i SalesPerson tabele.
USE AdventureWorks;
GO
SELECT DISTINCT c.LastName, c.FirstName, e.EmployeeID
FROM Person.Contact AS c JOIN HumanResources.Employee AS e
ON e.ContactID = c.ContactID
WHERE 5000.00 IN
(SELECT Bonus
FROM Sales.SalesPerson sp
WHERE e.EmployeeID = sp.SalesPersonID) ;
GO
Here is the result set.
Nazwisko imię IDPracownika
------------------------- ----------------- -----------
Wolfe Ansman Pamela 280
Saraiva José 282
(dotyczy wiersze 2)
Niezależnie od zewnętrznej kwerendy nie może być określona poprzedniego podkwerenda w tej instrukcja.Potrzebne wartości dla Employee.EmployeeID, ale wartość ta zmienia się jako SQL Server sprawdza, czy w różnych wierszach w Employee.
Jest dokładnie sposób wyznaczania wartości tej kwerendy: SQL Server uważa, każdy wiersz Employee Tabela do włączenia wyniki przez podstawianie wartości w każdym wierszu w wewnętrzną kwerendę. Na przykład jeśli SQL Server najpierw sprawdza wiersza dla Syed Abbas, zmienna Employee.EmployeeID przyjmuje wartość 288, które SQL Server substytuty w wewnętrzną kwerendę.
USE AdventureWorks;
GO
SELECT Bonus
FROM Sales.SalesPerson
WHERE SalesPersonID = 288;
Wynik jest równy 0 (Syed Abbas nie otrzymał premii, ponieważ nie jest on osoby sprzedaży), więc wynikiem kwerendy zewnętrzne:
USE AdventureWorks;
GO
SELECT LastName, FirstName
FROM Person.Contact c JOIN HumanResources.Employee e
ON e.ContactID = c.ContactID
WHERE 5000 IN (0.00);
Ponieważ jest to wartość false, wiersz Syed Abbas nie znajduje się wyniki.Przejść przez tę samą procedurę z wierszem dla Pamela Ansman-Wolfe.Pojawi się, że ten wiersz jest uwzględniane w wynikach.
Skorelowanej podkwerendy mogą również zawierać funkcja zwracająca tabelę s w klauzula FROM przy odwoływaniu się do kolumn z tabela w zewnętrznej kwerendy jako argumentu funkcja zwracająca tabelę.W takim przypadek dla każdego wiersza kwerendę zewnętrzną, funkcja wycenione tabela jest wyznaczana zgodnie z podkwerenda.