開発ツール

SQL整形ツール【無料・登録不要】インデント・圧縮・大文字変換|MySQL・PostgreSQL対応

SQL整形ツール【無料・登録不要】インデント・圧縮・大文字変換|MySQL・PostgreSQL対応
engblog-poster

1 行に詰まった SQL や、インデントがばらばらの SQL を貼り付けるだけで、改行とインデントを付けて読みやすく整形できる無料ツールです。サブクエリ・JOIN・CASE・WITH・UNION にも対応し、キーワードの大文字・小文字の切り替えや、1 行への圧縮もできます。

文字列やコメントの中身は一切変えません。整形するたびに、整形の前後で SQL の中身(空白以外)が同じかどうかを自動で確かめ、同じであることを確認できたときだけ結果を表示します。入力した SQL はお使いのブラウザの中だけで処理され、サーバーには一切送信されません。

オプション

SQL ファイルをここにドラッグ&ドロップ(5MB まで)

入力した SQL はお使いのブラウザ内だけで処理されます。サーバーへの送信や保存は一切行いません。

使い方

SQL を整形する

  1. 「データベース」で、お使いのデータベースに合わせて「標準 SQL」「MySQL / MariaDB」「PostgreSQL」から選びます。わからないときは「標準 SQL」のままで構いません。
  2. 入力欄に SQL を貼り付けます。貼り付けると同時に、出力欄に整形された SQL が表示されます。
  3. 「インデント」で、スペース 2 つ・スペース 4 つ・タブから選べます。
  4. 「出力をコピー」でコピーするか、「出力をファイルとして保存」で formatted.sql として保存します。

試しに使ってみたいときは、「サンプルを入れる」を押してください。たとえば、次の 1 行の SQL は、

select u.id, u.name, d.name as dept from users u inner join depts d on d.id = u.dept_id where u.age >= 20 and u.role = 'admin' order by u.id;

次のように整形されます。

SELECT
  u.id,
  u.name,
  d.name AS dept
FROM
  users u
  INNER JOIN depts d ON d.id = u.dept_id
WHERE
  u.age >= 20
  AND u.role = 'admin'
ORDER BY
  u.id;

キーワードの大文字・小文字を切り替える

「キーワード」で、SELECT や FROM などのキーワードを「大文字」「小文字」にそろえるか、「変えない」かを選べます。大文字・小文字を変えるのはキーワードだけで、テーブル名や列名、文字列の中身は変えません(詳しくは「整形のルールと対応範囲」を参照してください)。

1 行に圧縮する

「モード」で「圧縮」を選ぶと、改行やインデントを取り除いて 1 行にまとめます。プログラムのソースコードに SQL を埋め込むときや、ログに 1 行で残したいときに便利です。保存するときのファイル名は minified.sql になります。

「–」から行の終わりまでのコメント(行コメント)は、そのまま 1 行にまとめると、後ろに続く SQL まで全部コメントになってしまいます。たとえば SELECT name -- 名前 の次の行に FROM users があるとき、単純に 1 行にすると FROM users もコメントの一部になり、SQL の意味が変わります。そのため、このツールでは圧縮するときに行コメントを「/* 名前 */」の形に書き換えます。

SELECT name /* 名前 */ FROM users

コメントの中に「*/」が含まれていて書き換えられない場合など、中身を変えずに 1 行にできないところは、改行を残します(そのときは結果の欄にその旨を表示します)。

コメントを取り除く

