はじめに
こちらのMembersテーブルを使用します。
id | name | age | home |
---|---|---|---|
1 | Yamamoto | 20 | Tokyo |
2 | Sato | 25 | Osaka |
3 | Yamada | 16 | Tokyo |
4 | Tanaka | 35 | Nagoya |
5 | Kato | 42 | Osaka |
LIKE
大文字小文字を区別しない文字列検索を行う
SELECT * FROM テーブル名 WHERE カラム名 LIKE "パターン";
ワイルドカード検索(部分一致)
ワイルドカード文字 | 意味 | 例 |
---|---|---|
% | 0文字以上の任意の文字列 | "A%" → Aで始まる |
_ | 任意の1文字 | "A_" → Aの後に1文字続く |
Yamaで始まるメンバーを取得する
SELECT * FROM Members WHERE name LIKE "Yama%";
id | name | age | home |
---|---|---|---|
1 | Yamamoto | 20 | Tokyo |
3 | Yamada | 16 | Tokyo |
IN
- 指定した値の中に該当するデータを取得する
- 戻り値の型は Boolean
SELECT * FROM テーブル名 WHERE カラム名 IN (値1, 値2, 値3, ...);
年齢が25歳と35歳のメンバーを取得する
SELECT * FROM Members WHERE age IN (25, 35);
id | name | age | home |
---|---|---|---|
2 | Sato | 25 | Osaka |
4 | Tanaka | 35 | Nagoya |
NULLの取り扱い
IN / NOT IN では NULL の抽出ができない。
NULL を抽出したい場合、IS NULL か IS NOT NULL を使用する。
DISTINCT
指定したカラムにおいて、重複データをまとめる
SELECT DISTINCT カラム名 FROM テーブル名;
homeを重複なしで取得する
SELECT DISTINCT home FROM Members;
home |
---|
Tokyo |
Osaka |
Nagoya |
ORDER BY
- 抽出するデータを並び替える
- ASC(昇順、既定値)か DESC (降順)を末尾で指定する
- NULL は最小値として扱われる
SELECT * FROM テーブル名 ORDER BY カラム名 ASC/DESC
年齢の高い順で並べ替える
SELECT * FROM Members ORDER BY age DESC;
id | name | age | home |
---|---|---|---|
5 | Kato | 42 | Osaka |
4 | Tanaka | 35 | Nagoya |
2 | Sato | 25 | Osaka |
1 | Yamamoto | 20 | Tokyo |
3 | Yamada | 16 | Tokyo |
LIMIT
- クエリによる出力結果の行数を制限する
-
ORDER BY
と組み合わせることが多い
SELECT カラム名 FROM テーブル名 LIMIT 抽出する行数(整数)
年齢が若い順に2人のメンバーを取得する
SELECT * FROM Members ORDER BY age ASC LIMIT 2;
id | name | age | home |
---|---|---|---|
3 | Yamada | 16 | Tokyo |
1 | Yamamoto | 20 | Tokyo |
OFFSET
- 指定した行数分だけ結果の表示をスキップする
-
LIMIT
・ORDER BY
と組み合わせることが多い
年齢が3.4番目に高いメンバーを取得する
SELECT * FROM Members ORDER BY age DESC LIMIT 2 OFFSET 2;
id | name | age | home |
---|---|---|---|
2 | Sato | 25 | Osaka |
1 | Yamamoto | 20 | Tokyo |
LIMIT / OFFSET の注意点
複雑なクエリやデータ量が大きい場合には非効率。
→ スキップされた行もすべて読み込まれて処理されるから。
まとめ
- LIKE : 文字列検索(部分一致もOK)
- IN : 指定した値に該当するデータを取得
- DISTINCT : 重複をなくす
- ORDER BY : 並べ替え(昇順・降順)
- LIMIT : 抽出するデータを制限
- OFFSET : 指定した行数分のデータ表示をスキップ
参考文献