IT系フリーランスの技術備忘録

日々の業務で学んだ事の覚書やフィードバックなど。たまに関係ない記事も。

SQL整形(SQL崩し)の方法調査備忘録

システム開発をしていると、ロジックに埋め込まれた複雑なSQLを読み解くのに、見やすく整形したい時ってありませんか?
私は以前、そんな時は、ちまちまと改行とタブを駆使し、毎回自力で整形していましたが、ある時、いろいろな方法で「SQL整形」という機能が存在し、それを使えばSQL整形はサクッと出来ることに気が付きました。

けれども、いざSQL整形をしようと思うと、SQL整形を行う手段はあまりにも多く、また、方法によっては、いまいち綺麗に整形してくれない場合も多く、あれこれと試すのに時間を使ってしまった為、筆者が悩んだ挙句にたどり着いた結論とでもいうべきお勧めの整形方法をご紹介させて頂きます。

サクッとすぐにWeb上でSQL整形をしたい方

SQL 整形 For WEB
atl2.net


使い方は非常に簡単で、上記のリンクを開いたら、整形したいSQLを入力して、「整形」ボタンを押すだけです。
設定等は特に変える必要はないかなぁという気がします。
一度「整形」ボタンを押してみて、細かい点が気に入らなければいろいろといじってみましょう。

サクラエディタでのSQL整形

SQLの整形 ~サクラエディタ マクロ版~
http://d.hatena.ne.jp/izoc/20090724/1248397863d.hatena.ne.jp


筆者が開発しているときは、初めはWebが使える環境だったんですが、途中で使えない環境に移ってしまった時があるんです。
その時に、サクラエディタでのマクロは無いかと探し、たくさん見つかったのですが、一番使いやすかったのはこれかなぁと。

サクラエディタのマクロでSQL整形をしたい場合は、上記のリンク先にサクラエディタマクロ用のソースコードをコピペして使うのが便利です。

>>サクラエディタでのマクロの使い方

データベース開発環境でのSQL整形

最近はデータベースを使う場合は、GUIの開発環境を使う場合も多いかと思います。
主要なデータベース開発環境には、たいていはSQLの整形機能はついています。
なので、データベース開発環境が使える方は、お使いのソフトのSQL整形機能を使ってみて、整形方法としてそれで問題が無いのであれば、それを使うのが手っ取り早くていいでしょうね。

【主要なデータベース開発環境】
A5:SQL Mk-2
SQL DeveloperOracle社の提供するデータベース開発環境。Oracle限定だったかなぁ。

など。

お勧めはA5:SQL Mk-2かなぁ。
SQL整形だけでなくて、データベースの値をEXCELに出力する際は一番見やすく表示してくれるかなぁと。


>>A5:SQL Mk-2でSQL整形の方法

SQL整形機能の実力を試すのに使えるサンプルSQL

select distinct a . *  -- 1行コメント
,func1(a . aaa+1*2*3/4),"a"."aaa"||'aaa'+1,func2(func3
( 123 )),( 1+( 2*3 ) ),@@SQLSERVER_ENV as"aaa",case a  . bbb when '1' then 
'一' when '2' then '二' else '' end ,   case when a. fff = 'ccc' then 'O' else 
'X' end,case a  .fff when '1' then case when a. ggg = 'ccc' then 'O' else 'X' 
end when '2' then (case when a. hhh = 'ccc' then 'O' else 'X' end) else '' end
from TB_NAME a inner join (select カラム1,カラム2,カラム3 from テーブル名 where
カラム1   != カラム2) テ on a.aaa=テ.カラム1 where a . aaa=@aaa and テ . カラム2 = 
:bbb and a.ccc >= 3 and    a.ddd <= 4 and a.eee != 5 and `a` . `MySQL Identifier  `=333 
and [a] . [SQLServer Identifier  ]=2.2 and(1=1 or (2=2)) union select * from (select * 
from TB_NAME4)

SQL整形でどのように整形されるのか、手元に手ごろなSQLが無い場合は、上記のサンプルSQLを実験サンプル用にお使いください。
見るのも嫌になってくる複雑なSQLSQL整形でどのように整形されるのか?
参考に出来ると思います。