使っている方言のまま、読みやすいSQLに
このSQL整形ツールは、どんな長さのクエリでも、複数のステートメントでもまとめて受け取り、一貫したインデントに整えます。1行に1句、列と条件をそろえ、キーワードは好みの大文字・小文字に。PostgreSQL、MySQL、SQL ServerからBigQuery、Snowflake、Oracle PL/SQLまで15以上の方言の構文を理解するため、方言固有の演算子、クォート、プレースホルダーはそのまま保たれます。「圧縮」に切り替えれば、設定ファイルやコード内の文字列向けにクエリを1行に戻せます。処理はすべてブラウザ内で行われ、クエリがアップロードされることはありません。
SQLクエリを整形する方法
- 1左側のペインにSQLを貼り付けるか、サンプルクエリから始めます。
- 2クエリの方言を選びます。単純なクエリならStandard SQLで十分ですが、PostgreSQLの
::キャスト、MySQLのバッククォート識別子、SQL Serverの[brackets]などでは正しい方言の選択が重要です。 - 3キーワードの大文字・小文字とインデントを設定し、その他のオプションでデータ型・関数の大文字・小文字、表形式インデント、
AND/ORの位置、ステートメント間の空行を調整します。 - 4入力に合わせて右側に整形済みクエリが表示されます。解析できない場合は、問題のある行と列が表示されます。
- 5結果をコピーするか、
.sqlファイルとしてダウンロード、または圧縮を選んで1行にまとめます。
なぜSQLを整形するのか
SQLは一度書かれ、何度も読まれます。コードレビューで、スロークエリログで、誰かが深夜2時にデバッグするマイグレーションで。ORMが生成したクエリやログから貼り付けたクエリは、たいてい1行の長大な文字列です。句ごとに改行し、サブクエリをインデントすると、どのテーブルを何で結合し、どの条件がどこに適用されるかという構造が見えてきます。
整形をそろえると差分も小さくなります。チーム全員が同じ方法で整形していれば、条件の変更は段落全体の組み直しではなく、1行の変更として表れます。
整形オプションの説明
- キーワードの大文字・小文字
- UPPERはSELECT、FROM、WHEREをテーブル名や列名から目立たせる、最も一般的な規約です。lowerは大文字がうるさいと感じるチーム向け。「保持」は入力したとおりに残します。
- インデント
- スペース2つか4つ、またはタブ。表形式スタイルでは、キーワードを固定幅の列に埋めて、その後の式がそろうようにします。
- AND / ORの位置
- 「行頭」は各論理演算子を行の先頭に置くため、条件を1つだけコメントアウトしやすくなります。「行末」は前の行の末尾に残します。
- 式の幅
- この文字数より短い括弧内の式は1行に収め、長いものは改行します。
- 演算子を詰める
- a + bではなくa+bと書きます。コンパクトですが読みにくくなります。
正しい方言を選ぶ
SQLの方言は意外と多くの点で異なります。識別子のクォート方法("name"、`name`、[name])、プレースホルダーの形(?、$1、:name、@param)、予約語などです。このツールは方言ごとに別の文法を使うため、PostgreSQLの$$関数本体やMySQLの#コメントを誤認しません。
正しいはずのクエリで解析エラーが出たら、まず方言を確認してください。Standard SQLは意図的に厳格で、ベンダー固有の拡張をすべて知っているわけではありません。
SQLの圧縮
圧縮は整形の逆です。コメントを削除し、空白をすべて単一スペースにまとめて、YAMLファイル、環境変数、文字列リテラルに貼り付けられる1行にします。文字列リテラル、クォートされた識別子、ドル引用符の本体はそのままコピーされるので、'two spaces'のような値も2つのスペースが保たれます。/*+ … */形式のオプティマイザヒントとMySQLの実行可能コメント/*! … */は、クエリの動作を変えるため残されます。
JSONを扱っていますか?JSON 整形・検証ツールはJSONドキュメントで同じことを行い、コード圧縮ツールはCSS、JavaScript、HTMLに対応します。
よくある質問
- SQLはサーバーに送信されますか?
- いいえ。整形と圧縮はすべてブラウザ内で実行されるため、テーブル名、顧客データ、認証情報を含むクエリが端末の外に出ることはありません。
- 対応しているSQL方言は?
- Standard SQL、PostgreSQL、MySQL、MariaDB、SQLite、SQL Server (T-SQL)、Oracle PL/SQL、BigQuery、Snowflake、Amazon Redshift、Spark SQL、Hive、TrinoとPresto、DuckDB、ClickHouse、IBM Db2とDb2 for IBM i、SingleStoreDB、TiDB、Couchbase N1QLです。
- 整形するとクエリの動作が変わりますか?
- いいえ。変わるのは空白と、選んだ場合はキーワード・データ型・関数の大文字・小文字だけです。クォートされた識別子と文字列リテラルは一切変更されません。クォートなしの識別子の大文字・小文字変更はほとんどのデータベースで安全ですが、データベースが区別する場合は「保持」のままにしてください。
- 解析エラーが出るのはなぜですか?
- 閉じていない括弧や引用符などの構文エラーがあるか、選択した方言にない構文を使っているかのどちらかです。メッセージに解析が止まった行と列が表示されるので、実際に使っているデータベースの方言を試してください。
- 複数のステートメントをまとめて整形できますか?
- はい。セミコロンで区切れば順に整形され、間には指定した数の空行が入ります。
- コメントは残りますか?
- 整形時は残ります。行コメントもブロックコメントも元の位置に保たれます。圧縮では、オプティマイザヒントとMySQLの実行可能コメントを除き削除されます。
- SQLクエリを1行に圧縮するには?
- ツール上部で「圧縮」を選びます。コメントが削除され空白がまとめられますが、文字列リテラルとクォートされた識別子は書かれたとおりに保たれます。