基本 ローカル(VS Code + Java) 約20分

SELECT と WHERE と ORDER BY の基本

SELECT、WHERE、ORDER BY を使い、必要な行を取り出して並べ替える基本を学ぶレッスン。

前回、データベースのテーブル・行・列の概念を確認し、DB Browser for SQLite を準備しました。今回から実際に SQL を書いてデータを取り出します。

練習用テーブルを作る

DB Browser for SQLite を起動し、前回作った practice.db を「データベースを開く」から開きます。

practice.db を開いた状態

上部の「SQL 実行」タブを選ぶと SQL を入力できるエリアが表示されます。SQL を入力したら、エリア上部の実行ボタンを押すと結果が返ります(Ctrl+Return または F5 でも実行できます)。

実行ボタン

まず練習用テーブルを作ります。次の SQL を入力して実行します。

CREATE TABLE employees (
  id INTEGER PRIMARY KEY,
  name TEXT,
  department TEXT,
  age INTEGER
);
SQL実行タブに入力した状態

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;

* は「すべての列」を意味します。結果は次のように返ります。

idnamedepartmentage
1田中太郎開発部28
2鈴木花子営業部32
3佐藤次郎開発部25
4山田美咲総務部29
5高橋健一営業部35

列を指定して取得する

SELECT name, department FROM employees;
namedepartment
田中太郎開発部
鈴木花子営業部
佐藤次郎開発部
山田美咲総務部
高橋健一営業部

必要な列だけを指定することで、見やすい結果が得られます。

WHERE で絞り込む

WHERE をつけると、条件に合う行だけを取り出せます。

特定の値に一致する行

SELECT * FROM employees WHERE department = '開発部';
idnamedepartmentage
1田中太郎開発部28
3佐藤次郎開発部25

数値の比較

SELECT * FROM employees WHERE age >= 30;
idnamedepartmentage
2鈴木花子営業部32
5高橋健一営業部35

使える比較演算子は次のとおりです。

演算子意味
=等しい
>より大きい
<より小さい
>=以上
<=以下

SQL では等価比較に = を使います(Java の == や JavaScript の === とは書き方が異なります)。

AND と OR で複数条件を組み合わせる

AND — 両方の条件を満たす

SELECT * FROM employees WHERE department = '営業部' AND age >= 33;
idnamedepartmentage
5高橋健一営業部35

OR — どちらかの条件を満たす

SELECT * FROM employees WHERE department = '開発部' OR department = '総務部';
idnamedepartmentage
1田中太郎開発部28
3佐藤次郎開発部25
4山田美咲総務部29

ORDER BY で並び替える

SELECT * FROM employees ORDER BY age;
idnamedepartmentage
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;
idnamedepartmentage
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 の基本がそろいます。