SQLクエリの整形(フォーマット)ルールと保守性を高める書き方

SQL データベース DevOps 開発効率

長文SQLや複雑なサブクエリ・JOINの視認性と保守性を高めるSQLフォーマットルールおよび自動整形手法です。

1. オンライン SQL フォーマッター

ワンラインに圧縮されたSQLや未整形のクエリをブラウザ内で綺麗に整形・インデント調整します。

🗃️ この場でSQLを整形する

  

2. 整形ビフォー・アフター

❌ 整形前(1行に詰め込まれた読みにくいSQL)

select u.id,u.name,o.total,p.name from users u join orders o on u.id=o.user_id join products p on o.product_id=p.id where o.status='completed' and o.total>=10000 order by o.created_at desc limit 20;

✅ 整形後(構文木が一目で把握できる構造)

SELECT
  u.id,
  u.name,
  o.total,
  p.name
FROM
  users u
  JOIN orders o ON u.id = o.user_id
  JOIN products p ON o.product_id = p.id
WHERE
  o.status = 'completed'
  AND o.total >= 10000
ORDER BY
  o.created_at DESC
LIMIT 20;

3. 実務で差がつく3大 SQL スタイリング原則

① 予約語(キーワード)は大文字表記

SELECT, FROM, WHERE, LEFT JOIN, GROUP BY, ORDER BY などのキーワードをすべて大文字にすることで、テーブル名やカラム名(小文字)との視覚的コントラストが明確になります。

② カンマファースト(Leading Comma)スタイルの活用

SELECTの対象カラムが多い場合、カンマを各行の先頭に置くスタイルの採用も有効です。

SELECT
    u.id
  , u.name
  , u.email
  , o.created_at
FROM users u
  • メリット: 最終行のカンマ消し忘れエラーが発生せず、Gitのdiffでどのカラムが追加・削除されたかが1行単位で明確になります。

③ テーブル別名の明示

users uorders o のように短いエイリアスを定義し、全カラム選択時に u.ido.total のように所属テーブルを必ず指定することで、同名カラム(created_at 等)の曖昧さ回避と結合エラーを予防できます。


4. CLI / CIでの自動整形ツール

  • Node.js (npm): sql-formatter パッケージを使用
  • Python (Linter/Formatter): SQLFluff (sqlfluff format query.sql --dialect postgres)