【楽しく学ぶ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

論理演算子

複数の条件を重ねて絞り込みたい場合は、ANDORといった論理演算子を組み合わせます。
参考サイト: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を書けばよいでしょうか…?

お問い合わせ

CONTACT

業務システムに関するお困りごと、WEBサイトの制作など、
まずはお気軽にお問い合わせください。

会員サイト
CONTACT
06-6305-2278
採用サイトはこちらRECRUIT