WHERE句は、SQLを学ぶ上で最初にぶつかる「条件指定」の基本です。

ここを押さえないとSQL問題は1問も解けないので、確実にものにしてください。

対象試験と出題頻度

WHERE句は、基本情報技術者・応用情報技術者で出題されるテーマです。

SQLSELECT文を使った抽出問題ではほぼ毎回登場し、条件式の読み取りやHAVING句との使い分けが定番の出題ポイントになっています。

詳細をクリックして確認
対象試験:
基本情報技術者
応用情報技術者
出題頻度:
★★★★☆
ランクA(重要)必ず覚えておくべき

用語の定義

情報処理試験を勉強していると、「WHERE句って要するに何をしてるの?HAVINGと何が違うの?」と混乱しがちです。

WHERE句(WHERE Clause)とは、一言で言うと

 「SQL文の中で、条件に合致する行だけを絞り込むための句

のことです。

イメージとしては、図書館の検索機で『ジャンル=ミステリー』と入力するフィルタです。

図書館には何万冊もの本がありますが、検索機に条件を入れれば該当する本だけが一覧に表示されます。

WHERE句はこれと同じで、テーブルの全行の中から指定した条件を満たす行だけを取り出す「フィルタ」の役割を果たします。

📊 WHERE句の基本情報

項目 内容
英語名 WHERE Clause
分類 DML(データ操作言語)のSELECT / UPDATE / DELETE文で使用
役割 条件式を指定し、合致する行だけを処理対象にする
関係演算との対応 関係代数の「選択(Selection)」に相当
処理タイミング GROUP BYによるグループ化の「前」に評価される

解説

関係データベースのテーブルには数百〜数億行のデータが格納されます。

そこから必要な行だけを取り出すために、SQLには条件指定の仕組みが用意されています。

基本構文と処理順序の中での位置づけ

SELECT文には複数の句がありますが、WHERE句はFROMの直後、GROUP BYの前に処理されます。

つまり「テーブルを読み込んだ直後に、行単位でふるいにかける」のがWHERE句の仕事です。

SELECT文の処理順序とWHERE句の位置

1
FROM(表を指定)
2
WHERE(行を絞る)◀ 今回はココ
3
GROUP BY(グループ化)
4
HAVING(グループを絞る)
5
SELECT(列を取り出す)
6
ORDER BY(並び替え)

※ コード上はSELECTを先頭に書くが、DBMSの内部処理はFROMから始まる

WHERE句で使える主な条件演算子

WHERE句の条件式には、比較演算子や論理演算子のほか、SQL固有のキーワードを組み合わせます。

演算子・キーワード 意味 記述例
=, , , = 比較演算子 WHERE 点数 >= 80
AND / OR / NOT 論理演算子で条件を組み合わせる WHERE 科目 = '国語' AND 点数 >= 80
BETWEEN A AND B A以上B以下の範囲指定 WHERE 価格 BETWEEN 100 AND 500
IN (値リスト) リスト内のいずれかに一致 WHERE 部署 IN ('営業', '企画')
LIKE パターンマッチング(%は0文字以上、_は任意の1文字) WHERE 氏名 LIKE '田%'
IS NULL / IS NOT NULL NULL値の判定(=では判定不可) WHERE 電話番号 IS NOT NULL

図解:WHERE句による絞り込みの流れ

具体例で動きを確認します。

「社員」テーブルから部署が「営業」の行だけを取り出すケースです。

SQL文

SELECT 社員ID, 氏名, 部署
FROM 社員
WHERE 部署 = ‘営業’;

絞り込みのイメージ

社員テーブル(全行)

社員ID氏名部署
001佐藤営業
002鈴木開発
003田中営業
004高橋人事

黄色=条件に合致する行

実行結果

社員ID氏名部署
001佐藤営業
003田中営業

条件に合う2行だけが抽出される

WHERE句とHAVING句の違い

ここだけは確実に押さえてください。

WHERE句は「グループ化前に個々の行を絞る」、HAVING句は「GROUP BYでグループ化した後にグループを絞る」ものです。

比較項目 WHERE句 HAVING句
絞り込み対象 個々の行 グループ化後のグループ
処理タイミング GROUP BYの前 GROUP BYの後
集約関数の使用 使用不可 使用可(AVG, SUM 等)
何となくで覚えたい人向け:もっと簡単に言うと?

WHERE句は「クラス分けする前に、出席者を絞る」操作です。HAVING句は「クラス分けした後に、平均点が低いクラスを除外する」操作です。WHERE句の条件式に集約関数(AVG, SUM など)を書くとエラーになります。集約関数は必ずHAVING句で使う、と覚えれば十分です。

では、この構文が試験でどのように出題されるか見ていきましょう。

💡 WHERE句の核心を3行で

