FE EXAM

WHERE句(行の絞り込み)

問合せで条件に合う行だけを絞り込むSQLの句。

INTERACTIVE VISUALIZATION
条件に合う(真)
合わない(偽)
SQL
SELECT 名前, 年齢
FROM 社員
WHERE 年齢 >= 30
シナリオ
ステップ1 / 4
STEP 1/4元の表を確認する社員表に4行あります。このうち「年齢が30以上」の人だけを取り出したい、という場面です。WHERE 句は、表の中から条件に合う行だけを絞り込む役割を持ちます。
社員 表 — 条件: 年齢 >= 30
名前年齢判定
佐藤28
鈴木34
高橋41
田中25
解説

📌
WHERE句とは

全行WHERE条件で絞る合う行だけ

WHERE 句とは、問合せで条件に合う行だけを絞り込む SQL の句のことです。表のすべての行を1つずつ条件と照らし合わせ、条件が成り立つ(真になる)行だけを残します。

身近な例で考えると、たくさんの本の中から条件に合う本だけを棚から抜き出す作業に似ています。「2020年以降に出版された本だけ」のように条件を決め、それに当てはまる本だけを取り出すイメージです。当てはまらない本は棚に残します。

上のツールで▶ボタンを押すと、各行を「年齢 >= 30」という条件で1つずつ判定し、真(○)の行だけが残り、偽(×)の行が外される流れを確認できます。

📐
比較・論理演算子

WHERE 句の条件は、比較演算子で値を比べて作ります。代表的なものは次のとおりです。


=:等しい(例:部署 = '営業'
<>:等しくない
> ・ <:より大きい・より小さい
>= ・ <=:以上・以下(例:年齢 >= 30

複数の条件を組み合わせたいときは、論理演算子でつなぎます。
AND(論理積):両方の条件を満たす行だけ(例:年齢 >= 30 AND 部署 = '開発'
OR(論理和):どちらか一方でも満たせば残す
NOT(否定):条件を満たさない行を残す

「30歳以上の営業部」のように複数条件で絞り込むときに、AND・OR を使い分けます。AND は条件を厳しく(数が減る方向)、OR は条件をゆるく(数が増える方向)する、と覚えると間違えにくいです。

🔍
LIKE・IN等の使い方

LIKE '佐%'佐 で始まる文字列佐藤・佐々木 → ○IN (1, 3)いずれかに一致ID=1 か 3 → ○

比較演算子だけでは表しにくい条件のために、WHERE 句には便利な記法が用意されています。代表的なものは次のとおりです。


LIKE:あいまいな文字列の一致。ワイルドカード %(0文字以上の任意の文字列)と _(任意の1文字)を使う(例:名前 LIKE '佐%' =佐で始まる)
IN:複数の値のいずれかに一致(例:部署 IN ('営業', '開発')
BETWEEN:範囲内に収まる(例:年齢 BETWEEN 30 AND 40
IS NULL:値が NULL(=値なし)かどうかを判定する

たとえば 部署 IN ('営業', '開発')部署='営業' OR 部署='開発' と同じ意味で、OR を並べるより短く書けます。これらを比較演算子・論理演算子と組み合わせることで、目的のデータをぴったり絞り込めます。

🔬
なぜ WHERE は1行ずつ判定するのか

表の行を上から順に1つずつ検査する田中/35年齢 >= 30○ 真山田/28年齢 >= 30× 偽佐藤/42年齢 >= 30○ 真鈴木/24年齢 >= 30× 偽真の行だけ最終結果に残る(2行)

WHERE 句が「1行ずつ判定する」のは、データベースが表をリスト(行の集まり)として持っているからです。WHERE の条件は「この行の値が条件を満たすか?」という質問で、その答えは真(true)か偽(false)のどちらかしかありません。

処理の流れはシンプルです。
・表の1行目から順番に、条件式を当てはめて計算する
・答えが真(true)なら、その行を結果に残す
・答えが偽(false)なら、その行を捨てる
・全行を見終わったら処理完了

上のツールの「判定」列に表示される「○ 真」「× 偽」がまさにこれです。条件 年齢 >= 30 を各行に当てはめ、真なら緑(残す)・偽なら赤(取り除く)と色分けして確認できます。NULL(値なし)の場合は真でも偽でもない「不明」となり、その行は除外されます。

⚖️
WHERE と HAVING の違い:いつ絞り込むか

FROMWHERE行を絞るGROUP BYまとめるHAVING集計後絞る集計前(各行に条件)集計後(グループに条件)

WHERE と HAVING は、どちらも「絞り込む」句ですが、絞り込むタイミングがまったく異なります。
WHERE:GROUP BY で集計する前に各行を絞り込む。行1件ずつに条件をかける
HAVING:GROUP BY で集計した後にグループ(集計値)を絞り込む。グループ1つずつに条件をかける

具体例で確認します。社員表から「30歳以上の人だけ」を対象にして「部署ごとの人数が2人以上のグループ」を取り出したい場合、次のように書きます。

SELECT 部署, COUNT(*)
FROM 社員
WHERE 年齢 >= 30 ← 行を先に絞る
GROUP BY 部署
HAVING COUNT(*) >= 2 ← 集計後にグループを絞る

集計前に行を減らしたい → WHERE」「集計後のグループに条件をつけたい → HAVING」と使い分けます。HAVING を WHERE の代わりに使うことはできません。なぜなら WHERE は集計前に動くので、集計関数(COUNT など)の結果がまだ出ていないからです。

練習問題

🎯
基本情報技術者 練習問題

Q1.WHERE句の説明として最も適切なものはどれか。
A.取り出す列を指定する句
B.結果を並び替える句
C.条件に合う行だけを絞り込む句
D.同じ値ごとにまとめて集計する句
Q2.「年齢が30以上40以下」を表すWHERE句の条件として正しいものはどれか。
A.WHERE 年齢 >= 30 OR 年齢 <= 40
B.WHERE 年齢 >= 30 AND 年齢 <= 40
C.WHERE 年齢 = 30 AND 年齢 = 40
D.WHERE 年齢 LIKE 30
Q3.「名前が『佐』で始まる行」を抽出するWHERE句として正しいものはどれか。
A.WHERE 名前 = '佐'
B.WHERE 名前 IN ('佐')
C.WHERE 名前 LIKE '佐%'
D.WHERE 名前 >= '佐'

関連コンテンツ