TechBlog

SQL入門:SELECT文から始めるデータベース操作の基礎【実例付き】

by あくえり
#SQL #データベース #MySQL #PostgreSQL #初心者
SQL入門ガイド
目次

データベースとSQLとは

データベースとは、データを整理して保存・検索しやすくした仕組みです。Webアプリのユーザー情報、ECサイトの商品データ、SNSの投稿など、ほぼすべてのサービスの裏側でデータベースが動いています。

その中でも最も普及しているのが**RDB(リレーショナルデータベース)**です。RDBはデータをExcelのような「テーブル(表)」の形式で管理します。代表的なRDBには以下があります。

種類特徴
MySQLWebサービスで最も普及。無料・高速
PostgreSQL高機能・厳格な標準準拠。OSSの本番環境向き
SQLiteファイル1つで動く軽量DB。組み込み・開発用途に最適
SQL ServerMicrosoft製。Windowsサーバー環境向き

**SQL(Structured Query Language)**は、これらのRDBを操作するための言語です。データの検索・追加・更新・削除をSQLで指示します。

テーブルの基本構造

本記事では以下のusersテーブルとordersテーブルを使って解説します。

usersテーブル

idnameageprefecture
1田中太郎28東京都
2鈴木花子34大阪府
3佐藤次郎22東京都
4山田美咲41愛知県

ordersテーブル

iduser_idproductamountordered_at
11キーボード120002026-01-10
21マウス35002026-01-15
32モニター450002026-01-20
43キーボード120002026-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徹底指南書 第2版

CASE式・ウィンドウ関数・再帰クエリなど、SQLを深く使いこなすための一冊。中級〜上級者が現場で通用するスキルを磨くのに最適。

※ アフィリエイトリンクを含みます

まとめ

SQLの基本操作を整理します。

  • SELECT + WHERE: データを検索・絞り込み
  • ORDER BY / LIMIT: 並び替えと件数制限
  • GROUP BY + 集計関数: グループ別の集計(COUNT, SUM, AVGなど)
  • JOIN: 複数テーブルの結合(INNER JOIN, LEFT JOIN)
  • INSERT / UPDATE / DELETE: データの追加・更新・削除

まずはローカルにMySQL(MAMP/XAMPP)またはPostgreSQLをインストールし、サンプルデータを入れて実際にクエリを打ってみましょう。手を動かすことで理解が格段に深まります。

共有: