SQLの副問い合わせはWITH句!複数条件でも一時テーブル保存で簡単

SQLの副問い合わせはWITH句。一時的な仮テーブル保存で 簡単にサブクエリができる

SQLの中にSQLを作成するサブクエリ(副問い合わせ)はWITH構文を利用するのが簡単です。結合テーブル数が増えるほど、SQLは複雑になりますが、WITHを使うことで非常にわかりやすくなります。第3者が見た時は久しぶりに自分のコードを見た時に理解が早いので、保守性も上がります。

本記事では、サブクエリの代替になるWITH構文について例を交えて解説いたします。

目次

SQLのWITH句を解説

WITH句はSQL実行結果を仮テーブルに保存できる機能(親子丼の例で解説)

SQL実施環境でSQL実行結果を格納する仮データテーブルを好きな名前で保存することができます。例えば、鶏から親子丼を作る時に鶏から卵に加工した仮テーブルを卵という名前で保存できます。(鶏肉も同様)後は、SQLのJOINをする時に仮テーブル名を指定すれば呼び出すことができます。

SQLのWITH句と仮テーブルの解説図

実際に1つのデータから複数の仮テーブルを作成して集計するSQLをご紹介します。イメージは下記

SQLでwith構文を用いた例

WITH句を利用したSQL構文例に使うサンプルファイル

下記データを例にコードをご紹介いたします。

■商品情報ファイル1

カテゴリ商品名原価個数在庫金額販売開始日販売終了日
1カビキラー1158111582025/01/202025/03/20

元テーブル(商品情報ファイル1)から2つの仮テーブルを作成する例

例えば、カテゴリ毎の在庫金額の合計値SQLは下記 ※実際の項目名を英文字ですがここでは日本語で解説

①カテゴリ毎の在庫金額合計

select
カテゴリ,在庫金額 from 商品情報ファイル
where 販売開始日 = '2025/01/20';

②カテゴリ毎の個数合計

select
カテゴリ,個数 from 商品情報ファイル
where 販売開始日 = '2025/01/20';

WITH利用で2つの仮テーブルを作成する例文

上記①②の構文をwith句を用いて作成します。

with句の基本
  1. 最初にwith 一時保存したい仮テーブル名 as()として()内にSQLを書く(仮テーブル1)
  2. 2個目以降の仮テーブルでwithを書く必要はない。その代わり事前にカンマを書く(仮テーブル2)
  3. 上記1,2を結合時は仮テーブル名を用いてjoin
SQLでwith構文を用いた例

WITHを利用したコード例(実際のサンプルデータ利用例)

上記①②をWITH句を利用して集計すると下記SQLになります。

with table_1 as (

select
カテゴリ,在庫金額 from 商品情報ファイル
where 販売開始日 = '2025/01/20'),

table_2 as (
カテゴリ,個数 from 商品情報ファイル
where 販売開始日 = '2025/01/20')

select
table_1 .カテゴリ,在庫金額,個数 
from table_1
inner join table_2 
on table_1 .カテゴリ = table_2 .カテゴリ

()とカンマの位置は漏れや誤記が多いので、うまくいかない場合は確認しましょう。

今回は2つのテーブルを結合するパターンでご紹介しましたが、3つ以上でも同じ処理を繰り返せば大丈夫です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

著者:ブロガー2つ(につ)

■サイト設立目的
人海戦術の時代からテクノロジー活用による自動化促進の時代に変化。テクノロジー活用を促進するための情報共有やテクノロジー支援を行います。

目次