第2部:基礎知識 / 第5章:データベース

SQLの基礎

RDB(リレーショナルデータベース)を操作するための言語であるSQLの基礎を学びます。

📖 読了目安 約15分 対象:データベースを操作したい全ての方

SQLとは

SQL(Structured Query Language)は、RDBを操作するための標準言語です。

SQLでできること

分類説明
データ操作(DML)データの追加・取得・更新・削除SELECT, INSERT, UPDATE, DELETE
データ定義(DDL)テーブルの作成・変更・削除CREATE, ALTER, DROP
データ制御(DCL)アクセス権限の管理GRANT, REVOKE

ポイント:1年目はデータ操作(DML)をまず覚えましょう。

基本のCRUD操作

データベース操作の基本は、Create(作成)、Read(読み取り)、Update(更新)、Delete(削除)の4つです。これらをCRUD操作と呼びます。

SELECT(データの取得)

テーブルからデータを取得します。

-- 全ての列を取得
SELECT * FROM users;

-- 特定の列だけ取得
SELECT name, email FROM users;

-- 条件を指定して取得
SELECT * FROM users WHERE id = 1;

-- 複数の条件(AND)
SELECT * FROM users WHERE status = 'active' AND age >= 20;

-- 複数の条件(OR)
SELECT * FROM users WHERE status = 'active' OR role = 'admin';

INSERT(データの追加)

テーブルにデータを追加します。

-- 1件追加
INSERT INTO users (name, email) VALUES ('田中太郎', 'tanaka@example.com');

-- 複数件追加
INSERT INTO users (name, email) VALUES
  ('田中太郎', 'tanaka@example.com'),
  ('山田花子', 'yamada@example.com');

UPDATE(データの更新)

既存のデータを更新します。

-- 特定のレコードを更新
UPDATE users SET email = 'new@example.com' WHERE id = 1;

-- 複数の列を更新
UPDATE users SET name = '鈴木一郎', email = 'suzuki@example.com' WHERE id = 1;

注意:WHERE句を忘れると全レコードが更新されるので注意!

DELETE(データの削除)

データを削除します。

-- 特定のレコードを削除
DELETE FROM users WHERE id = 1;

-- 条件に合うレコードを削除
DELETE FROM users WHERE status = 'inactive';

注意:WHERE句を忘れると全レコードが削除されるので注意!

よく使う句と関数

ORDER BY(並び替え)

データを特定の列でソートして取得します。

-- 昇順(小さい順)
SELECT * FROM users ORDER BY created_at ASC;

-- 降順(大きい順)
SELECT * FROM users ORDER BY created_at DESC;

LIMIT(件数制限)

取得する件数を制限します。ページング機能を実装する際に便利です。

-- 最初の10件だけ取得
SELECT * FROM users LIMIT 10;

-- 11件目から10件取得(ページング)
SELECT * FROM users LIMIT 10 OFFSET 10;

COUNT(件数を数える)

テーブルの件数や、条件に合う件数を数えます。

-- 全件数
SELECT COUNT(*) FROM users;

-- 条件に合う件数
SELECT COUNT(*) FROM users WHERE status = 'active';

GROUP BY(グループ化)

データを特定の列でグループ化し、グループごとの統計を取得します。

-- ステータスごとの件数
SELECT status, COUNT(*) FROM users GROUP BY status;

-- 部署ごとの平均年齢
SELECT department, AVG(age) FROM users GROUP BY department;

テーブルの結合(JOIN)

複数のテーブルを結合してデータを取得します。リレーショナルデータベースの最大の特徴であり、正規化されたテーブル設計の力を活かすために必須のスキルです。

INNER JOIN(内部結合)

両方のテーブルにデータがある場合のみ取得します。

SELECT users.name, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id;

例:

