WHERE句とは
SQLのWHERE句は、条件を指定するクエリで、抽出や更新の対象となるデータの絞り込みを行う場合に用いられます。たとえば、データを抽出する「SELECT」文と組み合わせれば抽出するデータに条件を付けることで抽出対象を絞り込めたり、データを更新する「UPDATE」文と組み合わせればデータの更新対象を絞り込めます。
このように、WHERE句を扱えるようになれば、データベースに保存された膨大なデータの中から条件にあてはまるレコードだけを抽出したり、更新したりできるようになります。
【基本構文】
SELECT文と組み合わせた場合の構文は次のとおりです。
SELECT フィールド名 FROM テーブル名 WHERE 条件
WHERE句で使用できる演算子【基本編】
データの検索条件を指定するのに用いる演算子の一覧表です。
演算子 | 意味 | 例 |
= | 等しい | 従業員番号 = 1000 |
> | 大きい | 従業員番号 > 1000 |
>= | 以上 | 従業員番号 >= 1000 |
< | 小さい | 従業員番号 < 1000 |
<= | 以下 | 従業員番号 <= 1000 |
!= | 等しくない | 従業員番号 != 1000 |
これらの演算子を用いた WHERE句のサンプルコードの実行例を紹介します。
WHERE句の使い方
説明するにあたって次のサンプルテーブルを用います。
「従業員(employee)」テーブル
従業員ID (employees_id) | 生年月日 (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 |
まず、条件を付けずに従業員テーブルのデータを抽出してみましょう。
【実行コード】
SELECT * FROM employees;
従業員ID (employees_id) | 生年月日 (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 |
次に従業員ID(employees_id)が 1000未満のデータを抽出します。
【実行コード】
SELECT * FROM employees WHERE employees_id<1000;
【実行結果】
従業員ID (employees_id) | 生年月日 (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句で使用できる演算子【応用編】
次に 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演算子
従業員ID(employees_id)が998以上かつ従業員ID(employees_id)が1001未満という条件で検索するには次のように記述します。
【実行コード】
SELECT * FROM employees WHERE employees_id>=998 AND employees_id<1001;
【実行結果】
従業員ID (employees_id) | 生年月日 (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演算子
従業員ID(employees_id)が998または従業員ID(employees_id)が1000という条件で検索するには次のように記述します。
【実行コード】
SELECT * FROM employees WHERE employees_id=998 OR employees_id=1000;
【実行結果】
従業員ID (employees_id) | 生年月日 (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 |
このように従業員ID(employees_id)が998または1000のデータを検索できます。
BETWEEN演算子
従業員ID(employees_id)が1000以上かつ1002 以下という条件で検索するには次のように記述します。
【実行コード】
SELECT * FROM employees WHERE employees_id BETWEEN 1000 AND 1002;
【実行結果】
従業員ID (employees_id) | 生年月日 (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演算子
従業員ID(employees_id)が 998,1000,1002 のいずれかに一致という条件で検索するには次のように記述します。
【実行コード】
SELECT * FROM employees WHERE employees_id IN (998,1000,1002);
【実行結果】
従業員ID (employees_id) | 生年月日 (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 |
このように従業員ID(employees_id)で検索するデータを指定できます。
LIKE演算子
fitst_name が”Ta”で始まるレコードを検索するには次のように記述します。
文字列中の「%」は 0文字以上の任意の文字列、「_」は、任意の 1文字を表します。
【実行コード】
SELECT * FROM employees WHERE first_name LIKE 'Ta%';
【実行結果】
従業員ID (employees_id) | 生年月日 (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 |
このように、文字列の部分一致で検索することもできます。
▼ IN句の使い方について知りたい方はこちら
【SQL入門】IN句の使い方やサブクエリの活用方法を解説
▼ BETWEEN句の使い方について知りたい方はこちら
【SQL入門3】between演算子で抽出する範囲を指定する
SQL関連記事
- RDBを操作するデータベース言語「SQL」とは?
- RDB以外のデータベース管理システム「NoSQL」とは?
- RDB管理システム「MySQL」とは?
- RDB管理システム「PostgreSQL」とは?
- RDB管理システム「SQL Server」とは?
- RDB管理システム「SQLite」とは?
- ブラウザ上でMySQLを管理できる「phpMyAdmin」とは?
- データを抽出する「SELECT」文
- データを追加する「INSERT」文
- データを削除する「DELETE」文
- データを更新する「UPDATE」文
- 抽出条件を指定する「WHERE」句
- 抽出条件を指定する「HAVING」句
- 複数の抽出条件をまとめる「IN」句
- 重複レコードを除外する「DISTINCT」
- 抽出範囲を指定する「BETWEEN」演算子
- 抽出条件を満たすレコードの存在の有無を調べる「EXISTS」句
- レコード件数を取得する集計関数「COUNT」関数
- レコードをグループ化する「GROUP BY」句
- 抽出結果を並び替える「ORDER BY」句
- テーブル間のデータを結合する「JOIN」句
- 内部結合「INNER JOIN」句
- 抽出結果を統合して表示する「UNION」句
- データの曖昧検索「LIKE」句
- 条件分岐処理「CASE」式
- 「NULL」の扱い方
SQLの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、SQLに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。