データを追加・取得する — INSERT と SELECT
データを扱う最初の一歩
データベースを作り、テーブルを定義したら、いよいよデータを操作します。 SQL? データベースを操作するための言語。「このテーブルからデータを取得して」などの命令を書く専用の文法がある。 の基本は CRUD(Create・Read・Update・Delete)です。今回は Create(挿入) と Read(取得) にあたる INSERT と SELECT を学びます。
INSERT — データを追加する
基本構文
INSERT文? テーブルに新しい行を追加するSQL文。`INSERT INTO users (name, email) VALUES ('太郎', 'taro@example.com')` のように列名と値を指定する。 は指定したテーブルに新しい行を追加します。
INSERT INTO テーブル名 (カラム1, カラム2, ...) VALUES (値1, 値2, ...);
usersテーブルにデータを追加する
まず前回作成した users テーブルにデータを入れてみましょう。
INSERT INTO users (name, email, age, is_active)
VALUES ('田中 太郎', 'taro@example.com', 28, TRUE);
id と created_at は AUTO_INCREMENT と DEFAULT CURRENT_TIMESTAMP が設定されているので、省略できます。
複数行を一度に挿入する
INSERT INTO users (name, email, age, is_active)
VALUES
('佐藤 花子', 'hanako@example.com', 34, TRUE),
('鈴木 一郎', 'ichiro@example.com', 22, FALSE),
('高橋 美咲', 'misaki@example.com', 29, TRUE),
('渡辺 健太', 'kenta@example.com', 41, TRUE);
複数行を1つの INSERT でまとめることで、個別に実行するより高速に処理できます。
SELECT — データを取得する
SELECT文? テーブルからデータを取得するSQL文。`SELECT * FROM users` のように使う。WHERE で絞り込み、ORDER BY で並び替え、LIMIT で件数を制限できる。 はテーブルからデータを取得するための命令です。最もよく使うSQL文です。
すべての行・すべてのカラムを取得する
SELECT * FROM users;
+----+--------------+----------------------+-----+-----------+---------------------+
| id | name | email | age | is_active | created_at |
+----+--------------+----------------------+-----+-----------+---------------------+
| 1 | 田中 太郎 | taro@example.com | 28 | 1 | 2026-04-10 10:00:00 |
| 2 | 佐藤 花子 | hanako@example.com | 34 | 1 | 2026-04-10 10:00:01 |
| 3 | 鈴木 一郎 | ichiro@example.com | 22 | 0 | 2026-04-10 10:00:02 |
| 4 | 高橋 美咲 | misaki@example.com | 29 | 1 | 2026-04-10 10:00:03 |
| 5 | 渡辺 健太 | kenta@example.com | 41 | 1 | 2026-04-10 10:00:04 |
+----+--------------+----------------------+-----+-----------+---------------------+
特定のカラムだけ取得する
-- 名前とメールアドレスだけ取得
SELECT name, email FROM users;
SELECT * は手軽ですが、本番コードでは必要なカラムだけを指定するのが良いプラクティスです。
WHERE — 条件で絞り込む
WHERE句? SELECT・UPDATE・DELETE文で行を絞り込む条件を指定する部分。`WHERE age >= 20 AND status = 'active'` のように複数条件を AND / OR で組み合わせられる。 句を使うと、条件に一致する行だけを取得できます。
-- is_active が TRUE のユーザーのみ取得
SELECT name, email FROM users WHERE is_active = TRUE;
-- 年齢が30歳以上のユーザー
SELECT name, age FROM users WHERE age >= 30;
-- 特定のメールアドレスのユーザー
SELECT * FROM users WHERE email = 'taro@example.com';
ORDER BY — 並び替える
ORDER BY? クエリ結果を特定の列で並び替える句。ASC(昇順・デフォルト)またはDESC(降順)を指定できる。複数の列を指定して優先順位をつけることも可能。 を使うと取得結果を並び替えられます。
-- 年齢の昇順(小さい順)
SELECT name, age FROM users ORDER BY age ASC;
-- 年齢の降順(大きい順)
SELECT name, age FROM users ORDER BY age DESC;
-- 複数カラムで並び替え(is_activeで降順、次にnameで昇順)
SELECT name, age, is_active
FROM users
ORDER BY is_active DESC, name ASC;
ASC(昇順)がデフォルトなので、ORDER BY age と書くだけでも昇順になります。
LIMIT — 件数を制限する
LIMIT? クエリ結果の取得件数を制限する句。`LIMIT 10` で最初の10件のみ取得する。OFFSET と組み合わせてページネーションを実装できる。 は取得する最大行数を指定します。ページネーションや「最新N件取得」によく使います。
-- 最初の3件だけ取得
SELECT * FROM users LIMIT 3;
-- 3件目から始まる3件(OFFSETと組み合わせ)
-- OFFSET 2 は「2件スキップ」という意味
SELECT * FROM users LIMIT 3 OFFSET 2;
-- ORDER BY と組み合わせて「年齢トップ3」
SELECT name, age FROM users ORDER BY age DESC LIMIT 3;
LIKE — パターンマッチ
文字列の部分一致検索には LIKE を使います。
-- メールアドレスが "example.com" を含む
SELECT * FROM users WHERE email LIKE '%example.com';
-- 名前が「田」で始まる
SELECT * FROM users WHERE name LIKE '田%';
-- 名前に「子」が含まれる
SELECT * FROM users WHERE name LIKE '%子%';
ワイルドカード文字:
%: 0文字以上の任意の文字列_: 任意の1文字
-- 名前が3文字のユーザー(姓名スペース含む5文字)
SELECT * FROM users WHERE name LIKE '__ __';
実践: 複合クエリ
複数の句を組み合わせることで、より実用的なクエリが書けます。
-- アクティブなユーザーを年齢順で上位3件取得
SELECT id, name, age
FROM users
WHERE is_active = TRUE
ORDER BY age DESC
LIMIT 3;
-- 「.com」メールを持つユーザーをメール順で取得
SELECT name, email
FROM users
WHERE email LIKE '%.com'
ORDER BY email ASC;
まとめ
INSERT INTO テーブル (カラム) VALUES (値)でデータを追加する- 複数行は
VALUES (…), (…)でまとめて挿入できる SELECT * FROM テーブルで全件取得、カラムを指定して必要な情報だけ取れるWHEREで絞り込み、ORDER BYで並び替え、LIMITで件数制限LIKEでパターンマッチ(%は任意文字列、_は任意1文字)
次回は更新(UPDATE)と削除(DELETE)を学びます。