はじめに
Java・Spring Bootでは、Spring Data JPAを利用することでSQLを意識せずにCRUDを実装できます。
しかし、実務では
- 複雑な検索
- 複数テーブルの結合
- 集計処理
- パフォーマンス改善
などの場面でSQLを書く機会が少なくありません。
この記事では、Java・Spring Bootの開発でよく使用するSQLについて、
- 何をするSQLなのか
- なぜ必要なのか
- どのようなタイミングで使うのか
を中心に解説します。
1. SELECT(データ取得)
何をするSQL?
データベースからデータを取得します。
SELECT *
FROM users;
なぜ必要?
Webアプリでは、ほとんどの画面でデータを表示します。
例えば
- ユーザー一覧
- 商品一覧
- 点検履歴
- 注文履歴
など、画面へ表示するデータはすべてSELECTで取得します。
どんなタイミングで使う?
例えば設備点検システムなら
- ログイン後に設備一覧を表示
- 点検履歴を見る
- 詳細画面を開く
などです。
Spring Bootでは
equipmentRepository.findAll();
のようなRepositoryメソッドが内部でSELECTを実行しています。
2. INSERT(データ追加)
何をするSQL?
新しいデータを登録します。
INSERT INTO users(name,email)
VALUES('田中','tanaka@example.com');
なぜ必要?
新しい情報を保存するためです。
どんなタイミングで使う?
例えば
- ユーザー登録
- 商品登録
- 点検結果登録
- コメント投稿
など。
Spring Bootでは
repository.save(entity);
でINSERTが実行されます。
3. UPDATE(データ更新)
何をするSQL?
既存データを書き換えます。
UPDATE users
SET name='佐藤'
WHERE id=1;
なぜ必要?
データは登録して終わりではありません。
利用者は情報を変更できます。
どんなタイミングで使う?
例えば
- ユーザー情報変更
- パスワード変更
- 点検結果修正
- 商品価格変更
など。
Spring Bootでは
repository.save(entity);
がUPDATEになります。
4. DELETE(データ削除)
何をするSQL?
不要になったデータを削除します。
DELETE
FROM users
WHERE id=1;
なぜ必要?
不要なデータを管理画面などから削除するためです。
どんなタイミングで使う?
例えば
- ユーザー削除
- 商品削除
- コメント削除
など。
Spring Bootでは
repository.deleteById(id);
を利用します。
5. WHERE(条件検索)
何をするSQL?
取得するデータを絞り込みます。
SELECT *
FROM users
WHERE age >= 20;
なぜ必要?
データベースには大量のデータがあります。
必要なデータだけ取得しないと
- 処理が遅くなる
- 不要なデータまで取得してしまう
ためです。
どんなタイミングで使う?
例えば
- ID検索
- 名前検索
- メールアドレス検索
- ステータス検索
など。
6. ORDER BY(並び替え)
何をするSQL?
取得したデータを並び替えます。
SELECT *
FROM users
ORDER BY created_at DESC;
なぜ必要?
ユーザーは見やすい順番でデータを見たいからです。
どんなタイミングで使う?
例えば
- 新着順
- 古い順
- 名前順
- 金額順
など。
7. LIMIT(件数制限)
何をするSQL?
取得件数を制限します。
SELECT *
FROM users
LIMIT 10;
なぜ必要?
数万件あるデータを一度に取得すると処理が重くなります。
必要な件数だけ取得することで高速化できます。
どんなタイミングで使う?
例えば
- 一覧画面
- ページネーション
- 最新10件表示
など。
8. JOIN(テーブル結合)
何をするSQL?
複数のテーブルを結合して取得します。
SELECT
u.name,
o.price
FROM users u
JOIN orders o
ON u.id = o.user_id;
なぜ必要?
データベースは正規化されているため、
- ユーザー
- 注文
- 商品
など別々のテーブルに保存されています。
そのため、一つの画面を表示するには複数テーブルを結合する必要があります。
どんなタイミングで使う?
例えば設備点検システムなら
- 設備名
- 点検担当者
- 点検結果
- 点検日時
を1つの一覧画面へ表示するときです。
JOINは実務でも非常によく使用されます。
9. GROUP BY(集計)
何をするSQL?
同じデータをグループ化して集計します。
SELECT department,
COUNT(*)
FROM users
GROUP BY department;
なぜ必要?
件数や平均値などを集計するためです。
どんなタイミングで使う?
例えば
- 部署ごとの人数
- 商品ごとの売上
- 月ごとの点検件数
など。
10. COUNT(件数取得)
何をするSQL?
件数を取得します。
SELECT COUNT(*)
FROM users;
なぜ必要?
画面やダッシュボードで件数を表示するためです。
どんなタイミングで使う?
例えば
- 登録ユーザー数
- 商品数
- 点検件数
など。
11. LIKE(部分一致検索)
何をするSQL?
文字列を部分一致で検索します。
SELECT *
FROM users
WHERE name LIKE '%田%';
なぜ必要?
完全一致では検索できない場合が多いためです。
どんなタイミングで使う?
例えば
- 名前検索
- 商品名検索
- キーワード検索
など。
12. IS NULL
何をするSQL?
NULLのデータを取得します。
SELECT *
FROM users
WHERE deleted_at IS NULL;
なぜ必要?
値が存在しないデータを判定するためです。
どんなタイミングで使う?
例えば
論理削除を採用しているシステムでは
deleted_at が NULL
=まだ削除されていない
という判定でよく利用されます。
Spring BootではSQLを書かないの?
単純なCRUDであれば、Spring Data JPAがSQLを自動生成してくれます。
findAll();
findById();
save();
deleteById();
しかし実務では
- JOINが複雑
- 集計処理
- パフォーマンス改善
- Native Query
などではSQLを書くことも珍しくありません。
そのため、JPAだけではなくSQLの基本も理解しておくことが重要です。
まとめ
| SQL | 主な用途 |
|---|---|
| SELECT | データ取得 |
| INSERT | データ追加 |
| UPDATE | データ更新 |
| DELETE | データ削除 |
| WHERE | 条件検索 |
| ORDER BY | 並び替え |
| LIMIT | 件数制限 |
| JOIN | 複数テーブル結合 |
| GROUP BY | 集計 |
| COUNT | 件数取得 |
| LIKE | 部分一致検索 |
| IS NULL | NULL判定 |
おわりに
Spring BootではJPAのおかげでSQLを書く機会は以前より減りましたが、SQLの知識は依然として重要です。
特に**「なぜこのSQLが必要なのか」「どの画面・機能で使われるのか」**を理解しておくことで、SQLを暗記ではなく実務の流れの中で身につけられるようになります。