Czym jest CTE? (Tymczasowy, nazwany zbiór wyników)
CTE (Wspólne Wyrażenie Tabelaryczne) to nowoczesna i znacznie bardziej czytelna alternatywa dla podzapytań w klauzuli FROM (które widzieliśmy w Lekcji 24). CTE pozwala na zdefiniowanie jednego (lub więcej) nazwanych, tymczasowych zestawów wyników — można o nich myśleć jak o "tymczasowych widokach" — które istnieją tylko na czas trwania jednego, głównego zapytania.
Składnia
Każde zapytanie z CTE zaczyna się od słowa kluczowego WITH. Ogólna składnia wygląda tak:
SQL
WITH [nazwa_cte] AS (
-- Tutaj umieszczamy treść podzapytania
SELECT... FROM...
)
-- Dopiero tutaj zaczyna się główne zapytanie,
-- które korzysta ze zdefiniowanego wyżej CTE
SELECT... FROM [nazwa_cte];
Jak CTE poprawiają czytelność skomplikowanych zapytań
CTE rozwiązują problem "choinki" lub "matrioszki" zagnieżdżonych podzapytań (jak w Lekcji 24). Pozwalają na rozbicie skomplikowanej logiki na linearne, czytelne kroki.
Porównanie:
Wersja z podzapytaniem w FROM (trudna do czytania):
SELECT AVG(LiczbaUczniow)
FROM (
SELECT COUNT(*) AS LiczbaUczniow
FROM Uczniowie
GROUP BY ID_Klasy
) AS StatystykiKlas;
Ta sama logika zapisana jako CTE (czytelna, krok po kroku):
-- Krok 1: Zdefiniuj CTE o nazwie 'StatystykiKlas'
WITH StatystykiKlas AS (
SELECT
ID_Klasy,
COUNT(*) AS LiczbaUczniow
FROM Uczniowie
GROUP BY ID_Klasy
)
-- Krok 2: Odpytaj to CTE, jakby było zwykłą tabelą
SELECT
AVG(LiczbaUczniow) AS SredniaLiczbaUczniowWKlasie
FROM StatystykiKlas;
Można definiować wiele CTE, jedno po drugim, np. WITH cte1 AS (...), cte2 AS (...) SELECT..., budując w ten sposób bardzo skomplikowany "potok" przetwarzania danych w przejrzysty sposób.