共通テーブル式(CTE)
WITH で定義する、1つのクエリの間だけ存在する名前付きの一時的な結果セット。深く入れ子になったサブクエリの代わりに、名前を付けた段階に分けることで複雑なクエリを読みやすくする。
構文は WITH active AS (SELECT ... WHERE active), totals AS (SELECT ... FROM active ...) SELECT * FROM totals のようになる。利点は、上から下へパイプラインのように読めること、同じCTEを複数回参照できること、そして再帰だ。再帰CTE(WITH RECURSIVE)は組織図、コメントスレッド、最短経路のような階層やグラフを扱える。性能面では、PostgreSQL 12未満のCTEは「最適化の壁」(常に実体化される)で、サブクエリより遅くなることがあった。12以降は可能なら展開され、MATERIALIZED/NOT MATERIALIZED で制御できる。SQL:1999で標準化され、ウィンドウ関数とともに読みやすい分析SQLの背骨となっている。