【SQL整形】ルールや方法まとめ:サンプル多数あり


ここでは、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チューニング方法まとめ」にまとめていますので、よければぜひ参考にしてください。