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

