はじめに
コジマです。
WITH句というものがあります。
VIEWのように仮想的なテーブルをつくることができます。
WITH句には
- 繰り返し参照できる
- SQLのネストを減らせる
という利点があります。
いっぱいJOINしたり副問合せするとどんどん複雑になっていきますよね。
インデント増えると読みづらくなっていきます。
WITH句を使って少ないネストでの記載を実現できます。
動作確認はSQL Serverで取っています。
他のRDBでは試してないのでそのまま使えないかもしれません。
table_1とそのバックアップテーブルtable_1_bkの差分の件数を知りたいときに
WITHなしの場合は以下のように書くことができます。
1 2 3 4 5 6 |
SELECT count(*) FROM ( SELECT * FROM table_1 EXCEPT SELECT * FROM table_1_bk ) diff_table; |
WITHをつかうと
1 2 3 4 5 6 7 |
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)を
フォローしてくれたらうれしいです!
以上、コジマでした。