BigQuery では WITH 句がサポートされています。この記事では WITH 句の使い方について説明していきます。
WITH 句とは
WITH 句とは、クエリ内で新たな参照テーブルを作成し、そのテーブルを利用したクエリを記述することができる SQL の構文です。
サブクエリ(副問い合わせ)との違い
サブクエリ(副問い合わせ)とは、クエリの中に入れ子としてクエリを作成することです。WITH 句はサブクエリと性質が似通っていますが、サブクエリと異なり、WITH 句で作成した参照テーブルはクエリ内で何度も使い回すことができます。以下にサブクエリと WITH 句の簡単な例を紹介します。
テーブル
今回は以下の「employees」テーブルと「department」テーブルを用います。
employees テーブル
id
name
department_id
1
John
1
2
Tom
2
3
Nancy
3
departments テーブル
id
name
1
Sales
2
Marketing
3
Nancy
employees テーブルの id が 2 の人の名前、部署名を返すクエリをサブクエリ、WITH 句をそれぞれ用いて記述します。
サブクエリを用いた場合
SELECT t.*
FROM (
SELECT
e.name,
d.name AS department
FROM employees e
JOIN departments d ON e.department_id = d.id
) AS t
WHERE t.id = 2;
+------------+--------------+
| name | department |
+------------+--------------+
| Tom | Marketing |
+------------+--------------+
WITH 句を用いた場合
WITH t AS (
SELECT
e.name,
d.name AS department
FROM employees e
JOIN departments d ON e.department_id = d.id
),
SELECT *
FROM t
WHERE t.id = 2;
+------------+--------------+
| name | department |
+------------+--------------+
| Tom | Marketing |
+------------+--------------+
今回の例はシンプルなので WITH 句の恩恵を受けづらいですが、複雑なクエリになってくるほど、 WITH 句による可読性の向上という恩恵を受けやすいです。