SQL整形ツール【無料・登録不要】インデント・圧縮・大文字変換|MySQL・PostgreSQL対応
1 行に詰まった SQL や、インデントがばらばらの SQL を貼り付けるだけで、改行とインデントを付けて読みやすく整形できる無料ツールです。サブクエリ・JOIN・CASE・WITH・UNION にも対応し、キーワードの大文字・小文字の切り替えや、1 行への圧縮もできます。
文字列やコメントの中身は一切変えません。整形するたびに、整形の前後で SQL の中身(空白以外)が同じかどうかを自動で確かめ、同じであることを確認できたときだけ結果を表示します。入力した SQL はお使いのブラウザの中だけで処理され、サーバーには一切送信されません。
SQL ファイルをここにドラッグ&ドロップ(5MB まで)
入力した SQL はお使いのブラウザ内だけで処理されます。サーバーへの送信や保存は一切行いません。
使い方
SQL を整形する
- 「データベース」で、お使いのデータベースに合わせて「標準 SQL」「MySQL / MariaDB」「PostgreSQL」から選びます。わからないときは「標準 SQL」のままで構いません。
- 入力欄に SQL を貼り付けます。貼り付けると同時に、出力欄に整形された SQL が表示されます。
- 「インデント」で、スペース 2 つ・スペース 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 段下げて書き、閉じかっこを開いた行と同じ深さに置く |
| CASE | WHEN・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 でよく使う書き方に対応しています。「データベース」の選択によって、次のように読み方を変えます。
| 書き方 | 標準 SQL | MySQL / MariaDB | PostgreSQL |
|---|---|---|---|
| — のコメント | 対応 | 対応(– の後ろに空白か制御文字があるときだけ) | 対応 |
| # のコメント | ― | 対応 | ―(演算子として扱う) |
| /* */ のコメント | 対応(入れ子も可) | 対応(入れ子なし) | 対応(入れ子も可) |
| 文字列の中の \ (バックスラッシュ) | ただの文字 | \’ などのエスケープとして扱う | 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 秒ほどかかることがあります。
関連する記事・ツール
- JSON整形ツール【無料・登録不要】インデント・圧縮・構文チェック|エラー箇所を日本語で表示
- XML整形ツール【無料・登録不要】インデント・圧縮・構文チェック|サクラエディタ用マクロ付き
- テキスト差分比較ツール
- CSV ⇄ JSON 変換ツール
- 文字コードとは?UTF-8・Shift_JIS・EUC-JPの違いと文字化けの原因・直し方