Menu
日本語

SQL フォーマッタ

構文を意識したインデントで SQL を整形。

最終更新

キーワード
インデント
入力SQL を貼り付けて開始
出力
整形された SQL がここに表示されます — 再インデント、整列、コピーをワンクリックで。

SQLフォーマッターとは?

SQLフォーマッターは、ぎっしり詰まった一行SQLやORMが吐き出した自動生成のSQLを受け取り、インデントと改行を統一した形に書き直します。コードレビューでJOINを確認したい、フィルターをデバッグしたい、ORMの出力を整理したい、チケットやドキュメントにSQLを貼りたい、クエリプランを順番に追いたい――そんな場面で頻繁に出番があります。

整形してもクエリの「動作」は変わりません。変わるのは「人間にとっての読みやすさ」だけです。レイアウトが揃うと、SELECTFROMJOINWHEREGROUP BYHAVINGORDER BY の関係性がグッと把握しやすくなります。サブクエリやCTEが入り混じった複雑なクエリほど効果は大きいです。

SQLには「方言」がたくさんあります。PostgreSQL、MySQL、SQLite、T-SQL(Microsoft SQL Server)、Oracle、BigQueryなど、それぞれが標準SQLを独自に拡張しています。しっかりしたフォーマッターは選択した方言を理解しているので、ベンダー固有の構文を壊さずに整形してくれます。

SQLを整形しながら身につくこと

  • SQLの各句にはそれぞれ役割があります。SELECT は列の選択、FROM はテーブル指定、WHERE は行のフィルタリング、GROUP BY は集約、ORDER BY は並び替えです。
  • 適切なインデントは、一行SQLでは見えなかったネストしたクエリ、JOIN、条件の構造をはっきり浮かび上がらせます。
  • 方言は無視できません。RETURNINGLIMITTOP、識別子のクォート([col]"col" など)はDB間で互換性がありません。

SQLクエリを整形する手順

  1. クエリを貼り付ける

    入力欄にSQLを貼り付けます。一行のもの、ORMが生成したもの、途中まで整形済みのもの、どれでもOKです。

  2. 方言を選ぶ

    PostgreSQL、MySQL、SQLite、T-SQLから選択。これで LIMITTOPRETURNING などベンダー固有のキーワードが正しく扱われます。

  3. スタイルを設定

    キーワードの大文字/小文字(大文字が一般的)と、インデント幅(2か4スペース)を選びます。多くのチームは「キーワード大文字+2スペース」が定番です。

  4. 整形結果を読む

    各句が独立した行に並び、JOINは揃い、サブクエリにはインデントが入ります。コメントもそのまま残ります。

  5. プロジェクトに戻して使う

    整形後のクエリをマイグレーションファイル、ORMの生クエリ、BIツールなどに貼り戻してください。処理はすべてブラウザ内で完結しています。

SQL句クイックリファレンス

SELECT クエリの95%で登場する句を、概念上の処理順に並べました。公式ドキュメント: PostgreSQL SELECTMySQL SELECT

役割
SELECT返す列や式を指定SELECT id, name
FROM対象テーブルを指定FROM users
JOIN ... ON別テーブルの行を結合JOIN orders ON orders.user_id = users.id
WHERE集約前に行を絞り込むWHERE active = true
GROUP BY同じ値を持つ行をまとめて集約GROUP BY country
HAVING集約後のグループを絞り込むHAVING COUNT(*) > 10
ORDER BY結果を並び替えORDER BY created_at DESC
LIMIT / OFFSET結果のページングLIMIT 20 OFFSET 40
WITH ... AS共通テーブル式(CTE)でサブクエリに名前を付けるWITH active AS (...)

試してみたいSQLの例

シンプルなクエリを整形

入力
select id,name from users where active=true order by created_at desc limit 10
整形後
SELECT  id,  nameFROM usersWHERE active = trueORDER BY created_at DESCLIMIT 10;

各句が別々の行に分かれ、列リストがインデントされました。これだけでコードレビューでの読みやすさが10倍くらい違ってきます。

JOINを読み解く

入力
select u.name,o.total from users u join orders o on o.user_id=u.id where o.total>100
整形後
SELECT  u.name,  o.totalFROM users uJOIN orders o ON o.user_id = u.idWHERE o.total > 100;

テーブルにエイリアス(users uorders o)を付けると列リストがすっきりします。JOIN ... ON の行があることで、テーブル同士の関係がはっきり見えるようになります。

ネストしたサブクエリを読む

入力
select * from users where id in (select user_id from enrollments where course_id=5)
整形後
SELECT *FROM usersWHERE id IN (  SELECT user_id  FROM enrollments  WHERE course_id = 5);

内側のクエリをインデントすると依存関係が明確になります。構造が見えるようになると、サブクエリの多くは JOIN やCTEで書き直せることに気づくはずです。

SQL整形でよくある落とし穴

  • 「整形済みSQL」と「正しいSQL」を混同しないこと。整形が変えるのは見た目だけで、意味は変わりません。きれいに整っていても、結果が間違っていることはあります。
  • 整形のついでにクエリを修正してしまい、再テストを忘れるパターン。
  • 方言を意識しないこと。PostgreSQLの LIMIT 10、T-SQLの TOP 10、標準SQLの FETCH FIRST 10 ROWS ONLY はどれも同じ意味ですが、書き方が違います。

SQLフォーマッターに関するFAQ

SQLを整形すると結果が変わりますか?
変わりません。整形が触るのは空白と大文字小文字だけです。データベースはどちらの書き方でも同じクエリプランにパースするので、返ってくる行はまったく同じになります。
なぜSQLを整形するのですか?
読みやすいSQLはデバッグもコードレビューも教えるのもメンテナンスも楽になります。JOINやサブクエリ、CTE、ウィンドウ関数が絡む複雑なクエリほど効果絶大です。
SQLの「方言」とは?
方言とは、標準SQLに対して各データベース固有の拡張がなされたものを指します。PostgreSQL、MySQL、SQLite、T-SQL(SQL Server)、Oracle、BigQueryはそれぞれ標準SQLにはない独自の構文を持っています。
壊れたクエリをフォーマッターで直せますか?
構造化された形で出力し直すことで構文上の問題に気づきやすくはなりますが、フォーマッターはあなたのスキーマを理解しているわけではないので、論理的に正しいかどうかまでは保証できません。
SQLキーワードは大文字にすべき?
多くのスタイルガイドがキーワード(SELECTFROMWHERE)は大文字、識別子は小文字を推奨しています。視覚的なコントラストでクエリの構造が際立つからです。とにかくスタイルを一つに決めて、最後まで揃えるのが一番大事です。

詳しく見る

その他の開発者ツール

Coddyでコードを学ぼう

始める