「コメントを取り除く」にチェックを入れると、「–」「/* */」(MySQL では「#」も)のコメントを取り除きます。ただし、MySQL の「/*! … */」(MySQL だけが実行する部分)と「/*+ … */」(オプティマイザーヒント)は、コメントの形をしていても SQL の動きに関わるため残します。

ファイルから読み込む

点線の枠に SQL ファイルをドラッグ&ドロップするか、「ファイルを選択」から選びます(5MB まで)。文字コードは、UTF-8・Shift_JIS・UTF-16 を自動で判定します。保存するときは UTF-8 になります。

整形のルールと対応範囲

整形のルール

対象整形後
SELECT・FROM・WHERE・GROUP BY・HAVING・ORDER BY・LIMIT・INSERT INTO・VALUES・UPDATE・SET・DELETE FROM・WITH など行の先頭に置き、その中身を次の行から 1 段下げる
SELECT の列・SET の代入・VALUES の行などの区切りの「,」「,」の後ろで改行する(関数の引数や IN (1, 2, 3) の中は改行しない)
JOIN(INNER JOIN・LEFT JOIN など)FROM の中で 1 行ずつに分ける。ON の条件は同じ行に続ける
WHERE・HAVING の AND / OR行の先頭に置く(BETWEEN ~ AND ~ の AND と、かっこの中は改行しない)
サブクエリ(かっこの中の SELECT)・WITH の中身1 段下げて書き、閉じかっこを開いた行と同じ深さに置く
CASEWHEN・ELSE を 1 段下げて 1 行ずつ、END を CASE と同じ深さに置く(関数のかっこの中では 1 行のまま)
UNION・INTERSECT・EXCEPT前後の SELECT との間に、1 行で置く
CREATE TABLE の列の定義1 列ずつ 1 行に分ける
「;」で区切った複数の文文と文の間に空行を入れる
= や + などの演算子前後に空白を 1 つ入れる(-1 のような符号は数字に付けたまま)
文字列(’…’)・引用符で囲んだ名前(”…” や `…`)・コメント中身を一切変えない

例として、CASE とサブクエリを含む SQL は次のように整形されます。

SELECT
  name,
  CASE
    WHEN age < 20 THEN '未成年'
    ELSE '成人'
  END AS kind
FROM
  users
WHERE
  id IN (
    SELECT
      user_id
    FROM
      orders
    WHERE
      amount > 1000
  );

SQL の中身が変わらないようにしている工夫

このツールは、SQL を「キーワード」「名前」「文字列」「コメント」「記号」などの単位(トークン)に自分で分けてから整形しています。整形が終わったら、出力をもう一度トークンに分け、空白以外のトークンの並びが入力と同じかを確かめます(キーワードの大文字・小文字を変えた場合は、大文字・小文字の違いだけを許します)。同じでなければ結果を表示せず、「安全のため出力を止めました」と表示します。

ほかにも、次のような点に気をつけています。

  • MySQL では、COUNT などの一部の組み込み関数は、関数名と「(」の間に空白があると関数として扱われません(MySQL の公式マニュアルに記載されています)。このツールは、関数名と「(」の間の空白を増やしたり減らしたりしません。
  • PostgreSQL では、改行をはさんで並べた 2 つの文字列('foo' と次の行の 'bar')は 1 つの文字列 'foobar' としてつながります。この改行は、整形でも圧縮でも残します。
  • MySQL では「–」の後ろに空白がないとコメントになりません(1--1 は 1 から -1 を引く計算です)。このときに記号の間を詰めたり空白を入れたりして、意味が変わってしまわないようにしています。
  • キーワードの大文字・小文字を変えるのは、あらかじめ決めたキーワードの一覧にある語だけです。「.」の前後の語(users.name など)と、FROM・JOIN・INTO・UPDATE・TABLE の直後の語(テーブル名)は変えません。MySQL を Linux などで使う場合、テーブル名やテーブルの別名は大文字・小文字が区別されるためです。

対応している書き方

標準的な SQL を基本に、MySQL と PostgreSQL でよく使う書き方に対応しています。「データベース」の選択によって、次のように読み方を変えます。

書き方標準 SQLMySQL / MariaDBPostgreSQL
— のコメント対応対応(– の後ろに空白か制御文字があるときだけ)対応
# のコメント―対応―(演算子として扱う)
/* */ のコメント対応(入れ子も可)対応(入れ子なし)対応(入れ子も可)
文字列の中の \ (バックスラッシュ)ただの文字\’ などのエスケープとして扱うE’…’ の中だけエスケープとして扱う
“…”名前(識別子)文字列名前(識別子)
`…`名前名前―
$$…$$、$タグ$…$タグ$――対応(関数の本体などをそのまま残す)
その他N’…’、X’…’、B’…’、U&’…’、? のパラメーター@変数、@@システム変数、_utf8mb4’…’、DELIMITER の行、\G:: の型変換、$1 のパラメーター、->> などの演算子、psql の \ で始まるコマンド

次のものには対応していません。

  • SQL Server の [名前] の書き方、Oracle の q'[…]’ の文字列などの、ほかのデータベース独自の書き方
  • ストアドプロシージャ(BEGIN ~ END の中に複数の文を書くもの)の、IF や LOOP などの制御文のインデント(中身は変えずに出力しますが、読みやすい形にはなりません)
  • SQL の文法が正しいかどうかのチェック(閉じられていない文字列やコメントだけは注意を表示します)

SQLとは?

SQL(エスキューエル、シークェル)は、データベースに入っているデータを取り出したり、追加・変更・削除したりするための言語です。MySQL、PostgreSQL、Oracle Database、SQL Server、SQLite など、多くのデータベース(リレーショナルデータベース)で使われています。基本的な書き方は国際規格(ISO/IEC 9075)で決められていますが、データベースごとに独自に追加された書き方もあります。

SQL の命令は、大きく次の 3 つに分けられます。

種類主な命令すること
データを操作する(DML)SELECT、INSERT、UPDATE、DELETEデータの取り出し・追加・変更・削除
データの入れ物を定義する(DDL)CREATE、ALTER、DROPテーブルやインデックスなどの作成・変更・削除
権限を管理する(DCL)GRANT、REVOKEユーザーに操作の権限を与える・取り消す

SQL のキーワードは、大文字で書いても小文字で書いても同じ意味になります(PostgreSQL の公式ドキュメントでは「キーワードと引用符で囲まない名前は大文字・小文字を区別しない」と説明されています)。ただし、文字列の中身や、引用符で囲んだ名前は大文字・小文字が区別されます。

読みやすい SQL の書き方のコツ

SQL は 1 行で書いても動きますが、長くなると、どこからどこまでが条件なのか、どのテーブルを結合しているのかがわかりにくくなります。チームで読み書きする SQL は、次のような点をそろえておくと読みやすくなります。

1. 句ごとに改行し、中身を 1 段下げる

SELECT・FROM・WHERE などの句を行の先頭に置き、中身を 1 段下げると、SQL の骨組みがひと目でわかります。このツールの整形は、この書き方にそろえます。

2. キーワードの大文字・小文字をそろえる

キーワードを大文字、テーブル名や列名を小文字にすると、どこがキーワードかが見分けやすくなります。小文字にそろえるチームもあります。大切なのは、1 つのプロジェクトの中でどちらかにそろえることです。

3. AND / OR は行の先頭に置き、混ぜるときはかっこを付ける

条件を 1 行に 1 つずつ書き、AND / OR を行の先頭に置くと、条件の追加や削除がしやすくなります。また、SQL では AND が OR より先に計算されます。a = 1 OR b = 2 AND c = 3 は a = 1 OR (b = 2 AND c = 3) という意味になるので、AND と OR を混ぜるときは、意図がはっきりわかるようにかっこを付けましょう。

4. テーブルには短い別名を付け、列名の前に書く

複数のテーブルを結合するときは、users u のように短い別名を付け、u.name のように列がどのテーブルのものかを書いておくと、読み間違いを防げます。

5. 入れ子のサブクエリが深くなったら WITH を使う

サブクエリの中にサブクエリがある SQL は、内側から順に読まないと意味がつかめません。WITH(共通テーブル式)を使うと、途中の結果に名前を付けて、上から順に読める形にできます。

WITH
  recent AS (
    SELECT
      *
    FROM
      orders
    WHERE
      ordered_at >= '2026-01-01'
  )
SELECT
  user_id,
  COUNT(*) AS cnt
FROM
  recent
GROUP BY
  user_id
HAVING
  COUNT(*) >= 3;

6. SELECT * は必要な列の名前に書き換える

SELECT * は手軽ですが、どの列を使っているのかが SQL から読み取れず、テーブルに列が追加されたときに結果も変わってしまいます。プログラムに組み込む SQL では、使う列の名前を書いておくのがおすすめです。

よくある質問

入力したデータは保存されませんか?

保存されません。整形や圧縮はすべてお使いのブラウザの中で行われ、サーバーへの送信も保存も行いません。ページを閉じると入力内容は消えます。とはいえ、本番環境のパスワードや個人情報を含む SQL は、どのツールであっても貼り付けないようにするのが安全です。

整形すると SQL の動きが変わりませんか?

変わらないように作っています。変えるのは空白と改行、キーワードの大文字・小文字(選んだ場合)、圧縮するときの行コメントの書き方(– を /* */ に変える)、コメントを取り除く設定にしたときのコメントだけです。また、整形のたびに前後の SQL を比べ、空白以外の中身が同じであることを確かめてから出力します。ただし、このツールが対応していない書き方の SQL では、正しく読み取れないことがあります。「データベース」の選択がお使いのデータベースと合っているかを確認し、大切な SQL は実行前に結果を見直してください。

「安全のため出力を止めました」と表示されました。

整形の前後で SQL の中身が同じであることを確認できなかったときに表示されます。「データベース」の選択を変えると整形できる場合があります。それでも表示されるときは、このツールが対応していない書き方が含まれている可能性があります。

「全角スペースがあります」と表示されました。

文字列やコメントの外に全角スペースがあると、データベースによってはエラーになったり、名前の一部として扱われたりします。「入力欄の該当箇所を選択」を押すと場所がわかるので、半角スペースに直してください。このツールは全角スペースを勝手に書き換えません。

どのくらい大きな SQL まで扱えますか?

ファイルの読み込みは 5MB までです。数 MB の SQL では、パソコンの性能によって整形に 1 秒ほどかかることがあります。

関連する記事・ツール

ABOUT ME
hr
hr
エンジニアとして働いている hr です。仕事や資格勉強で「こんなツールがあれば」と感じたものを、無料Webツールと解説記事にして発信しています。
記事URLをコピーしました