Szukaj…
Uwagi
Podkwerendy mogą pojawiać się w różnych klauzulach zewnętrznego zapytania lub w operacji set.
Muszą być ujęte w nawiasy ()
. Jeśli wynik podzapytania zostanie porównany z czymś innym, liczba kolumn musi być zgodna. Aliasy tabeli są wymagane dla podkwerend w klauzuli FROM w celu nazwania tabeli tymczasowej.
Podzapytanie w klauzuli WHERE
Użyj podzapytania, aby przefiltrować zestaw wyników. Na przykład zwróci to wszystkim pracownikom wynagrodzenie równe najlepiej opłacanemu pracownikowi.
SELECT *
FROM Employees
WHERE Salary = (SELECT MAX(Salary) FROM Employees)
Podzapytanie w klauzuli FROM
Podkwerenda w klauzuli FROM
działa podobnie do tabeli tymczasowej, która jest generowana podczas wykonywania zapytania, a następnie zostaje utracona.
SELECT Managers.Id, Employees.Salary
FROM (
SELECT Id
FROM Employees
WHERE ManagerId IS NULL
) AS Managers
JOIN Employees ON Managers.Id = Employees.Id
Podzapytanie w klauzuli SELECT
SELECT
Id,
FName,
LName,
(SELECT COUNT(*) FROM Cars WHERE Cars.CustomerId = Customers.Id) AS NumberOfCars
FROM Customers
Podzapytania w klauzuli FROM
Możesz użyć podkwerend, aby zdefiniować tabelę tymczasową i użyć jej w klauzuli FROM zapytania „zewnętrznego”.
SELECT * FROM (SELECT city, temp_hi - temp_lo AS temp_var FROM weather) AS w
WHERE temp_var > 20;
Powyżej znajduje miasta z tabeli pogody, których dzienna zmiana temperatury jest większa niż 20. Rezultat jest następujący:
Miasto | temp_var |
---|---|
ST LOUIS | 21 |
LOS ANGELES | 31 |
LOS ANGELES | 23 |
LOS ANGELES | 31 |
LOS ANGELES | 27 |
LOS ANGELES | 28 |
LOS ANGELES | 28 |
LOS ANGELES | 32 |
.
Podzapytania w klauzuli WHERE
Poniższy przykład pokazuje miasta (z przykładu miast ), których populacja jest niższa niż średnia temperatura (uzyskana za pomocą podzapytania):
SELECT name, pop2000 FROM cities
WHERE pop2000 < (SELECT avg(pop2000) FROM cities);
Tutaj: podzapytanie (SELECT avg (pop2000) FROM cities) służy do określenia warunków w klauzuli WHERE. Wynik to:
Nazwa | pop2000 |
---|---|
San Francisco | 776733 |
ST LOUIS | 348189 |
Kansas City | 146866 |
Podzapytania w klauzuli SELECT
Podzapytania mogą być również używane w części SELECT
zapytania zewnętrznego. Poniższe zapytanie pokazuje wszystkie kolumny tabeli pogody z odpowiadającymi im stanami z tabeli miast .
SELECT w.*, (SELECT c.state FROM cities AS c WHERE c.name = w.city ) AS state
FROM weather AS w;
Filtruj wyniki zapytania, używając zapytania z innej tabeli
To zapytanie wybiera wszystkich pracowników spoza tabeli przełożonych.
SELECT *
FROM Employees
WHERE EmployeeID not in (SELECT EmployeeID
FROM Supervisors)
Te same wyniki można osiągnąć za pomocą LEWEGO DOŁĄCZENIA.
SELECT *
FROM Employees AS e
LEFT JOIN Supervisors AS s ON s.EmployeeID=e.EmployeeID
WHERE s.EmployeeID is NULL
Skorelowane podzapytania
Skorelowane (znane również jako synchronizowane lub skoordynowane) podkwerendy są zagnieżdżonymi zapytaniami, które odwołują się do bieżącego wiersza ich zewnętrznego zapytania:
SELECT EmployeeId
FROM Employee AS eOuter
WHERE Salary > (
SELECT AVG(Salary)
FROM Employee eInner
WHERE eInner.DepartmentId = eOuter.DepartmentId
)
Podkwerenda SELECT AVG(Salary) ...
jest skorelowana, ponieważ odnosi się do eOuter
wiersza Employee
z zewnętrznego zapytania.