目次
- はじめに
- SELECT * を多用しない
- WHERE句を意識する
- ORDER BYを書こう
- NULLの扱いを理解する
- エイリアスを活用する
- まとめ
SQLを書く前に知っておきたい5つの基本ルール
はじめに
SQLはデータベースを扱ううえで欠かせない言語ですが、最初のうちは「とりあえず動けば良い」と考えてしまいがちです。
しかし、実務ではSQLが正しく動くだけでなく、読みやすさ・保守性・パフォーマンスも重要になります。
今回は、これからSQLを学び始める方や、実務でSQLを書く機会が増えてきた方向けに、私が「最初に知っておくと役立つ」と感じた5つの基本ルールをご紹介します。
本記事では、単に書き方を紹介するだけではなく、なぜその書き方が重要なのかという理由もあわせて紹介します。
1. SELECT * を多用しない
SELECT * はすべての列を取得できるため便利ですが、実務では必要な列だけを取得することを意識しましょう。
NG例
SELECT *
FROM Employee;
OK例
SELECT
EmployeeId,
EmployeeName,
Department
FROM Employee;
ポイント
- 必要なデータだけ取得できる
- 通信量や取得データ量を抑えられる
- SQLの内容が分かりやすくなる
- テーブル構成の変更による影響を受けにくい
なぜ重要?
テーブルに新しいカラムが追加された際、SELECT * を使用していると意図せず取得対象になってしまう可能性があります。
また、必要以上のデータを取得することでパフォーマンスの低下や可読性の低下につながる場合もあるため、必要な列を明示的に指定することが重要です。
開発中の調査では SELECT * を使用する場面もありますが、最終的に運用するSQLでは、取得する列を明示的に指定することを意識しましょう。
2. WHERE句を意識する
WHERE句は必要なデータだけを取得するために欠かせない条件です。
NG例
SELECT *
FROM Sales;
OK例
SELECT
SalesId,
Price
FROM Sales
WHERE SalesDate >= '2026-01-01';
ポイント
- 必要なデータだけ取得できる
- 処理速度の改善につながる場合がある
- UPDATEやDELETEでは特に重要
なぜ重要?
WHERE句を付け忘れると、意図しない大量のデータを取得してしまうだけでなく、UPDATEやDELETEでは全件更新・全件削除につながる可能性があります。
特に更新系SQLでは、実行前に対象件数を確認する習慣を付けることが重要です。
3. ORDER BYを書こう
SQLの実行結果は、ORDER BYを指定しない限り並び順が保証されません。
例
SELECT
EmployeeId,
EmployeeName
FROM Employee
ORDER BY EmployeeId;
ポイント
- 表示順を明確にできる
- 毎回同じ順番で結果を確認できる
- テストやデータ確認がしやすくなる
なぜ重要?
ORDER BYを指定しない場合、取得順は保証されません。
同じSQLでも実行するたびに表示順が変わる可能性があり、テストやデータ調査の際に誤った判断につながることがあります。
「前回と順番が違う」というトラブルを防ぐためにも、必要に応じてORDER BYを記述することをおすすめします。
4. NULLの扱いを理解する
NULLは「空文字」や「0」ではなく、「値が存在しない状態」を表します。
そのため、通常の比較演算子では判定できません。
NG例
WHERE Name = NULL
OK例
WHERE Name IS NULL
また、NULLではないデータを取得したい場合は以下のように記述します。
WHERE Name IS NOT NULL
ポイント
- NULLは特殊な値として扱われる
- 比較には
IS NULL、IS NOT NULLを使用する - NULLの仕様を理解すると原因調査もしやすくなる
なぜ重要?
NULLは通常の値とは異なるため、= を使って比較しても期待した結果は取得できません。
NULLの仕様を理解しておくことで、不具合調査やデータ確認をスムーズに進めることができます。
5. エイリアスを活用する
エイリアス(別名)は、テーブルやカラムに一時的な名前を付ける機能です。
エイリアスを使用する目的は、SQLを短く書くことではなく、テーブルやカラムの役割を分かりやすくし、可読性を向上させることです。
エイリアスなし
SELECT
ACCOUNT.account_name,
REQUEST.request_date
FROM
REQUEST
INNER JOIN ACCOUNT
ON ACCOUNT.account_id = REQUEST.employee_account_id;
テーブル名を毎回記述するため、SQLが長くなり、JOINが増えるほど読みづらくなります。
エイリアスあり
SELECT
emp_account.account_name,
req.request_date
FROM
REQUEST req
INNER JOIN ACCOUNT emp_account
ON emp_account.account_id = req.employee_account_id;
エイリアスを使用することで、SQLを簡潔に記述できるだけでなく、テーブルの役割も把握しやすくなります。
さらに、同じテーブルを複数回使用する場合は、役割が分かる名前を付けることで可読性が向上します。
SELECT
req.request_id,
emp_account.account_name AS employee_name,
admin_account.account_name AS admin_name
FROM
REQUEST req
INNER JOIN ACCOUNT emp_account
ON emp_account.account_id = req.employee_account_id
LEFT JOIN ACCOUNT admin_account
ON admin_account.account_id = req.admin_account_id;
この例では、どちらも ACCOUNT テーブルですが、
-
emp_account:申請者のアカウント -
admin_account:承認者のアカウント
というように役割が名前から分かるため、「どのアカウントを参照しているのか」をすぐに判断できます。
ポイント
- SQLを読みやすくできる
- テーブルの役割が分かりやすくなる
- 同じテーブルを複数回使用しても区別しやすい
- 保守やレビューの際に内容を理解しやすくなる
なぜ重要?
テーブル数が増えるほどSQLは複雑になります。
エイリアスを活用することでSQLの可読性が向上し、レビューや保守もしやすくなります。
特にJOINを多用するSQLでは、エイリアスを付けることで記述量を減らし、読みやすいSQLを書くことができます。
a や b、e のような短いエイリアスは、SQLが短いうちは問題ありませんが、
JOINするテーブルが増えると、「どのテーブルを表しているのか」が分かりにくくなることがあります。
req や emp_account、admin_account のように役割が分かるエイリアスを付けることで、SQLを読む人が内容を理解しやすくなり、保守やレビューもしやすくなります。
まとめ
今回ご紹介した内容はどれも基本的なことですが、実務では非常に重要です。
- SELECT * を多用しない
- WHERE句で必要なデータだけ取得する
- ORDER BYで並び順を明確にする
- NULLは特殊な値として扱う
- エイリアスを活用して読みやすいSQLを書く
SQLは「動けば良い」だけではなく、他の人が読んでも理解しやすいことも大切です。
これからSQLを書く機会がある方は、ぜひ今回紹介したポイントを意識してみてください。