【SQL】WITH句を使ってSQLの見通しを良くしよう【SQL Server】

【SQL】WITH句を使ってSQLの見通しを良くしよう【SQL Server】

はじめに

コジマです。

WITH句というものがあります。
VIEWのように仮想的なテーブルをつくることができます。

WITH句には

  • 繰り返し参照できる
  • SQLのネストを減らせる

という利点があります。

いっぱいJOINしたり副問合せするとどんどん複雑になっていきますよね。
インデント増えると読みづらくなっていきます。

WITH句を使って少ないネストでの記載を実現できます。

動作確認はSQL Serverで取っています。
他のRDBでは試してないのでそのまま使えないかもしれません。

table_1とそのバックアップテーブルtable_1_bkの差分の件数を知りたいときに
WITHなしの場合は以下のように書くことができます。

SELECT count(*)
FROM (
  SELECT * FROM table_1
  EXCEPT
  SELECT * FROM table_1_bk
) diff_table;

WITHをつかうと

WITH diff_table AS (
  SELECT * FROM table_1
  EXCEPT
  SELECT * FROM table_1_bk
)
-- ここが本文
SELECT count(*) FROM diff_table;

のように書けます。

簡単のために例はシンプルですが、
もっと複雑なSQLを書こうとした場合に可読性を上げられることは想像つくと思います。

実際SQLを解析するときに
コメントで「ここが本文」と書いたところだけ注力して読めばいいわけです。

さいごに

関連の記事だとこんなのがあります。よかったら併せて読んでくれたら嬉しいです。
【SQL】テーブルを複製してバックアップを取る【SQL Server】
【SQL】EXCEPTでテーブルの差分を取得する【SQL Server】

この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!

もっと学びたい人はこちら

SQLをもっと学びたいエンジニアのためにおすすめのUdemy講座を紹介いたします!

SQLはじめましての人!まずあなたの3時間をください。
この講座でまずこれだけは覚えてくれ!という内容をしっかり押さえることができます。
SQLはプログラミング言語がなんであれ、システム開発に必要になります。
この講座を見て最低限必要な知識を身に着けて実践で貢献できるようになりましょう!
3時間で学ぶ SQL ・データベース 超入門【丁寧な解説+演習問題で SQL データ抽出の基本が身につく】標準 SQL

データベースの設計について学べる講座です。
設計について学べる教材は少ないので、実務でデータベースを触る人にはとてもうれしい講座です。
データベース講座1:データベース論理設計

ちょっとニッチに感じるかもしれませんが、SQLのインデックスを学ぶことができる講座です。
よい性能でSQLを運用するためにはインデックスの理解は必要不可欠です。
CRUD書いて満足するエンジニアを出し抜きましょう。
SQLServerのインデックスを理解して検索を速くする方法

気になった人はぜひ見てみてくださいね!

以上、コジマでした。


SQLカテゴリの最新記事