users テーブル          orders テーブル
+----+----------+       +----+---------+--------+
| id | name     |       | id | user_id | amount |
+----+----------+       +----+---------+--------+
| 1  | 田中     |       | 1  | 1       | 3000   |
| 2  | 山田     |       | 2  | 1       | 5000   |
| 3  | 鈴木     |       | 3  | 2       | 2000   |
+----+----------+       +----+---------+--------+

結果:
+--------+--------+
| name   | amount |
+--------+--------+
| 田中   | 3000   |
| 田中   | 5000   |
| 山田   | 2000   |
+--------+--------+
※ 鈴木は注文がないので結果に含まれない

LEFT JOIN(左外部結合)

左側のテーブルは全て取得、右側はあれば取得します。

SELECT users.name, orders.amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

例:

結果:
+--------+--------+
| name   | amount |
+--------+--------+
| 田中   | 3000   |
| 田中   | 5000   |
| 山田   | 2000   |
| 鈴木   | NULL   |  ← 注文がなくてもユーザーは表示される
+--------+--------+

1年目エンジニアが意識すること

本番データベースの注意点

本番環境で動作しているデータベースは、実際のユーザーのデータを保持しており、誤ったSQL実行は大きな問題を引き起こします。以下の点を常に意識してください。

  • 本番環境でのUPDATE、DELETEは特に注意
  • 必ずWHERE句を付ける
  • 実行前にSELECTで対象を確認
  • 迷ったら先輩に確認

危険なSQL

WHERE句を忘れたSQL文は、意図した特定のレコードではなく、テーブル全体を対象にしてしまいます。以下の例は絶対に実行してはいけません。

-- 危険!全レコードが削除される
DELETE FROM users;

-- 危険!全レコードが更新される
UPDATE users SET status = 'inactive';

重要:この間違いは「一度だけ」では済みません。ある日突然全ユーザーデータが消えるなど、会社に大きな損害を与える可能性があります。

安全な手順

UPDATE/DELETE文を本番環境で実行する場合は、必ず以下の手順を守ってください。

-- 1. まずSELECTで対象を確認
SELECT * FROM users WHERE id = 1;

-- 2. 対象が正しいことを確認してから実行
DELETE FROM users WHERE id = 1;

トランザクションを使う

複数の関連する操作(例えば、口座Aから1000円引き出して、口座Bに1000円入金する)を行う場合は、トランザクションで囲むことで、すべての操作が成功するか、全て失敗するか、のどちらかを保証できます。

-- トランザクション開始
BEGIN;

-- 操作を実行
UPDATE accounts SET balance = balance - 10000 WHERE id = 1;
UPDATE accounts SET balance = balance + 10000 WHERE id = 2;

-- 問題なければ確定
COMMIT;

-- 問題があれば取り消し
-- ROLLBACK;

よく使うツール

GUIツール

コマンドラインよりGUIツールを使うと操作しやすいです。多くの企業では以下のようなツールを使ってデータベースを管理しています。

ツール対応DB特徴
DBeaver多数対応無料、高機能
MySQL WorkbenchMySQLMySQL公式
pgAdminPostgreSQLPostgreSQL公式
A5:SQL Mk-2多数対応日本製、シンプル

SQLの学習方法

SQLを効果的に学ぶためのステップです。

  1. 練習用のデータベースを作る - 本番と同じ環境を自分の開発マシンに作って、自由に操作できる環境を整える
  2. SELECT文をたくさん書いて慣れる - 最も使う操作なので、様々な条件のSELECT文を何度も書いて習熟する
  3. UPDATE/DELETEは練習環境でのみ試す - 本番環境では実行しない。必ず練習環境で動作確認してから本番環境に持ち込む
  4. エラーメッセージを読む習慣をつける - 「どのSQL文のどの部分が間違っているか」を丁寧に読み取ることで、デバッグ能力が大きく向上する

まとめ

操作SQL注意点
取得SELECT最も使う、まず覚える
追加INSERT必須の列を確認
更新UPDATEWHERE句を忘れずに
削除DELETEWHERE句を忘れずに

データベースの基本概念については データベースの基礎 を参照してください。