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 u や orders o のように短いエイリアスを定義し、全カラム選択時に u.id や o.total のように所属テーブルを必ず指定することで、同名カラム(created_at 等)の曖昧さ回避と結合エラーを予防できます。
4. CLI / CIでの自動整形ツール
- Node.js (npm):
sql-formatterパッケージを使用 - Python (Linter/Formatter):
SQLFluff(sqlfluff format query.sql --dialect postgres)