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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow