更新日:
第1章と第2章では、テーブルのデータをすべて取得する基本のSELECT文を扱いました。ただ、実際のシステム開発では、テーブル内に何千万件ものデータが眠っているケースも珍しくありません。膨大な情報から目的のデータだけを絞り込む。そのために条件を指定する仕組みが、今回学ぶ「WHERE句」です。条件を上手に指定して、取得するデータを必要な分だけに制限してみましょう。
比較演算子
WHERE句ではWHEREの後ろに条件式を記述します。
条件式とは、その判定結果が必ず真(TRUE)か偽(FALSE)になる式のこと。多くは「=」や「<」といった記号を含んだ計算式になります。これらの記号を比較演算子と呼びます。
参考サイト:MySQL 公式サイト(Comparison Operators)
基本的な6つの比較演算子
| 比較演算子 | 意味 |
|---|---|
| = | 左右の値が等しい |
| < | 左辺は右辺より小さい |
| > | 左辺は右辺より大きい |
| <= | 左辺は右辺の値以下 |
| >= | 左辺は右辺の値以上 |
| <> or != | 左右の値が等しくない |
IS NULL
列の値が空(NULL)かどうかを判定するときは、IS NULL演算子を使います。逆にNULLではないデータを探すなら、IS NOT NULL演算子の出番。
① 例)社員テーブルで電話番号を登録していない社員を取得する。
| name1 | name2 | tel |
|---|---|---|
| 山田 | 次郎 | (NULL) |
| 佐藤 | 花子 | (NULL) |
※注意点があります。NULLは「=」や「<>」といった記号では判定できません。必ずIS NULLかIS NOT NULLを使いましょう。
参考サイト:MySQL 公式サイト(Problems with NULL)
LIKE演算子
文字列が特定のパターンに一致しているか調べる作業を、パターンマッチングと呼びます。SQLでこれを行うのがLIKE演算子。部分一致による検索を可能にします。
ここで使える記号は「_(アンダーバー)」と「%(パーセント)」の2つ。これらをワイルドカードと呼び、LIKE演算子を掛け合わせた条件指定を曖昧検索と呼びます。
参考サイト:MySQL 公式サイト(Pattern Matching)
② 例)都道府県テーブルから「県」という字で終わる4文字の都道府県を取得する。
| name |
|---|
| 神奈川県 |
| ● 和歌山県 |
| 鹿児島県 |
アンダーバー(_)は、その位置に「任意の1文字が入る」という意味を持ちます。
③ 例)社員テーブルから姓に「田」という字が含まれる社員を取得する。
| name1 |
|---|
| 江田 |
| 南田 |
| 田端 |
パーセント(%)は、「0文字以上の任意の文字列」を表す記号。取得したいデータの桁数や文字の長さが決まっていない場合に重宝します。
BETWEEN演算子
指定した範囲内に値が収まっているかどうか。これを判定する際に便利なのがBETWEEN演算子です。
参考サイト:MySQL 公式サイト(BETWEEN Operator)
④ 例)収支テーブルから出費が0円から1000円までのデータを取得する。
| expense | date | expenditure |
|---|---|---|
| 交通費 | 2026/05/10 | 800 |
| 飲食費 | 2026/05/11 | 1000 |
| 娯楽費 | 2026/05/12 | 500 |
この書き方をした場合、0円や1000円といった「指定した境界の値そのもの」も結果に含まれます。
IN演算子
IN演算子は、カッコの中に並べた複数の値のどれかに合致するかを判定します。これを使うと、多くの値と一度に比較できるので記述がすっきりします。
逆のパターン、つまり指定したリストのどれにも合致しないデータを探すときは、NOT IN演算子を選びましょう。
参考サイト:MySQL 公式サイト(IN Operator)
⑤ 例)収支テーブルから費目が飲食費、娯楽費であるデータを取得する。
| expense | date | expenditure |
|---|---|---|
| 飲食費 | 2026/05/11 | 1000 |
| 娯楽費 | 2026/05/12 | 500 |
論理演算子
複数の条件を重ねて絞り込みたい場合は、ANDやORといった論理演算子を組み合わせます。
参考サイト:MySQL 公式サイト(Logical Operators)
⑥ 例)社員テーブルからシステム部の男性を取得する。
| group_id | sex_id | name1 | name2 |
|---|---|---|---|
| 1 | 1 | 山田 | 次郎 |
ANDとORは、左右の両辺に条件式を置いて繋ぐ演算子です。これに対し、右辺の条件だけに作用するNOT演算子というものもあります。NOTを置くと、条件式の結果が反転。真は偽に、偽は真に逆転します。
⑦ 例)社員テーブルからシステム部の女性(男性ではない)を取得する。
| group_id | sex_id | name1 | name2 |
|---|---|---|---|
| 1 | 2 | 佐藤 | 花子 |
複数の論理演算子を混ぜるときは、処理される優先順位に注意してください。基本的には、(1) NOT ➔ (2) AND ➔ (3) OR の順番で評価されます。意図した順番で計算させたい場合は、算数と同じように「かっこ ( )」でくくりましょう。評価の優先順位を一番上に引き上げることができます。
例)社員テーブルから部署がシステム部もしくはWeb事業企画部で、年齢が20代もしくは30代の社員を取得する。
どのようなSQLを書けばよいでしょうか…?

