1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

読みやすいSQLとは

Posted at

はじめに

どのように書けばSQLは読みやすくなるのか、試行錯誤しています。
ある程度まとまったので、記事にしてみました。

SQLスタイルガイドが私のイメージに近かったので、参考にしています。

予約語を大文字にするか、小文字にするか…

大文字、小文字問題は未だ解決していない問題ですが、
目的はテーブル名、フィールド名と見分けやすくすることです。

オブジェクトの命名規則は殆どが以下のケースに当てはまると思います。

  • パスカルケース(先頭大文字で単語の先頭が大文字)
  • キャメルケース(先頭小文字で単語の先頭が大文字)
  • スネークケース(アンダーバーで小文字を結合)
  • コンスタントケース(アンダーバーで大文字を結合)
  • 日本語(SQL ServerやAccessで割と見かける)

コンスタントケース以外は名称に小文字が多くなるので、予約語は大文字で書いています。

カンマは先頭か末尾か…

Pythonなどのプログラムではカンマは末尾に付けるように言われていますが、
フィールドの区切りが見分けやすくなるので、先頭に付けています。

どこを揃えるか…

「SELECT」の後ろのスペースの位置を揃えています。
副産物として各列の1文字目がスペースになります。
各列を文字連結してもエラーにならないので、ソースコードに組み込む場合にも有効です。

また、「JOIN」の後ろのスペースと「ON」の後ろのスペースを揃えています。
これにより、複数のテーブルを結合した時に見やすくなります。

サンプル

SQLServer
SELECT CASE obj.type
         WHEN 'U' THEN
           'テーブル'
         WHEN 'V' THEN
           'ビュー'
         ELSE
           'その他'
       END AS 種類
     , obj.name AS オブジェクト名
     , col.name AS カラム名
     , type_name(col.user_type_id) AS 
  FROM sys.objects AS obj
 INNER JOIN sys.columns AS col
         ON obj.object_id = col.object_id
 WHERE obj.type IN ('U','V')
   AND col.is_nullable = 1
 ORDER BY obj.type
        , obj.object_id
        , col.column_id
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?