「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。目下、データ分析・語学に力点を置いています。

MENU

SQL中級者になる!(その12/12)

初めに

 データベースとSQLは現在のデータサイエンスに必須な知識・スキルの1つ。その基礎を

power-of-awareness.com

を基に学んできた。
 この知識をより昇華させてSQL中級者になりたい!ため、同じ著者の

を参考に、更なるSQLの知識を拡充していこう。

12. SQLプログラミング作法

 \mathrm{SQL}においても読みやすく、分かりやすく書く努力は必要である。

12.1 テーブル設計

12.1.1 名前と意味

 リレーショナルデータベースがシステムの世界で支持を得たのは、アドレスを無意味なものとして追放し、名前を残した点にある。そのため、列、テーブル、インデックス、制約は名が体を表すような具体的な名前を付ける。
 \mathrm{SQL}では、①アルファベット②数字③アンダースコアが許容される。また標準\mathrm{SQL}は先頭を文字で始めることを要請する。

12.1.2 属性と列

 列に入るデータは複数の意味を持たせてはならない。データベースでは、列はある実体の「属性」であり、変更してはならないからである。

12.2 コーディングの指針

12.2.1 コメント

 \mathrm{SQL}ではコメントは積極的に残した方が良い。

  • \mathrm{SQL}は宣言型言語であり、同じ処理を記述するにも非常に凝縮されたコードに多くの処理を詰める。そのためコードを見てもその意図が分かりづらいため
  • \mathrm{SQL}では段落的な実行デバッグが殆ど出来ないため
-- 1行コメントはハイフンを連続で2つ

/*
複数行に渡るコメントは、そのコメントを/*(コメント)*/という形で書く
*/

SELECT *
FROM TMP
-- SQLではコードの途中に空行を含むことができないものの、このようにコメントを挟むことは可能
WHERE TMP.A =''

SELECT * -- またこのようにその行の最後にコメントを付記することも可能
FROM TMP 
WHERE TMP.A=''
12.2.2 インデント、スペース

 インデント、スペースをしっかりと付けると、可読性が抜群に向上するため。

-- 適度にインデントを加えた良い見本
SELECT col_1,
             col_2,col_3,
            COUNT(*)
   FROM tbl_A
 WHERE col_1 = 'a'
     AND col_2 = ( SELECT MAX(col_2)
                            FROM tbl_B
                          WHERE col_3 = 100 )
GROUP BY col_1,
                 col_2,
                 col_3

12.3 大文字と小文字

 プログラミングでも重要な語句は大文字、重要でない語句は小文字で書く。
 \mathrm{SQL}では、予約語は大文字、列名やテーブル名は小文字にするという共通理解がかなりの程度成立している。

12.3.1 カンマ

 カンマは要素と要素の中間に置く方が望ましい。こうすることで、ある1行を除いてもエラーにならない、エディタでの編集がやりやすくなるためである。

-- カンマの望ましい打ち方
SELECT col_1
            ,col_2
      ,col_3
            ,COUNT(*)
   FROM tbl_A
 WHERE col_1 = 'a'
     AND col_2 = ( SELECT MAX(col_2)
                            FROM tbl_B
                          WHERE col_3 = 100 )
GROUP BY col_1
                ,col_2
                ,col_3
12.3.2 ワイルドカード

 論理的に不要な行が含まれ、また可読性が落ちるため、ワイルドカードは避けた方が望ましい。

12.3.3 ORDER BYで列番号を避ける

 可読性が悪くなり、保守性の観点から避けるべきである。

12.3.4 標準SQLを用いる

 \mathrm{DBMS}間のコード移植性が落ちるため、標準\mathrm{SQL}で書くこと。

  • 実装依存の関数を避ける
  • 結合には標準の構文を用いる
  • 外部結合では一覧性が増すため、左外部結合が望ましい
  • 相関サブクエリは、パフォーマンスおよび可読性が低く、デバッグが大変なため、避ける
  • \mathrm{SQL}の実行順序((FROM→WHERE→GROUP BY→HAVING→SELECT(→ORDER BY)))を考慮して、\mathrm{FROM}句から書く

12.4 まとめ

 読みにくいコードは誰にとっても望ましくない。

プライバシーポリシー お問い合わせ