#03 MySQLデータベースを使ってみよう

データを追加・取得する — INSERT と SELECT

データを扱う最初の一歩

データベースを作り、テーブルを定義したら、いよいよデータを操作します。 SQL? データベースを操作するための言語。「このテーブルからデータを取得して」などの命令を書く専用の文法がある。 の基本は CRUD(Create・Read・Update・Delete)です。今回は Create(挿入)Read(取得) にあたる INSERTSELECT を学びます。

INSERTでデータを追加し、SELECTで取得する INSERT 文 INSERT INTO users (name, email, age) VALUES ('田中', 'taro@..', 28); 追加 usersテーブル(追加後) id name email age 1 田中太郎 taro@.. 28 ← NEW 2 佐藤花子 hanako@.. 34 3 鈴木一郎 ichiro@.. 22 MySQL Database SELECT 文 SELECT name, email FROM users WHERE age >= 25 ORDER BY age; 取得 取得結果(age >= 25 のみ) name email 田中太郎 taro@.. age=28 佐藤花子 hanako@.. age=34 鈴木一郎 age=22 ← 除外 SELECTはデータを変更しない「読み取り専用」の操作
図1: 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);

idcreated_atAUTO_INCREMENTDEFAULT 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文の構文と各句の役割 SELECT name, email, age FROM users WHERE age >= 20 ORDER BY age DESC LIMIT 5; SELECT 取得するカラムを指定 * で全カラム取得 FROM 対象テーブルを指定 複数はJOINで結合 WHERE 絞り込み条件を指定 省略すると全件対象 ORDER BY 並び替え順序 ASC / DESC SQL の実行順序(書く順序とは異なる) ① FROM テーブル読込 ② WHERE 行を絞り込む ③GROUP BY グループ化 ④ HAVING 集計後絞込 ⑤ SELECT 列を選択 ⑥ORDER BY 並び替え ⑦ LIMIT 件数制限
図2: SELECT文の構文と各句の役割

すべての行・すべてのカラムを取得する

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)を学びます。