前提のデータ
前提として、次のような2テーブルデータがあるものとします。
users テーブル
| 列名 | 意味 | 内容の説明 |
|---|---|---|
| id | 番号 | ユーザーを一意に識別するためのID |
| name | 名前 | ユーザーの名前 |
| age | 年齢 | ユーザーの年齢 |
| メールアドレス | ユーザーの連絡先メール |
データ
| id | name | age | |
|---|---|---|---|
| 1 | 太郎 | 20 | taro@example.com |
| 2 | 花子 | 25 | hanako@example.com |
| 3 | 次郎 | 30 | jiro@example.com |
orders テーブル
| 列名 | 意味 | 内容の説明 |
|---|---|---|
| id | 注文番号 | 注文を一意に識別するID |
| user_id | ユーザーID | 注文したユーザーを表すID |
| price | 金額 | 注文の合計金額 |
| created_at | 注文日 | 注文が作成された日時 |
データ
| id | user_id | price | created_at |
|---|---|---|---|
| 1 | 1 | 3000 | 2025-01-10 |
| 2 | 1 | 1500 | 2025-01-12 |
| 3 | 2 | 5000 | 2025-01-15 |
| 4 | 3 | 2000 | 2025-01-18 |
SQLite Onlineでテーブル作成しデータを投入する
今回はSQLite OnlineというSQLを簡単に試せるツールを使用します。
真ん中のSQL記述枠に下記を貼り付けます。(すでに何か書いてあった場合は上書きでOK)
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER,
email TEXT
);
CREATE TABLE orders (
id INTEGER PRIMARY KEY,
user_id INTEGER,
price INTEGER,
created_at TEXT
);

そのまま、「Runボタン」を押下します。
真ん中のSQL記述枠に下記を貼り付けます。(STEP2を上書きで貼り付け)
INSERT INTO users (id, name, age, email) VALUES
(1, '太郎', 20, 'taro@example.com'),
(2, '花子', 25, 'hanako@example.com'),
(3, '次郎', 30, 'jiro@example.com');
INSERT INTO orders (id, user_id, price, created_at) VALUES
(1, 1, 3000, '2025-01-10'),
(2, 1, 1500, '2025-01-12'),
(3, 2, 5000, '2025-01-15'),
(4, 3, 2000, '2025-01-18');
そのまま、「Runボタン」を押下します。
テーブルの作成とデータの投入ができたので、これ以降はSQLを同様に真ん中の記述枠へ上書きで貼り付けて、Runボタンで実行して進めてください。
すべてのデータを表示する
SELECT * FROM users;
users テーブルに入っているすべての行と列を表示します。

「*」は「すべて」という意味で、最初に覚える基本の書き方です。
特定の列だけを表示する
SELECT name, age FROM users;
name と age だけを取り出します。
必要な情報だけを表示したいときによく使われます。
条件を指定してデータを絞り込む
SELECT * FROM users WHERE age >= 20;
age が 20 以上のデータだけを表示します。
WHERE は「条件を指定する」ためのものです。
完全に一致するデータを探す
SELECT * FROM users WHERE name = '太郎';
name が 太郎 のデータだけを表示します。
文字列はシングルクォートで囲みます。
複数の条件を同時に指定する
SELECT * FROM users WHERE age >= 20 AND age < 30;
20歳以上かつ30歳未満のユーザーを表示します。
AND は「両方の条件を満たす」という意味です。
どちらかの条件を満たすデータを探す
SELECT * FROM users WHERE age < 18 OR age >= 65;
18歳未満、または65歳以上のユーザーを表示します。
OR は「どちらか一方」です。
条件に当てはまらないものを探す
SELECT * FROM users WHERE age != 20;
age が 20 ではないユーザーを表示します。
!= は「等しくない」という意味です。
あいまい検索をする
SELECT * FROM users WHERE name LIKE '田%';
名前が「田」で始まるユーザーを表示します。
% は「何文字でも続いてよい」という意味です。
文字列を含むデータを探す
SELECT * FROM users WHERE email LIKE '%gmail%';
gmail という文字を含むメールアドレスを持つユーザーを表示します。
並び順を指定する
SELECT * FROM users ORDER BY age;
age が小さい順に並べて表示します。
指定しない場合は登録順になります。
大きい順に並び替える
SELECT * FROM users ORDER BY age DESC;
年齢が高い順に表示します。
DESC は降順を意味します。
表示する件数を制限する
SELECT * FROM users LIMIT 5;
最初の5件だけを表示します。
データが多いときに便利です。
途中からデータを表示する
SELECT * FROM users LIMIT 5 OFFSET 5;
6件目から5件分を表示します。
ページ分割でよく使われます。
データを追加する
INSERT INTO users (name, age, email)
VALUES ('花子', 25, 'hanako@example.com');
users テーブルに新しいデータを1件追加します。
指定した列に対応する値が保存されます。
データを更新する
UPDATE users SET age = 26 WHERE name = '花子';
花子の年齢を26に変更します。
WHERE を書かないと全データが更新されます。
データを削除する
DELETE FROM users WHERE id = 1;
id が 1 のデータを削除します。
こちらも WHERE を忘れると全削除になります。
件数を数える
SELECT COUNT(*) FROM users;
users テーブルに何件のデータがあるかを数えます。
合計を計算する
SELECT SUM(price) FROM orders;
注文金額の合計を求めます。
平均を求める
SELECT AVG(age) FROM users;
ユーザーの年齢の平均値を計算します。
最大値と最小値を求める
SELECT MAX(age), MIN(age) FROM users;
一番高い年齢と一番低い年齢を表示します。
グループごとに集計する
SELECT user_id, COUNT(*) FROM orders GROUP BY user_id;
ユーザーごとに注文回数を数えます。
集計結果に条件をつける
SELECT user_id, COUNT(*)
FROM orders
GROUP BY user_id
HAVING COUNT(*) >= 3;
注文回数が3回以上のユーザーだけを表示します。
HAVING は集計後の条件指定です。
テーブルを結合する
SELECT users.name, orders.price
FROM users
JOIN orders ON users.id = orders.user_id;
ユーザー名と注文金額を一緒に表示します。
JOIN はテーブル同士をつなぐために使います。
データがなくても表示する結合
SELECT users.name, orders.price
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
注文がないユーザーも含めて表示されます。