1行に詰め込まれたSQL文は、条件が多くなるほど読みにくくなります。本記事では、SQLを読みやすく整形するための基本ルールを解説します。
SELECT、FROM、WHERE、GROUP BY、ORDER BYといった主要な句は、それぞれ新しい行から書き始めます。これだけで、SQL文がどこで何をしているかが一目で分かるようになります。
-- 整形前 SELECT id, name, age FROM users WHERE age >= 20 AND status = 'active' ORDER BY id; -- 整形後 SELECT id, name, age FROM users WHERE age >= 20 AND status = 'active' ORDER BY id;
条件が複数あるWHERE句は、ANDやORの前で改行し、条件の開始位置をそろえます。条件の数が一目で分かり、条件を追加・削除するときの差分も見やすくなります。
複数のテーブルを結合するJOINは、1つのJOINにつき1行で書きます。結合条件(ON句)も同じ行、または次の行にそろえて書くと、どのテーブル同士がどう結合されているかを追いやすくなります。
SELECT u.id, u.name, o.total FROM users AS u JOIN orders AS o ON u.id = o.user_id WHERE o.status = 'paid';
SELECTやFROMのような予約語を大文字にするか小文字にするかは、どちらでも動作上は問題ありません。ただし、チームやプロジェクト内で統一しないと、見た目がばらついて読みにくくなります。大文字で統一すると、テーブル名やカラム名(通常は小文字)と視覚的に区別しやすくなるため、大文字ルールが広く使われています。
サブクエリ(SELECT文の中にさらにSELECT文がある構造)は、外側のSQLより1段階深くインデントします。かっこの対応とインデントの深さが一致していれば、どこからどこまでが1つのサブクエリかが視覚的に分かります。
整形されていないSQLは、見た目の問題だけでなく、条件の見落としや、意図しないJOINの範囲といった実害につながります。長いWHERE句の中でANDとORの優先順位を見誤ったり、複数行にまたがるはずの条件を1行の途中で見落としたりするミスは、整形されていれば防げることが多いです。
SQLの整形は、句ごとの改行、条件のインデント、JOINの1行化、キーワードの大文字小文字の統一という、いくつかのルールの積み重ねです。手作業で整えるのは手間がかかるため、ツールに任せるのが効率的です。
SQL整形ツールでは、これらのルールに沿った整形と、1行への圧縮をその場で確認できます。