SQL整形ツール

SQL整形ツール

ログやORMが出力した長いSQLを、読みやすい形に整えます。方言とインデントを選んで、結合条件やサブクエリを確認しやすくしましょう。

クエリエディターブラウザー内で整形 · SQLは実行しません
サンプルを読み込む
213 / 50,000文字

02 整形結果

入力したSQLはそのまま残ります

ログのSQLをレビューしやすい形に

一行に詰まったクエリでは、列の一覧や結合条件の境目を追いにくくなります。SQLフォーマッターで改行とインデントをそろえると、SELECTJOINWHEREの位置を見つけやすくなり、レビューの準備に役立ちます。

SQLを貼り付けて方言を指定し、スペース2個・4個・タブからインデントを選びます。キーワードの表記を決めて「SQLを整形」を押してください。結果は別欄に表示され、入力SQLと比較できます。入力や設定を変えた場合は、結果を再生成してください。

実際に使っているデータベースを選ぶ

標準SQL、PostgreSQL、MySQL、MariaDB、SQLite、SQL Server(T-SQL)、Oracle SQL、BigQuery、Snowflakeから選べます。識別子の囲み方や独自構文を正しく読み取るため、元のSQLに合う方言を指定してください。

別の方言を選んでもデータベース間の変換は行われません。MySQLの関数をPostgreSQL向けに置き換える機能ではありません。また、Oracle SQLを選んでもストアドプロシージャ全般を整形できるわけではありません。

整形と動作確認を分けて考える

CTEやサブクエリの階層が見えると、条件を追いやすくなります。ただし、SQLが整形できてもテーブルや列の存在、型の整合性、取得結果の妥当性は確認されません。実行計画の調査や構文の検証には、データベース側のツールを使ってください。

大文字・小文字の設定は認識されたキーワードに適用されます。識別子、関数名、データ型の表記は維持され、パラメーターの値は埋め込まれません。コメントは残りますが、空白や位置が調整される場合があります。

サンプルで見る整形結果

架空のデータを使った整形結果です。キーワードは大文字、インデントはスペース2個に設定しています。ツールでサンプルを読み込むと、対応する方言も選択されます。

JOINと集計

支払済み注文を顧客別に集計する例です。結合条件とWHERE・HAVINGの役割を見比べられます。

SELECT
  c.id,
  c.name,
  count(o.id) AS order_count,
  sum(o.total) AS revenue
FROM
  customers c
  JOIN orders o ON o.customer_id = c.id
WHERE
  o.status = 'paid'
GROUP BY
  c.id,
  c.name
HAVING
  sum(o.total) > 1000
ORDER BY
  revenue DESC;
整形ツールに戻る

CTEとウィンドウ関数

PostgreSQLのCTEとROW_NUMBERで顧客ごとの注文に順位を付けます。入れ子の構造に注目してください。

WITH
  ranked_orders AS (
    SELECT
      id,
      customer_id,
      total,
      row_number() OVER (
        PARTITION BY
          customer_id
        ORDER BY
          created_at DESC
      ) AS position
    FROM
      orders
    WHERE
      created_at >= date '2024-01-01'
  )
SELECT
  customer_id,
  id,
  total
FROM
  ranked_orders
WHERE
  position = 1
ORDER BY
  customer_id;
整形ツールに戻る

INSERTとコメント

MySQLのバッククォート付き識別子、コメント、セミコロンを含む文字列を使った例です。

-- Fictional seed data
INSERT INTO
  `products` (`sku`, `name`, `price`)
VALUES
  ('DEMO-01', 'Desk lamp; warm light', 29.95),
  ('DEMO-02', 'Reader''s notebook', 8.50);
整形ツールに戻る

よくある質問

整形したSQLを保存できますか?

結果欄のコピーやダウンロードを使えます。ファイル名はformatted.sqlです。Ctrl+Enter、macOSではCommand+Enterでも整形できます。

入力したSQLは送信されますか?

整形処理はブラウザー内のWeb Workerで実行します。クエリを整形APIに送信せず、データベースに接続しません。ツールは入力を永続保存したりURLに含めたりしません。

SQLの実行速度も改善しますか?

いいえ。改行やインデント、キーワード表記を整える機能です。インデックスの提案や結合の書き換え、実行計画の最適化は行いません。

複数の文をまとめて整形できますか?

通常のSQL文をセミコロンで区切って入力できます。認識された文字列内のセミコロンはデータとして扱われます。独自のDELIMITER指定や手続き型スクリプトは対象外です。

エラーになったときは何を確認しますか?

方言、引用符、括弧を確認してください。Jinjaなどのテンプレートやアプリケーション側の式展開は認識できない場合があります。上限は50,000文字で、処理は10秒で打ち切ります。長いSQLは分割してください。

プレースホルダーやコメントは残りますか?

対応する方言のプレースホルダーには値を代入しません。コメントも残しますが、配置は変わることがあります。整形を無効にする特殊なコメントがある範囲は、整形されずに残る場合があります。

SQL Formatter · GitHub

整形ツールに戻る