WHERE句は、SQLを学ぶ上で最初にぶつかる「条件指定」の基本です。
ここを押さえないとSQL問題は1問も解けないので、確実にものにしてください。
対象試験と出題頻度
WHERE句は、基本情報技術者・応用情報技術者で出題されるテーマです。
SQLのSELECT文を使った抽出問題ではほぼ毎回登場し、条件式の読み取りや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句の位置
※ コード上は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文
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文が選択と射影のどちらに該当するかが出題されました。