SQL フォーマッター
SQL(構造化問い合わせ言語)はリレーショナルデータベースの標準言語です。このツールはSQLクエリを適切なインデントでフォーマットし、キーワードを大文字に変換し、複雑なクエリを読みやすく構造化します。一般的なSQLダイアレクトをサポートしています。
仕様
よくあるユースケース
- ログやORM出力からの圧縮SQLをフォーマット
- コードレビューのために複雑なクエリを読みやすくする
- ドキュメント用にSQLを準備
- 既存のクエリをデバッグして理解する
機能
- 一貫したインデントでSQLを整形出力
- SQLキーワードを大文字に変換(SELECT、FROM、WHERE など)
- 複雑なJOINとサブクエリをフォーマット
- CTE(共通テーブル式)とWITH句の処理
- ウィンドウ関数のサポート
- 6つのSQLダイアレクトをサポート(Standard、PostgreSQL、MySQL、MariaDB、SQLite、T-SQL)
- テーブル名の抽出
- 圧縮ビューの切り替え
- サイズ削減の表示(オリジナル vs. 圧縮)
例
JOINを含む複雑なクエリ
試してみる →集約、結合、ソートを含むクエリ。
SELECT
u.id,
u.name,
COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE u.active = true
GROUP BY u.id, u.name
HAVING COUNT(o.id) > 5
ORDER BY order_count DESCヒント
- バージョン管理にコミットする前にクエリをフォーマットしてください。
- 大文字のキーワードは可読性を向上させますが、SQLでは必須ではありません。
- サブクエリは明確さのためにインデントすべきです。
解説 SQL フォーマッター
SQL(構造化問い合わせ言語)は1970年代以来、リレーショナルデータベースの標準言語です。PostgreSQL、MySQL、SQLite、SQL Server、Oracleなどのデータベースシステムにおいて、データの問い合わせ、操作、管理のための宣言的な構文を提供します。各データベースが独自の拡張を追加していますが、コア言語は驚くほど一貫しています。
SQL文はいくつかのカテゴリに分類されます。データ操作言語(DML)にはデータの読み取りと変更のためのSELECT、INSERT、UPDATE、DELETEが含まれます。データ定義言語(DDL)にはデータベースオブジェクトの管理のためのCREATE、ALTER、DROPが含まれます。データ制御言語(DCL)はGRANTとREVOKEで権限を処理します。モダンSQLはWITH句を使用した共通テーブル式(CTE)、分析のためのウィンドウ関数、半構造化データのためのJSON操作もサポートしています。
SQLのフォーマットは可読性と保守性に不可欠です。結合、サブクエリ、集約を含む複雑なクエリは、単一行に圧縮されると理解不能になりえます。これはORMが生成するクエリ、アプリケーションログ、データベース監視ツールでよく見られます。大文字のキーワード、適切なインデント、整列された句による一貫したフォーマットにより、クエリのレビュー、デバッグ、最適化が容易になります。
SQLフォーマットはパフォーマンス分析にも役立ちます。適切にフォーマットされたクエリにより、不足しているインデックスの特定(WHEREやJOIN条件にどの列が現れるかを確認)、結合として書き換え可能な不要なサブクエリの発見、CTEやウィンドウ関数を含む複雑なクエリの論理フローの理解が容易になります。
SQLはキーワードの大文字・小文字を区別しないため、SELECTとselectはデータベースエンジンによって同一に扱われます。大文字のキーワード(SELECT、FROM、WHERE、JOIN)は、SQLキーワードをテーブル名やカラム名と視覚的に区別することで可読性を向上させる広く採用されている慣例です。ほとんどのフォーマッターやスタイルガイドがこの理由から大文字のキーワードを推奨しています。
共通テーブル式(CTE)はWITHキーワードで定義される名前付きの一時的な結果セットで、単一クエリの実行期間中存在します。CTEは複雑なクエリを名前付きのステップに分割し、深くネストされたサブクエリを上から下への順序的な構造に置き換えることで可読性を向上させます。再帰CTEはこの機能を拡張し、組織図やスレッド化されたコメントのような階層データを走査できます。
コアSQL構文(SELECT、JOIN、WHERE、GROUP BY)はデータベースダイアレクト間で一貫していますが、独自機能では違いが現れます。MySQLは識別子の引用にバッククォートを使用し、PostgreSQLはダブルクォート、SQL Serverは角括弧を使用します。関数、データ型、LATERAL結合、MERGE、UPSERTなどの高度な機能もダイアレクトによって異なります。このフォーマッターはすべての主要データベースで動作する標準SQL構文を処理します。