ここでは、ORACLEデータベースにおける、SQLの整形の方法を紹介します。
・SQLの整形やメリットについて解説します
・SQLの整形ルールについて紹介します
・SQLの整形方法を紹介します
SQLの整形とは
SQLの整形とは、SQLのコードを読みやすく整えることです。
◆SQL整形を行うとき
・プログラム作成時にSQLを整形しておく
・プログラム改修時にSQLを整形して、ソースコードを読み解く
・SQLチューニング時にSQLを整形して、改善ポイントを検討する
例えば、↓のようなSQLです。実行することは出来ますが非常に見づらいです。
select * from tab1 where col1='01' and col2='AAAAA' and col3=10000 and co4 between 100 and 500 and col5='hogehoge';
SQLのインデントやスペースを整えてると↓のように見やすくなります。
SELECT
*
FROM
tab1
WHERE
col1='01'
AND col2 ='AAAAA'
AND col3 =10000
AND col4 between 100 and 500
AND col5 ='hogehoge';
SQL整形のメリット
SQL整形すると次のようなメリットがあります。
1.可読性が高くなる
2.保守性が高くなる
3.チューニングしやすい
詳しく解説していきます。
1.可読性が高くなる
SQL整形すると、非常に読みやすくなります。
例えば、あるSQLに何らか問題があると分かった場合です。SQLが読みやすいと瞬時に解決することが出来ます。
他にも、SQLの修正プランを上司や顧客に提示する時やミーティングで説明するときです。
SQLが整形されているとよりスムーズに議論を交わすことが出来ます。
もちろん、SQL自体が読めない人間には一切通じませんが。。
2.保守性が高くなる
SQLを整形しておくと、保守性が高くなります。
例えば、Aさんが作ったSQLを自分が修正するときです。
Aさんが作ったSQLがめちゃくちゃだと、読むのに時間がかかります。さらに、分かりづらい記述になっていると、修正するときにミスを起こしやすくなります。
つまり、SQL整形して読みやすい状態にしておくと、修正も速くでき、ミスも減るので保守性が上がります。
3.チューニングしやすい
SQL整形しておくと、チューニングしやすいです。
チューニングの必要な遅いSQLというのは、テーブルが数十個や条件が複雑に絡み合っていたりします。
大抵の場合、ログから取得することが多いので、SQL整形されていません。そのままでは読み解くことは不可能なので、SQL整形をします。
SQL整形することで、どのテーブルから、どんな条件で、どのカラムをSELECTしているか、といことを正確に読み解き、チューニングポイントを洗い出します。
つまり、SQLチューニングするときには、必須の作業になってきます。
SQLを整形するルール
SQLを整形するときの主なルールを私の経験を中心に紹介します。
◆SQL整形をする主なルール
1.インデントを合わせる
2.大文字小文字を使い分ける
3.結合条件と抽出条件を整理する
詳しく解説していきます。
1.インデントを合わせる
SQL整形では、インデントを合わせることで、可読性が上がります。
・例1:SELECT句
例えば、SELECT句の列名のインデントを揃えて書きます。このときインデントは半角スペース2個もしくは4個くらいで良いと思います。
SELECT
a.col1
,a.col2
,a.col3
他にも、カンマの位置を前に持ってきてインデントを揃える方法もあります。好みにもよりますが、私は上記のほうが好きですね。
SELECT
a.col1
, a.col2
, a.col3
・例2:FROM句
これもSELECT句と同じ考え方でインデントを合わせます。
ちなみにテーブルの別名ですが、個人的にはa,b,cと順番につけていくのが単純で分かりやすいと思っていますが、プロジェクトや担当システムでは、TB1,TB2のようにつけていくようにルール決めされている場合もあるので注意が必要です。
FROM
tab1 a
,tab2 b
・例3:WHERE句
こちらも考え方は同じです。インデントを合わせます。
WHERE
a.col1 = '01'
AND a.col2 = 'AAAAA'
AND a.col3 = 10000
AND a.col4 BETWEEN 100 AND 500
AND a.col5 = 'hogehoge';
カンマの位置を変えて、↓のように書くこともできます。
WHERE
a.col1 = '01'
AND a.col2 = 'AAAAA'
AND a.col3 = 10000
AND a.col4 BETWEEN 100 AND 500
AND a.col5 = 'hogehoge';
2.大文字小文字を使い分ける
2つ目が大文字と小文字を使い分けることです。
例えば、
・SELECT句やFROM句、WHERE句と言った構文:大文字
・テーブル名やカラム名:小文字
といったように分けて置くことで、どこか構文でどこがテーブル名や列名なのか、分かりやすくしまう。
・SQLサンプル
SELECT
*
FROM
tab1
WHERE
col1 ='01'
AND col2 ='AAAAA'
AND col3 =10000
AND col4 BETWEEN 100 AND 500
AND col5 ='hogehoge';
3.結合条件と抽出条件を整理する
SQL整形するときには、結合条件と抽出条件を整理するとより分かりやすくなります。
◆悪い例
次のようなSQLは、テーブル同士を結合する条件やデータを絞り込むための抽出条件が混ざっており、非常に分かりづらいです。
SELECT
a.*
FROM
tab1 a
,tab2 b
WHERE
a.col1 ='01'
AND a.col2 ='AAAAA'
AND a.col1 = b.col1
AND a.col1 = b.col2
AND a.col3 =10000
AND b.co4 BETWEEN 100 AND 500
AND a.col5 ='hogehoge';
◆良い例
次のSQLのように、抽出条件を先に並べて、結合条件は後ろに書くと読みやすくなります。
抽出条件についても、tab1のテーブルの抽出条件、tab2のテーブルの抽出条件と言う風に順番でまとめていくと、より一層分かりやすいです。
SELECT
a.*
FROM
tab1 a
,tab2 b
WHERE
a.col1 ='01'
AND a.col2 ='AAAAA'
AND a.col3 =10000
AND a.col5 ='hogehoge';
AND b.co4 BETWEEN 100 AND 500
AND a.col1 = b.col1
AND a.col1 = b.col2
(補足)プロジェクトやシステムの規約に注意
上記では、これまで私が経験してきた中で遭遇した主なルールを説明しました。
注意してもらいたいのですが、担当しているプロジェクトやシステム、運用保守のルールによって、SQLコーディング規約が定められていることが多いです。
まずはご自身の担当しているプロジェクトやシステムの規約を確認した上で整形していくことをおすすめします。
SQLを整形する方法
ここからはSQLを整形する方法を紹介します。
1.ObjectBrowserやosqleditを使う
2.手作業でSQL整形する
3.WEBサイトを使う
詳しく解説していきます。
1.ObjectBrowserやosqleditを使う
1つ目は、ObjectBrowserやosqleditを使う方法です。
ORACLEデータベースを利用している環境であれば、ObjectBrowserやosqleditがといったORACLE関連ツールが使えることが多いです。
この2つのツールには、「SQL整形」という機能があり、SQLを自動で整形してくれます。
SQL整形機能を使って思い通りの形にならないところを微修正すると手早くできます。
osqleditについては、「SQL実行ツールosqleditのオススメ設定」でおすすめの設定も紹介しているので、ぜひ参考にしてください。
2.手作業でSQL整形する
テキストエディタ(sakuraや秀丸、メモ帳)を使って、手作業でSQL整形する方法です。
ObjectBrowserやosqleditでSQL整形した後の微修正をするとき、またはObjectBrowserやosqleditが使えない状況の場合には、手作業でSQL整形します。
私がおすすめするのはサクラエディタです。「ALTキー」の次に↓矢印を押すと、複数の行をまとめて操作できます。
例えば、同時に10行の先頭に空白を入れるといった操作が可能です。
ツールを使うよりも多少時間はかかりますが、どんな環境でも使えるので、便利です。
3.WEBサイトを使う
SQL整形のできるWEBサイトを使う方法です。
個人的にはあまりおすすめできません。
SQLには、テーブル名や列名が入っています。更には、条件でしている値に’〇×会社’とか、固有名詞が入っていることがあります。
つまり、外部に漏らしてはいけない情報がSQLに含まれていることがあるからです。
多くのプロジェクトやシステムでは、外部サイトにプログラムのコードやデータを入力することは禁止されています。
ビジネスメールの英語の翻訳も禁止されていたりしますので、SQLもアウトだと思います。
もし、自己学習のために作ったSQLを整形するにはとても簡単で便利なので良いと思います。
まとめ
最後までお読み頂きありがとうございます。
私も過去にSQL整形で苦労した記憶があります。
50個とか100個のテーブルが書かれたSQLや整形すると1,000行を超えるSQLがあり、途方もない時間を要しました。整形して理解するのも大変でした。
そんなSQLの経験から「SQLのレスポンスが遅い原因3つ」や「SELECT文のSQLチューニング方法まとめ」にまとめていますので、よければぜひ参考にしてください。