SQLは1行に詰め込んで書いても動作しますが、JOINやサブクエリが増えてくると、1行で書かれたSQLは途端に読みにくくなります。この記事では、SQLの基本構造を整理しながら、句ごとに改行・インデントして整形することがなぜ読みやすさに直結するのかを解説します。
1. SQLの基本構造:句ごとの役割
SQLのSELECT文は、それぞれ異なる役割を持つ「句(クローズ)」の組み合わせで構成されています。代表的な句の役割を整理すると次のようになります。
| 句 | 役割 |
|---|---|
| SELECT | 取得する列(カラム)を指定する |
| FROM | 対象となるテーブルを指定する |
| WHERE | 取得する行を絞り込む条件を指定する |
| GROUP BY | 指定した列の値ごとにグループ化する |
| ORDER BY | 結果の並び順を指定する |
これらの句は決まった順序で記述するルールがあり、それぞれが「何を」「どこから」「どう絞り込んで」「どうまとめて」「どう並べるか」という、異なる処理ステップを担っています。
2. なぜ改行・インデントが読みやすさに直結するのか
SQLを1行にまとめて書いてしまうと、どこまでがSELECTの対象列で、どこからがWHEREの条件なのか、視覚的な区切りがなくなってしまいます。句の先頭ごとに改行し、その句に属する内容をインデント(字下げ)して揃えることで、「どの行がどの句に属しているか」が一目で分かるようになります。
特にJOINが複数絡む場合や、サブクエリ(SQLの中に入れ子になった別のSQL)が含まれる場合、1行表記ではどこからどこまでが1つのサブクエリの範囲なのか、構造そのものを把握することが難しくなります。改行とインデントで階層を視覚的に表現することで、クエリ全体の構造を素早く読み取れるようになります。
3. データベースによる「方言(dialect)」の違い
SQLはリレーショナルデータベースで広く使われる標準的な言語ですが、実際にはMySQL・PostgreSQL・SQL Server・Oracle・BigQueryなど、データベースの種類ごとに細かい文法の違い(方言、dialect)があります。
- •文字列の連結方法(||を使うか、CONCAT関数を使うかなど)
- •日付・時刻関数の名前や引数の違い
- •LIMITやTOPなど、取得件数を絞る構文の違い
- •識別子(テーブル名・列名)を囲む記号の違い(バッククォート、ダブルクォートなど)
基本的なSELECT・FROM・WHEREなどの構造はどのデータベースでも共通していますが、関数名や一部の構文は方言によって異なるため、整形ツールを使う際にも対象のデータベースに合わせた設定を意識すると、より実際の挙動に近い形で確認できます。
4. 整形がチーム開発で大事な理由
チームで開発する場合、SQLの書き方が人によってバラバラだと、レビューのたびに「どこが変わったのか」を読み解くコストがかかります。整形ルールを揃えておくことで、コードレビュー時に本質的な変更点(条件の追加や列の変更など)にすぐ注目できるようになります。
また、バージョン管理システム(Gitなど)で差分(diff)を確認する際も、整形が揃っていないと、実際には変わっていない部分まで差分として表示されてしまうことがあります。改行位置やインデントのルールを統一しておくことは、レビューのしやすさだけでなく、差分の見やすさにも直結します。
5. 整形の基本的な考え方
SQLを整形する際の基本的な考え方として、SELECT・FROM・WHERE・GROUP BY・ORDER BYなどの主要な句は、それぞれ行の先頭から書き始め、その句に属する列名や条件は一段インデントして揃える、という方法が広く採用されています。JOINが複数ある場合も、JOINごとに改行し、結合条件(ON以降)も読みやすい位置に配置することが推奨されます。
手元で書いたSQLを毎回手作業で整形するのは手間がかかります。SQLフォーマッターを使うと、1行にまとめて書かれたSQLや整形が崩れたSQLを、句ごとに改行・インデントされた読みやすい形式に自動で整えられます。
6. キーワードの大文字・小文字、命名規則の慣習
SQLでは、SELECTやFROMなどのキーワードを大文字・小文字どちらで書いても動作上の違いはありませんが、慣習としてキーワードは大文字、テーブル名・列名は小文字(スネークケース:単語をアンダースコアで区切る書き方)で統一するチームが多く見られます。これにより、どこがSQLの構文で、どこが実際のデータの名前なのかが視覚的に区別しやすくなります。
命名規則についても、テーブル名は複数形にする・列名は意味が分かる単語を使うなど、チームごとにルールを設けていることが多く、整形のルールと合わせて統一しておくと、誰が書いたSQLでも読みやすい状態を保ちやすくなります。
7. カンマの位置:先頭カンマと末尾カンマ
複数の列名や条件を並べる際、カンマを各行の末尾に置く書き方と、次の行の先頭に置く「先頭カンマ」スタイルの2通りがよく使われます。先頭カンマにすると、列を1つコメントアウトしたり削除したりする際に、前の行の末尾カンマを付け直す作業が不要になるという利点があり、差分の見やすさを重視するチームで好まれる傾向があります。どちらが絶対的に正しいというルールはなく、チームで統一されていることが重要です。
まとめ
SQLはSELECT・FROM・WHERE・GROUP BY・ORDER BYなど役割の異なる句の組み合わせで構成されており、句ごとに改行・インデントすることで構造が視覚的に分かりやすくなります。データベースごとに方言の違いがあることも踏まえつつ、整形ルールを揃えることはレビューや差分確認のしやすさにもつながります。整形作業を効率化したい場合はSQLフォーマッターを活用してみてください。