SQLの備忘録とマークダウンの書き方練習です
目次
- 使用するテーブル
- 列の指定(SELECT)
- 条件指定(WHERE)
- 並びかえ(ORDER BY)
1.使用するテーブル
今回は以下の「users」テーブルを例にします
id |
name |
age |
is_active |
1 |
佐藤太郎 |
16 |
1 |
2 |
山田花子 |
26 |
0 |
3 |
鈴木次郎 |
18 |
0 |
4 |
田中A美 |
28 |
1 |
何かの会員データベースだと思ってください。それぞれの列の意味は以下の通りとなります
- id:ID
- name:名前
- age:年齢
- is_active:アクティブなユーザ(1ならアクティブ、0なら非アクティブ)
2.列の指定(SELECT)
基本的な書き方
例「usersテーブルから全ての列を抽出したい」
書き方
- テーブル名→users
- 列名→*
※「*(アスタリスク)」は全ての列という意味
実行結果(usersテーブルがそのまま抽出されます)
id |
name |
age |
is_active |
1 |
佐藤太郎 |
16 |
1 |
2 |
山田花子 |
26 |
0 |
3 |
鈴木次郎 |
18 |
0 |
4 |
田中A美 |
28 |
1 |
例「usersテーブルから名前の列を抽出したい」
書き方
実行結果
例「usersテーブルからidと年齢の列を抽出したい」
書き方
- テーブル名→users
- 列名→id, age
※複数ある場合は「,(カンマ)」で区切ります。
SELECT id, age FROM users;
実行結果
id |
age |
1 |
16 |
2 |
26 |
3 |
18 |
4 |
28 |
3.条件指定(WHERE)
条件に一致するデータを抽出したいときは「WHERE」句を使います
基本的な書き方
SELECT 列名 FROM テーブル名 WHERE 条件;
条件の部分では比較演算子や論理演算子を使用して記述します
比較演算子
演算子 |
意味 |
例 |
= |
等しい |
age = 18 (年齢が18のもの) |
!= または <> |
等しくない |
age != 18 または age <> 18 (年齢が18でないもの) |
> |
より大きい |
age > 18 (年齢が18より大きい) |
< |
より小さい |
age < 18 (年齢が18より小さい) |
>= |
以上 |
age >= 18 (年齢が18以上) |
<= |
以下 |
age <= 18 (年齢が18以下) |
BETWEEN A AND B |
A 以上 B 以下 |
age BETWEEN 10 AND 20 (年齢が10以上20以下) |
IN (A, B, C) |
A または B または C に一致 |
name IN ('田中A美', '田中B美', '田中C美') (名前が"田中A美"、"田中B美"、"田中C美"のいずれか) |
LIKE |
パターン一致(部分一致検索) |
name LIKE '田%'("田"で始まる名前) |
IS NULL |
NULLかどうか |
age IS NULL(年齢がNULLのもの) |
IS NOT NULL |
NULLでないか |
age IS NOT NULL(年齢がNULLでないもの) |
論理演算子
演算子 |
意味 |
例 |
AND |
両方の条件が真のとき |
age >= 10 AND is_active = 1 (年齢が10以上かつアクティブ) |
OR |
どちらかの条件が真のとき |
age < 20 OR is_active = 1 (年齢が20未満またはアクティブ) |
NOT |
条件を反転させる |
NOT age < 10(年齢が10未満でない = 年齢が10以上) |
例「usersテーブルから年齢が18歳以上の名前を抽出したい」
書き方
- テーブル名→users
- 列名→name
- 条件→age >= 18
SELECT name FROM users WHERE age >= 18;
実行結果
例「usersテーブルから年齢が18歳以上かつのアクティブなユーザーの名前を抽出したい」
書き方
- テーブル名→users
- 列名→name
- 条件→age >= 18 AND is_active = 1
SELECT name FROM users WHERE age >= 18 AND is_active = 1;
実行結果
例「usersテーブルから年齢が25歳以上または10歳未満のアクティブなユーザーの名前を抽出したい」
書き方
- テーブル名→users
- 列名→name
- 条件→(age >= 25 OR age < 10) AND is_active = 1
SELECT name FROM users WHERE (age >= 25 OR age < 10) AND is_active = 1;
実行結果
4.並びかえ(ORDER BY)
抽出した結果を並び替えたい場合は「ORDER BY」句を使います
--【超シンプルな例】
SELECT 列名 FROM テーブル名 ORDER BY 対象列名 順番;
--【条件があるとき】
SELECT 列名 FROM テーブル名 WHERE 条件 ORDER BY 対象列名 順番;
順番は昇順か降順を指定できます
- 昇順(ASC):上から「0,1,2,3,…」や「A,B,C,…」のように昇るように並び替える
- 降順(DESC):上から「10,9,8,…」や「Z,Y,X,…」のように降りるように並び替える(逆)
例「usersテーブルから年齢が高い順で、同じ年齢なら名前順に抽出したい」
書き方
- テーブル名→users
- 列名→*
- 対象列名1→age
- 順番1→DESC
- 対象列名2→name
- 順番2→ASC
※複数条件で並び替える場合、「対象列名1 順番1, 対象列名2 順番2, …」のようにカンマ区切りで並べ替えます
SELECT * FROM users ORDER BY age DESC, name ASC;
実行結果(省略)
例「usersテーブルからアクティブ会員で年齢が高い順に抽出したい」
書き方
- テーブル名→users
- 列名→*
- 条件→is_active = 1
- 対象列名→age
- 順番→DESC
SELECT * FROM users WHERE is_active = 1 ORDER BY age DESC;
実行結果
id |
name |
age |
is_active |
4 |
田中A美 |
28 |
1 |
1 |
佐藤太郎 |
16 |
1 |