0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Java・Spring Bootでよく使うSQLまとめ【いつ・なぜ使うのかを解説】

0
Posted at

はじめに

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を暗記ではなく実務の流れの中で身につけられるようになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?