・SQL文で条件に合う行だけを絞り込むための句(関係代数の「選択」に対応)
・比較演算子のほか、BETWEEN・IN・LIKE・IS NULLなどSQL固有のキーワードを使える
・GROUP BYの前に処理される。集約関数を条件にしたい場合はHAVINGを使う


試験ではこう出る!

WHERE句は、FE・APの科目A(午前)でSQL問題が出るたびに登場する最頻出構文です。WHERE句単体の知識を問うというより、SELECT文の中で条件式を正しく読み書きできるかがセットで問われます。

📊 過去問での出題実績

試験回 出題内容 問われたポイント
FE R7年度
科目A 問6
IN句を使ったSELECT文と同じ結果を得られるSQL文を選ぶ問題 ・IN句とOR条件の等価性
・ANDやBETWEENとの混同がひっかけ
FE R5年度
免除 問21
AND/OR/NOTを組み合わせた条件式で「1教科だけ平均以上」の生徒を抽出するSQL文を選ぶ問題 ・論理演算(AND/OR/NOT)の組み合わせ
・ベン図で考えると解きやすい
FE R1秋
午前 問26
GROUP BY+HAVINGの穴埋め。学生ごとの平均点80点以上を抽出 ・HAVINGの位置にWHEREを入れるひっかけ
・GROUP BYの後にWHEREは構文エラー
AP R5秋
午前 問29
副問合せを含むSELECT文の結果行数を問う問題 ・WHERE句内の副問合せの評価順序
・NOT IN+NULLの挙動

📝 IPA試験での出題パターン

パターン1:条件式の読み取り・等価変換
IN句とOR条件の書き換え、AND/OR/NOTの論理組み合わせが問われる。FE R7年度 問6のように「同じ結果が得られるSQL文はどれか」という形式が典型。

 

パターン2:HAVINGとの混同を狙う穴埋め
GROUP BYの直後にWHEREを置く選択肢を紛れ込ませるパターン。FE R1秋 問26が代表例。「GROUP BYの後にWHEREは書けない」と知っていれば瞬殺できる。

 

パターン3:副問合せ内での条件指定
APレベルでは、WHERE句の中にさらにSELECT文を埋め込む副問合せの結果を追いかける問題が登場する。

 

FEレベルでは条件式の論理演算とHAVINGとの区別を押さえれば十分です。副問合せの深い読み取りはAP対策として取り組んでください。


【確認テスト】理解度チェック

ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。


Q. SQLのSELECT文において、WHERE句の説明として最も適切なものはどれでしょうか?

  • A. GROUP BYでグループ化した後に、集約関数の結果をもとにグループを絞り込む。
  • B. FROM句で指定した表から、条件式に合致する行だけをグループ化の前に絞り込む。
  • C. SELECT句で指定した列の値に対して、昇順または降順で並び替えを行う。

正解と解説を見る

正解:B

解説:
WHERE句は、FROM句でテーブルを読み込んだ直後に、条件に合致する行だけを抽出する句です。GROUP BYによるグループ化よりも前の段階で処理されます。

選択肢AはHAVING句の説明です。HAVING句はGROUP BYの後に処理され、集約関数(AVG, SUMなど)を条件に使えます。選択肢CはORDER BY句の説明です。ORDER BY句はSELECT文の最後に処理され、結果の表示順を制御します。


よくある質問(FAQ)

Q. WHERE句で集約関数(AVGやSUMなど)を使うとどうなりますか?

構文エラーになります。WHERE句はGROUP BYの前に処理されるため、まだグループが存在しない段階です。集約関数の結果を条件にしたい場合は、GROUP BYの後に評価されるHAVING句を使います。例えば「平均点が80以上のグループだけ表示したい」なら HAVING AVG(点数) >= 80 と書きます。

Q. WHERE句はSELECT文以外でも使えますか?

使えます。UPDATE文とDELETE文でもWHERE句を指定できます。UPDATE文では「どの行の値を更新するか」、DELETE文では「どの行を削除するか」を条件で絞り込みます。WHERE句を省略すると全行が対象になるため、実務では誤操作を防ぐためにWHERE句の付け忘れに細心の注意を払います。

Q. WHERE句の条件でNULLを比較するとき「= NULL」と書いてはいけないのはなぜですか?

SQLの仕様上、NULLは「値が不明」を意味するため、等号(=)で比較すると結果が「不明(UNKNOWN)」となり、真にはなりません。NULLかどうかを判定するには IS NULL または IS NOT NULL を使う必要があります。この仕様はIPA試験でも狙われるポイントで、「WHERE 列名 = NULL」と書いてある選択肢は不正解と判断できます。

Q. WHERE句と関係代数の「選択」は何が対応していますか?

関係代数の「選択(Selection)」は、表の中から条件を満たす行を取り出す演算です。SQLにおいてはこれがWHERE句に対応します。一方、特定の列だけを取り出す「射影(Projection)」はSELECT句に対応します。FE H25春 午前 問27では、WHERE句を含むSQL文が選択と射影のどちらに該当するかが出題されました。