SQLフォーマッター
SQLクエリを貼り付けると、各句(SELECT、FROM、WHERE、JOIN、GROUP BYなど)が独立したインデント付きの行に整形されます。
1,122回閲覧
仕組み
1行にまとめて書かれた長いSQLクエリは、構造を目で追うのが困難です — WHERE句はどこで終わり、GROUP BYはどこから始まるのか、どのJOINがどのテーブルに属しているのか。このツールは生のSQLを受け取り、主要な句の境界ごとに別々の行へ分割します — SELECT、FROM、WHERE、JOIN系全体(INNER JOIN、LEFT JOIN、RIGHT JOIN…)、GROUP BY、ORDER BY、HAVING、UNIONです。AND/ORで連結された条件、およびON以下の結合条件は、それが属する句の1段下にインデントされ、キーワードは任意で大文字に統一されます。select id,name from users where active=1 and role='admin' order by nameのようなクエリは、SELECT、FROM、WHERE、ORDER BYがそれぞれ独立した行から始まり、AND条件がWHEREの下にインデントされたブロックになります — 情報自体は同じで、コードレビューで手書きするのと同じように配置されるだけです。
これが最も役立つのは、手作業では最も難しい場面です。複数のテーブルを結合したクエリ、WHERE句の中に埋め込まれたサブクエリ、複数の分岐を持つCASE式などです。一貫したインデントがあるからこそ、レビュアーは1文字ずつ読む代わりに、結合条件の抜けや括弧の位置ミスを一目で見つけられます。
知っておくべきこと
これはフォーマッターであり、検証ツールではありません — 認識している一定のキーワード集合の周りの空白と改行を並べ替えるだけで、クエリを構文木に解析することも、データベースに対して実行することも一切ありません。真に方言を理解する検証ツールを作るには、SQLの各バリアントごとに完全なパーサーが必要になります。MySQL、PostgreSQL、SQL Server、SQLiteは識別子の引用方法、日付関数、さらにはどの文が合法かという点まで細部が異なるためです。そうした差異を検証しているふりをする表面的なブラウザ内チェックは、誤った安心感を生むだけです。整形結果が変に見える場合、たいてい入力の側にすでにタイプミスや括弧の不一致があります。このツールはそれを指摘するのではなく、その周りに合わせて整形します。
純粋にテキストのレイアウトだけを扱うため、本番環境のクエリに対して実行しても安全です。識別子、文字列リテラル、数値、演算子は書き換えられたり、追加されたり、削除されたりすることは一切ありません — 変わるのは空白と、任意のキーワードの大文字小文字だけです。どこにも送信されず、実行もされません。クエリはブラウザの外に一切出ません。
よくある質問
このツールは自分のSQLが正しいかどうか教えてくれますか?
いいえ — 意図的にそうしています。本当のSQL検証はどのデータベースを対象にするかに依存し(MySQL、PostgreSQL、SQL Serverはそれぞれ異なる構文の癖があります)、軽量なブラウザツールではそれを正直に行うことはできません。このツールはレイアウトを整形するだけで、クエリが有効か無効かを判断することはありません。
クエリが壊れることはありますか?
いいえ — 改行とインデントを挿入するだけで、任意でキーワードを大文字にします。SQLのテキスト自体(識別子、値、演算子)は一切変更されません。
これはどのSQL方言(MySQL、PostgreSQL、SQL Server)にも使えますか?
レイアウトのレベルでは使えます — このフォーマッターが認識する句のキーワード(SELECT、FROM、WHERE、JOIN、GROUP BYなど)は、事実上あらゆるSQL方言に共通しています。行わないのは、方言固有の構文、関数、引用ルールの検証です。それらはエンジンごとに十分異なるため、実際のデータベースに対してクエリを実行することでしか正しさを確認できません。
サブクエリやCTE(WITH句)はどうなりますか?
ネストしたSELECT文やWITH(共通テーブル式)ブロックも、同じ句分割ルールを再帰的に適用して整形されます。そのため内側のクエリは、外側のクエリの中で独自のインデント構造を持ちます — これはまさに整形が最も役立つ場面です。深くネストしたクエリほど1行としては読みにくいからです。
整形によってクエリの動作が変わることはありますか?
いいえ。変更されるのは空白、改行、そして任意のキーワードの大文字小文字だけです。すべての識別子、リテラル、比較、演算子は書かれたとおりに残るため、整形後のクエリは元のクエリと機能的に完全に同一です — どちらを実行しても同じ結果セットが得られます。
関連ツール
問題を報告
SQLフォーマッター
コメント
まだコメントはありません — 最初のコメントを書いてみましょう!