CTE (Common Table Expression)
Nazwany, tymczasowy zbiór wyników definiowany przez WITH, istniejący tylko przez czas jednego zapytania. Upraszcza złożone zapytania, dzieląc je na nazwane kroki zamiast głęboko zagnieżdżonych podzapytań.
Składnia: WITH active AS (SELECT ... WHERE active), totals AS (SELECT ... FROM active ...) SELECT * FROM totals. Zalety: czytelność (czyta się od góry do dołu jak potok), ponowne użycie (to samo CTE można wielokrotnie przywołać) i rekurencja. Rekurencyjne CTE (WITH RECURSIVE) obsługuje hierarchie i grafy — drzewa organizacyjne, wątki komentarzy, najkrótsze ścieżki. Uwaga o wydajności: w starszym PostgreSQL (<12) CTE było „płotem optymalizacji” (zawsze materializowane) → mogło być wolniejsze niż podzapytanie; od wersji 12 są w miarę możliwości wstawiane inline (kontrolują to MATERIALIZED/NOT MATERIALIZED). Standard SQL:1999. Razem z funkcjami okna to kręgosłup czytelnego analitycznego SQL-a.