📖 読了目安 約7分
この記事の目次

SQLの基礎

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

SQLとは

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

SQLでできること

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

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


基本の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年目エンジニアが意識すること

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

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

危険なSQL

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

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

安全な手順

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

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

トランザクションを使う

重要な操作はトランザクションで囲みます。

-- トランザクション開始
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 Workbench MySQL MySQL公式
pgAdmin PostgreSQL PostgreSQL公式
A5:SQL Mk-2 多数対応 日本製、シンプル

SQLの学習方法

  1. 練習用のデータベースを作る
  2. SELECT文をたくさん書いて慣れる
  3. UPDATE/DELETEは練習環境でのみ試す
  4. エラーメッセージを読む習慣をつける

まとめ

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

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