SQL入門:SELECT文から始めるデータベース操作の基礎【実例付き】
目次
データベースとSQLとは
データベースとは、データを整理して保存・検索しやすくした仕組みです。Webアプリのユーザー情報、ECサイトの商品データ、SNSの投稿など、ほぼすべてのサービスの裏側でデータベースが動いています。
その中でも最も普及しているのが**RDB(リレーショナルデータベース)**です。RDBはデータをExcelのような「テーブル(表)」の形式で管理します。代表的なRDBには以下があります。
| 種類 | 特徴 |
|---|---|
| MySQL | Webサービスで最も普及。無料・高速 |
| PostgreSQL | 高機能・厳格な標準準拠。OSSの本番環境向き |
| SQLite | ファイル1つで動く軽量DB。組み込み・開発用途に最適 |
| SQL Server | Microsoft製。Windowsサーバー環境向き |
**SQL(Structured Query Language)**は、これらのRDBを操作するための言語です。データの検索・追加・更新・削除をSQLで指示します。
テーブルの基本構造
本記事では以下のusersテーブルとordersテーブルを使って解説します。
usersテーブル
| id | name | age | prefecture |
|---|---|---|---|
| 1 | 田中太郎 | 28 | 東京都 |
| 2 | 鈴木花子 | 34 | 大阪府 |
| 3 | 佐藤次郎 | 22 | 東京都 |
| 4 | 山田美咲 | 41 | 愛知県 |
ordersテーブル
| id | user_id | product | amount | ordered_at |
|---|---|---|---|---|
| 1 | 1 | キーボード | 12000 | 2026-01-10 |
| 2 | 1 | マウス | 3500 | 2026-01-15 |
| 3 | 2 | モニター | 45000 | 2026-01-20 |
| 4 | 3 | キーボード | 12000 | 2026-02-01 |
SELECT文でデータを取得する
全カラムを取得
-- usersテーブルの全データを取得
SELECT * FROM users;
*はすべてのカラムを意味します。本番環境では必要なカラムだけ指定する方がパフォーマンス上も推奨されます。
特定のカラムだけ取得
-- nameとprefectureカラムだけ取得
SELECT name, prefecture FROM users;
WHERE句で条件を絞り込む
-- 東京都のユーザーだけ取得
SELECT * FROM users WHERE prefecture = '東京都';
-- 30歳以上のユーザー
SELECT * FROM users WHERE age >= 30;
-- AND/ORで複数条件
SELECT * FROM users WHERE prefecture = '東京都' AND age >= 25;
-- LIKE演算子で部分一致検索(%は任意の文字列)
SELECT * FROM users WHERE name LIKE '田中%';
-- IN演算子で複数値に一致するもの
SELECT * FROM users WHERE prefecture IN ('東京都', '大阪府');
ORDER BY で並び替え
-- 年齢の昇順(小→大)
SELECT * FROM users ORDER BY age ASC;
-- 年齢の降順(大→小)
SELECT * FROM users ORDER BY age DESC;
-- 都道府県でグループ化した後、年齢の昇順
SELECT * FROM users ORDER BY prefecture ASC, age ASC;
LIMIT でレコード数を制限
-- 上位3件のみ取得
SELECT * FROM users ORDER BY age DESC LIMIT 3;
-- 4件目から3件取得(ページネーションに使う)
SELECT * FROM users ORDER BY id ASC LIMIT 3 OFFSET 3;
集計関数とGROUP BY
基本の集計関数
-- ユーザー数をカウント
SELECT COUNT(*) FROM users;
-- → 4
-- 注文金額の合計
SELECT SUM(amount) FROM orders;
-- → 72500
-- 注文金額の平均
SELECT AVG(amount) FROM orders;
-- → 18125
-- 最大値・最小値
SELECT MAX(amount), MIN(amount) FROM orders;
-- → 45000, 3500
GROUP BY で集計をグループ化
-- 都道府県ごとのユーザー数
SELECT prefecture, COUNT(*) AS user_count
FROM users
GROUP BY prefecture;
-- 結果: 東京都→2, 大阪府→1, 愛知県→1
-- ユーザーごとの合計注文金額
SELECT user_id, SUM(amount) AS total_amount
FROM orders
GROUP BY user_id;
-- 結果: user_id=1→15500, user_id=2→45000, user_id=3→12000
HAVING でグループに条件を付ける
-- 合計注文金額が10000円以上のユーザーのみ
SELECT user_id, SUM(amount) AS total_amount
FROM orders
GROUP BY user_id
HAVING SUM(amount) >= 10000;
WHEREは集計前の行に対して条件を指定しますが、HAVINGは集計後のグループに対して条件を指定します。
テーブルを結合するJOIN
複数テーブルを結合してデータを取得するのがJOINです。
INNER JOIN(内部結合)
両方のテーブルに存在するデータのみ取得します。
-- usersとordersを結合して注文したユーザー名と金額を取得
SELECT
users.name,
orders.product,
orders.amount
FROM orders
INNER JOIN users ON orders.user_id = users.id;
-- テーブルにエイリアスを付けると読みやすい
SELECT
u.name,
o.product,
o.amount
FROM orders AS o
INNER JOIN users AS u ON o.user_id = u.id;
LEFT JOIN(左外部結合)
左テーブル(FROM側)のデータは全件取得し、右テーブルに一致するものがなければNULLになります。
-- 注文していないユーザーも含めて取得
SELECT
u.name,
o.product,
o.amount
FROM users AS u
LEFT JOIN orders AS o ON u.id = o.user_id;
-- 山田美咲(user_id=4)は注文なし → product, amountがNULL
INSERT・UPDATE・DELETE
INSERT — データを追加
-- 1件追加
INSERT INTO users (name, age, prefecture)
VALUES ('中村健太', 29, '福岡県');
-- 複数件追加
INSERT INTO users (name, age, prefecture) VALUES
('小林明', 26, '神奈川県'),
('渡辺優子', 33, '北海道');
UPDATE — データを更新
-- id=3のユーザーの年齢を更新
UPDATE users
SET age = 23
WHERE id = 3;
-- 複数カラムを同時更新
UPDATE users
SET age = 35, prefecture = '京都府'
WHERE id = 2;
注意: WHERE句を忘れると全レコードが更新されます。必ず確認してから実行しましょう。
DELETE — データを削除
-- id=4のユーザーを削除
DELETE FROM users WHERE id = 4;
-- 東京都以外のユーザーをすべて削除(注意!)
DELETE FROM users WHERE prefecture != '東京都';
こちらもWHERE句を忘れると全件削除になります。本番環境ではBEGIN/ROLLBACKでトランザクションを使って慎重に実行しましょう。
よく使うSQLパターン
-- 最新5件の注文を取得
SELECT * FROM orders ORDER BY ordered_at DESC LIMIT 5;
-- NULLのレコードを検索(IS NULLを使う)
SELECT * FROM users WHERE prefecture IS NULL;
-- 重複を除いた都道府県一覧(DISTINCT)
SELECT DISTINCT prefecture FROM users;
-- テーブルの全レコード数確認
SELECT COUNT(*) FROM orders;
スッキリわかるSQL入門 第4版
ドリル付きで手を動かしながらSQLを学べる入門書。SELECT文の基礎からJOIN・サブクエリ・ウィンドウ関数まで丁寧に解説。MySQL/PostgreSQL両対応。
※ アフィリエイトリンクを含みます
※ アフィリエイトリンクを含みます
まとめ
SQLの基本操作を整理します。
- SELECT + WHERE: データを検索・絞り込み
- ORDER BY / LIMIT: 並び替えと件数制限
- GROUP BY + 集計関数: グループ別の集計(COUNT, SUM, AVGなど)
- JOIN: 複数テーブルの結合(INNER JOIN, LEFT JOIN)
- INSERT / UPDATE / DELETE: データの追加・更新・削除
まずはローカルにMySQL(MAMP/XAMPP)またはPostgreSQLをインストールし、サンプルデータを入れて実際にクエリを打ってみましょう。手を動かすことで理解が格段に深まります。