Lekcja 25: CTE (Common Table Expressions) - WITH

Preview Mode

You're viewing this material in preview mode. Sign up to track your progress and access all features.

Lekcja 25: CTE (Common Table Expressions) - WITH
Required In Progress

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.