読み方 : ウィズく
WITH句

サブクエリ(副問い合わせ)を何層も入れ子にする書き方は、処理の意図を表現できる一方、構造が深くなるほど読み取りにくくなるという問題があった。WITH句を使うと、その入れ子部分に事前に名前を付けて独立した部品のように定義できるため、記述ミスを防ぎやすい。
複数の共通テーブル式(CTE:Common Table Expressions)を続けて定義することもでき、後に定義したものは前に定義したものを参照できる。これにより、集計や抽出、結合といった複数の段階から成る処理を、上から下へ順番に読み進められる形で記述でき、同じ問い合わせを繰り返し書く必要もなくなる。
WITH句で定義した表は、一時テーブルのようにデータベース内に保存されるものではなく、続く一つのSQL文の実行中だけ存在する。処理が終わると定義も消えるため、後続のSQL文から参照することはできない。テーブルやビューを作成するほどではない場面で、一時的な処理結果を扱いたいときに広く利用されている。
多くのデータベース製品では、定義した表を自分自身の中で呼び出す再帰的な処理にも対応している。組織図やフォルダ階層、部品表といった、上下関係を持つデータを繰り返したどる処理をSQLだけで記述できるため、階層構造を扱う場面で力を発揮する。
WITH句はSQL99規格で標準化され、その後、主要なリレーショナルデータベース管理システム(RDBMS)で広く採用された。ただし、実行計画や最適化の扱いは製品やバージョンによって異なるため、複雑な問い合わせでは処理性能が想定通りにならない場合もあり、実行計画を確認しながら利用することがある。
(2026.7.18更新)