SQL整形
SQLクエリをインデントして読みやすくします。すべてブラウザ内で処理され、何も実行されず、どのデータベースにも接続しません。
すべてブラウザ内で動作します。アップロード、記録、保存は一切行いません。
1行の長い文字列で届いたクエリを貼り付けて、きちんと読める形にしましょう。整形はブラウザ内で行われ、SQL文、テーブル名、WHERE句の値がお使いのマシンの外に出ることはありません。
仕組み
SQL文を文字列、コメント、引用符で囲まれた名前、数値、単語、演算子といった部品に分け、その並びをもとに改行とインデントを決めて書き直します。句は新しい行から始まり、条件は属する句の下にそろえられ、サブクエリは括弧の内側にインデントされます。
各部品は届いたとおりに正確に書き直されます。変わりうるのは部品の間の空白と、ツールが認識する単語の大文字・小文字だけです。つまり、出てくるSQL文は入ってきたSQL文と同じです。この性質は目視に任せるのではなく、テストで保証しています。
それ自体がSQL文を含む括弧は複数行に分けます。関数呼び出し、INリスト、式をまとめるだけの括弧は1行のままにします。分けてもクエリが縦に長くなるだけで、わかりやすくはならないからです。
例
| ケース | 入力 | 結果 |
|---|---|---|
| 1行のクエリ | select id, name from users where active = 1 order by name | SELECT id, name FROM users WHERE active = 1 ORDER BY name |
よくある質問
クエリはどこかに送信されますか?
いいえ。整形ツールはこのページ上で動くJavaScriptです。アップロードも記録も保存もされません。ネットワークを切断してもツールは動き続けます。
SQLが正しいかどうかを確認しますか?
いいえ。これははっきりさせておくべき点です。このツールがしているのは空白の並べ替えです。スキーマも方言の文法もデータベースも持たないので、どのサーバーも受け付けないSQL文でも平気でインデントします。受け付けないのは閉じられていない文字列やコメントだけで、それはコードとテキストの区別がつかなくなるからです。
どの方言に対応していますか?
主要な方言の引用符の書き方を認識します。文字列には単一引用符、名前には二重引用符、バッククォート、角括弧です。そのため、MySQL、PostgreSQL、SQLite、SQL Serverを壊すことはありません。構文解析はしないので、方言の文法は確認しません。
バックスラッシュのオプションは何のためのものですか?
MySQLは文字列内のバックスラッシュをエスケープとして扱うので、'it\'s'は1つの文字列です。標準SQL(およびPostgreSQL、SQLite、SQL Server、Oracle)はそう扱わないので、同じテキストが文字列とそれに続く何か別のものになります。クエリだけからはどちらか判断できず、推測するとどちらかの方言を壊してしまうので、切り替えスイッチにしています。MySQLで作業するとき以外はオフのままにしてください。
列名の大文字・小文字が変わったのはなぜですか?
キーワードと同じつづりだからです。大文字・小文字のオプションはツールが認識する単語に適用され、「key」という名前の列とキーワードを区別できません。TABLE、INTO、FROM、JOIN、UPDATEの直後の名前はそのまま残します。名前の大文字・小文字が意味を持ちうるのはそうした位置だからです。何も変えたくない場合は、キーワードのオプションを「書かれたまま」にするか、名前を引用符で囲んでください。
知っておきたいこと
- このページはSQLを実行することも、データベースに接続することもありません。SQL文はテキストであり、テキストとして扱われます。
- レイアウトは決定的です。同じSQL文に同じオプションを指定すれば常に同じ出力になり、整形済みのSQL文を整形しても何も変わりません。
- CASE式、結合、サブクエリ、CREATE TABLEの列リストには、それぞれ専用のルールがあります。ルールが扱わないものは、推測せずにもとの行に残します。