前回、データベースのテーブル・行・列の概念を確認し、DB Browser for SQLite を準備しました。今回から実際に SQL を書いてデータを取り出します。
練習用テーブルを作る
DB Browser for SQLite を起動し、前回作った practice.db を「データベースを開く」から開きます。
上部の「SQL 実行」タブを選ぶと SQL を入力できるエリアが表示されます。SQL を入力したら、エリア上部の実行ボタンを押すと結果が返ります(Ctrl+Return または F5 でも実行できます)。
まず練習用テーブルを作ります。次の SQL を入力して実行します。
CREATE TABLE employees (
id INTEGER PRIMARY KEY,
name TEXT,
department TEXT,
age INTEGER
);
CREATE TABLE は「テーブルを作れ」という命令です。括弧の中に列名と型を並べます。実行すると employees テーブルが作られます。「エラーなしで実行が終了しました」と表示されれば成功です。
| 型 | 意味 | Java の型 |
|---|---|---|
| INTEGER | 整数 | int |
| TEXT | 文字列 | String |
次にデータを入れます。
INSERT INTO employees (id, name, department, age) VALUES (1, '田中太郎', '開発部', 28);
INSERT INTO employees (id, name, department, age) VALUES (2, '鈴木花子', '営業部', 32);
INSERT INTO employees (id, name, department, age) VALUES (3, '佐藤次郎', '開発部', 25);
INSERT INTO employees (id, name, department, age) VALUES (4, '山田美咲', '総務部', 29);
INSERT INTO employees (id, name, department, age) VALUES (5, '高橋健一', '営業部', 35);
INSERT INTO は「テーブルに行を追加しろ」という命令です。5人分のデータが入りました。
SELECT の基本
テーブルからデータを取り出すには SELECT を使います。
すべての列を取得する
SELECT * FROM employees;
* は「すべての列」を意味します。結果は次のように返ります。
| id | name | department | age |
|---|---|---|---|
| 1 | 田中太郎 | 開発部 | 28 |
| 2 | 鈴木花子 | 営業部 | 32 |
| 3 | 佐藤次郎 | 開発部 | 25 |
| 4 | 山田美咲 | 総務部 | 29 |
| 5 | 高橋健一 | 営業部 | 35 |
列を指定して取得する
SELECT name, department FROM employees;
| name | department |
|---|---|
| 田中太郎 | 開発部 |
| 鈴木花子 | 営業部 |
| 佐藤次郎 | 開発部 |
| 山田美咲 | 総務部 |
| 高橋健一 | 営業部 |
必要な列だけを指定することで、見やすい結果が得られます。
WHERE で絞り込む
WHERE をつけると、条件に合う行だけを取り出せます。
特定の値に一致する行
SELECT * FROM employees WHERE department = '開発部';
| id | name | department | age |
|---|---|---|---|
| 1 | 田中太郎 | 開発部 | 28 |
| 3 | 佐藤次郎 | 開発部 | 25 |
数値の比較
SELECT * FROM employees WHERE age >= 30;
| id | name | department | age |
|---|---|---|---|
| 2 | 鈴木花子 | 営業部 | 32 |
| 5 | 高橋健一 | 営業部 | 35 |
使える比較演算子は次のとおりです。
| 演算子 | 意味 |
|---|---|
= | 等しい |
> | より大きい |
< | より小さい |
>= | 以上 |
<= | 以下 |
SQL では等価比較に = を使います(Java の == や JavaScript の === とは書き方が異なります)。
AND と OR で複数条件を組み合わせる
AND — 両方の条件を満たす
SELECT * FROM employees WHERE department = '営業部' AND age >= 33;
| id | name | department | age |
|---|---|---|---|
| 5 | 高橋健一 | 営業部 | 35 |
OR — どちらかの条件を満たす
SELECT * FROM employees WHERE department = '開発部' OR department = '総務部';
| id | name | department | age |
|---|---|---|---|
| 1 | 田中太郎 | 開発部 | 28 |
| 3 | 佐藤次郎 | 開発部 | 25 |
| 4 | 山田美咲 | 総務部 | 29 |
ORDER BY で並び替える
SELECT * FROM employees ORDER BY age;
| id | name | department | age |
|---|---|---|---|
| 3 | 佐藤次郎 | 開発部 | 25 |
| 1 | 田中太郎 | 開発部 | 28 |
| 4 | 山田美咲 | 総務部 | 29 |
| 2 | 鈴木花子 | 営業部 | 32 |
| 5 | 高橋健一 | 営業部 | 35 |
何も指定しないと昇順(ASC)になります。降順にするには DESC をつけます。
SELECT * FROM employees ORDER BY age DESC;
WHERE と組み合わせることもできます。
SELECT * FROM employees WHERE department = '営業部' ORDER BY age DESC;
LIMIT で件数を制限する
データが大量にあるとき、先頭の数件だけ取りたい場合に使います。
SELECT * FROM employees ORDER BY age LIMIT 3;
| id | name | department | age |
|---|---|---|---|
| 3 | 佐藤次郎 | 開発部 | 25 |
| 1 | 田中太郎 | 開発部 | 28 |
| 4 | 山田美咲 | 総務部 | 29 |
年齢が若い順に3人だけ表示されます。
ここまでのまとめ
| SQL | 役割 |
|---|---|
SELECT 列 FROM テーブル | データを取得する |
WHERE 条件 | 条件で絞り込む |
AND / OR | 複数条件を組み合わせる |
ORDER BY 列 | 並び替える |
LIMIT 数 | 件数を制限する |
次の回へ
SELECT * FROM employees ORDER BY age LIMIT 3; を実行して、年齢が若い順に3行だけ返ってくれば今回の確認は完了です。次の回では、データの追加(INSERT)・更新(UPDATE)・削除(DELETE)を扱います。SELECT と合わせて CRUD の基本がそろいます。