WHERE句とは?うぇあく
WHERE句とは、SQLで行の絞り込み条件を書く句で、FROMが作った行の集合に対して評価され、条件が真になった行だけが次の段階へ渡る。評価順序はFROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BYで、集約の前に効くのがWHERE、集約の後に効くのがHAVINGという位置づけになる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
表を丸ごと取り出してから手続き型のコードで絞る書き方では、通信量も処理量も表の大きさに比例して膨らむ。条件をデータベース側へ渡せば、索引を使って必要な行だけを読むという最適化の余地が生まれる。何が欲しいかだけを書き、取り方はDBMSに委ねるという宣言型の性質が、この句にそのまま現れている。
具体例
SELECT * FROM 商品 WHERE 価格 >= 1000 なら価格1000円以上の行だけが残る。IS NULL、BETWEEN、IN、LIKE、EXISTSといった述語が使え、結合条件をONではなくWHEREに書くこともできる。索引が効くかどうかは条件の書き方で変わる。
試験での引っ掛け
絞り込む対象は行であって列ではない点が基本で、列を選ぶのはSELECT、並べ替えはORDER BY。集約関数の結果で絞るときはWHEREではなくHAVINGを使う。またNULLとの比較は=では真にならず、IS NULLと書く必要がある。
関連用語
出た過去問
出典:平成31年度 春期 応用情報技術者試験 午前 問28(IPA)解説で登場
過去3年分の記録を保存している“試験結果”表から、2018年度の平均点数が600点以上となったクラスのクラス名と平均点数の一覧を取得するSQL文はどれか。ここで…
正解:SELECT クラス名, AVG(点数) FROM 試験結果 WHERE 受験年月日 BETWEEN '2018-04-01' AND '2019-03-31' GROUP BY クラス名 HAVING AVG(点数) >= 600
要点:行の絞り込みはWHERE、集約結果の絞り込みはHAVINGに書く
2018年度に限定するには受験年月日を2018年4月1日から2019年3月31日の範囲でWHERE句により行単位で絞り込む。そのうえでクラス名でGROUP BYし、グループ全体の集計値に対する条件はHAVING句に書く必要があるため、HAVING AVG(点数) >= 600 とする。
出典:令和5年度 秋期 応用情報技術者試験 午前 問28(IPA)解説で登場
更新可能なビューを作成するSQL文はどれか。ここで、SQL文中に現れる基底表は全て更新可能とする。
正解:CREATE VIEW 高額商品(商品番号, 商品名, 商品単価) AS SELECT 商品番号, 商品名, 商品単価 FROM 商品 WHERE 商品単価>1000
要点:更新可能ビューは単一表の選択と射影に限られる
ビューが更新可能であるためには、ビューの各行が基底表の1行に一意に対応し、更新内容を基底表へ一意に反映できる必要がある。単一の表からWHERE句で行を絞り、列をそのまま射影しただけのビューはこの条件を満たすので更新可能である。DISTINCT、GROUP BY、集約関数を含むビューは元の行との対応が失われるため更新できない。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。