WHERE句とは
WHERE句は、テーブルデータの検索条件を指定するための SQL構文です。
WHERE句という抽出条件がテーブルデータと重なる部分を抽出します。
WHERE句を扱えるようになれば、データベースに保存された膨大なデータの中から特定のレコードを検索できるようになります。
WHERE句と SELECT文と組み合わせることでデータの検索対象のしぼりこみやUPDATE文と組み合わせることでデータの更新対象の指定ができます。
UPDATE文と組み合わせた場合の構文は次のとおりです。
UPDATE
フィールド名
FROM
テーブル名
WHERE
演算子を使って更新条件を指定
基本的な演算子
データの検索条件を指定するのに用いる演算子の一覧表です。
演算子 | 意味 | 例 |
= | 等しい | 従業員番号 = 1000 |
> | 大きい | 従業員番号 > 1000 |
>= | 以上 | 従業員番号 >= 1000 |
< | 小さい | 従業員番号 < 1000 |
<= | 以下 | 従業員番号 <= 1000 |
!= | 等しくない | 従業員番号 != 1000 |
これらの演算子を用いた WHERE句のサンプルコードの実行例を紹介します。
WHERE句を用いた条件検索の実行例
employees_no (従業員番号) が 1000未満のデータを抽出する SQLは次のように表します。
SELECT
*
FROM
employees
WHERE
employees_no < 1000
実行前
employees_no | birth_date | first_name | last_name | gender | hire_date |
998 | 1990-07-30 | Takuya | Satou | M | 2021-04-01 |
999 | 1995-12-24 | Rin | Suzuki | F | 2019-10-05 |
1000 | 1988-06-06 | Kenta | Takahashi | M | 2019-07-20 |
1001 | 1997-03-08 | Mei | Tanaka | F | 2022-05-27 |
1002 | 1983-11-11 | Taichi | Itou | M | 2006-02-12 |
実行後
employees_no | birth_date | first_name | last_name | gender | hire_date |
998 | 1990-07-30 | Takuya | Satou | M | 2021-04-01 |
999 | 1995-12-24 | Rin | Suzuki | F | 2019-10-05 |
このように 1000未満のデータを検索できました。
応用的な演算子
次に WHERE句をより便利にする応用的な演算子を一覧で紹介します。
演算子 | 意味 | 例 |
AND | 左辺 かつ 右辺 | 従業員番号 = 1000 AND 従業員番号 = 1001 |
OR | 左辺 または 右辺 | 従業員番号 = 1000 OR 従業員番号 = 1001 |
BETWEEN A AND B | A 以上 B 以下 | 従業員番号 BETWEEN 1000 AND 2000 |
IN | いずれかを含む | 従業員番号 IN (1000, 2000) |
LIKE | 文字列の1部を含むパターン ※ % = 0文字以上の任意の文字列 _ = 任意の1文字 | 名前 LIKE ‘A%’ 名前 LIKE ‘A_’ |
IS NULL | NULL値のフィールド | 名前 IS NULL |
IS NOT NULL | 値のあるフィールド | 名前 IS NOT NULL |
サンプルコードを用いて具体的に解説していきます。
AND演算子
employees_no (従業員番号) が 998以上 かつ employees_no (従業員番号) が 1001未満という条件で検索するには次のように記述します。
SELECT
*
FROM
employees
WHERE
employees_no >= 998 AND
employees_no < 10001
実行結果
employees_no | birth_date | first_name | last_name | gender | hire_date |
998 | 1990-07-30 | Takuya | Satou | M | 2021-04-01 |
999 | 1995-12-24 | Rin | Suzuki | F | 2019-10-05 |
1000 | 1988-06-06 | Kenta | Takahashi | M | 2019-07-20 |
このように 2つの条件を満たすデータを検索できます。
OR演算子
employees_no (従業員番号) が 998 または employees_no (従業員番号) が 1000 という条件で検索するには次のように記述します。
SELECT
*
FROM
employees
WHERE
employees_no = 998 OR
employees_no = 1000
実行結果
employees_no | birth_date | first_name | last_name | gender | hire_date |
998 | 1990-07-30 | Takuya | Satou | M | 2021-04-01 |
999 | 1995-12-24 | Rin | Suzuki | F | 2019-10-05 |
このように employees_no (従業員番号) が 998 または 1000 のデータを検索できます。
BETWEEN演算子
employees_no (従業員番号) が 1000 以上 employees_no (従業員番号) が 1002 以下という条件で検索するには次のように記述します。
SELECT
*
FROM
employees
WHERE
employees_no BETWEEN 1000 AND 1002
実行結果
employees_no | birth_date | first_name | last_name | gender | hire_date |
1000 | 1988-06-06 | Kenta | Takahashi | M | 2019-07-20 |
1001 | 1997-03-08 | Mei | Tanaka | F | 2022-05-27 |
1002 | 1983-11-11 | Taichi | Itou | M | 2006-02-12 |
このように BETWEEN条件で範囲を指定できます。
IN演算子
employees_no (従業員番号) が 998,1000,1002 のいずれかに一致という条件で検索するには次のように記述します。
SELECT
*
FROM
employees
WHERE
employees_no IN (998,1000,1002)
実行結果
employees_no | birth_date | first_name | last_name | gender | hire_date |
998 | 1990-07-30 | Takuya | Satou | M | 2021-04-01 |
1000 | 1988-06-06 | Kenta | Takahashi | M | 2019-07-20 |
1002 | 1983-11-11 | Taichi | Itou | M | 2006-02-12 |
このように employees_no (従業員番号) で検索するデータを指定できます。
LIKE演算子
fitst_name が”Ta”で始まるレコードを検索するには次のように記述します。
文字列中の「%」は 0文字以上の任意の文字列、「_」は、任意の 1文字を表します。
SELECT
*
FROM
employees
WHERE
first_name LIKE 'Ta%'
実行結果
employees_no | birth_date | first_name | last_name | gender | hire_date |
998 | 1990-07-30 | Takuya | Satou | M | 2021-04-01 |
1002 | 1983-11-11 | Taichi | Itou | M | 2006-02-12 |
1010 | 1992-07-10 | Tae | Katou | F | 2018-09-08 |
このように、文字列の部分一致で検索することもできます。
▼ IN句の使い方について知りたい方はこちら
【SQL入門2】IN句の使い方やサブクエリの活用方法を解説
▼ BETWEEN句の使い方について知りたい方はこちら
【SQL入門3】between演算子で抽出する範囲を指定する