基本情報技術者試験 (FE) 科目 A — データベース
WHERE 句 — 条件で行を絞り込む
WHERE 句は表の各行を 1 行ずつ評価し、条件が真になる行だけを残す。行を選ぶこの操作を関係代数では選択と呼ぶ。NULL との比較は真でも偽でもなく不定 (UNKNOWN) になり、行は残らない。
WHERE は 1 行ずつ判定する
WHERE は表の各行を 1 行ずつ見て、条件が真になる行だけを残します。 行を絞り込むこの操作を関係代数では選択と呼び、 列を絞る射影(SELECT)と対になります。
条件の組み合わせ
WHERE 単価 >= 100 AND 分類 = 'A' -- 両方を満たす
WHERE 分類 = 'A' OR 分類 = 'C' -- どちらかを満たす
WHERE NOT 分類 = 'A' -- 満たさないAND は OR より先に評価されます。A OR B AND C は A OR (B AND C) の意味です。 意図した順序にするには括弧を書きます。試験ではこの優先順位を突いた選択肢が出ます。
試す: AND を OR に変える / 括弧を付けて優先順位を変える
よく使う述語
| 書き方 | 意味 |
|---|---|
単価 BETWEEN 100 AND 300 | 100 以上 300 以下(両端を含む) |
分類 IN ('A', 'C') | 列挙したどれかに一致 |
商品名 LIKE '%ゴム' | 「ゴム」で終わる(% は 0 文字以上) |
商品番号 LIKE 'P0_' | P0 の後にちょうど 1 文字(_ は 1 文字) |
在庫数 IS NULL | 値が入っていない |
LIKE に渡す '%ゴム' のような文字列を、 シラバスではパターン文字列と呼びます。NOT BETWEEN / NOT IN / NOT LIKE のように、それぞれ否定形も書けます。
試す: BETWEEN の値を 120 AND 150 にして、境界が含まれるか確かめる
試す: LIKE の % と _ を入れ替える ('P0_' / 'P%' / '%ート')
NULL は「比較できない」
SQL で最もつまずくのがここです。NULL は値ではなく「不明」なので、 比較した結果は真でも偽でもなく不定 (UNKNOWN) になります。
WHERE 在庫数 = NULL -- 1 行も返らない
WHERE 在庫数 <> NULL -- これも 1 行も返らない
WHERE 在庫数 IS NULL -- これが正解WHERE が行を残すのは条件が真のときだけで、 不定の行は残りません。だから = NULL も <> NULL も 両方とも 0 行になります。「NULL でない行を取りたい」ならIS NOT NULL と書きます。
試す: IS NULL を = NULL や <> NULL に書き換えると 0 行になる
何行に絞られたかを段階で見る
一つ進めるを押すと、FROM で 5 行読み込んだあと WHERE で何行に減ったかが数字で出ます。条件を書き換えて、 絞り込みの効き方を見比べてください。
試す: 一つ進める で FROM → WHERE の行数の変化を見る
試験で問われるポイント
- BETWEEN が両端を含むこと
- AND が OR より優先されること
- NULL は = では判定できないこと。ほぼ毎回どこかで問われます
_が「ちょうど 1 文字」であること(0 文字にはマッチしない)
よくある疑問
「WHERE で絞り込む」の練習問題 2 問
読んだ内容がそのまま出題されます。解答すると解説と、 その SQL を実行シミュレーターで開くリンクが出ます。
自由に試す / 他のレッスンを読む
データベース分野をもっと学ぶ(おすすめ書籍)
イラスト主体で科目Aの全範囲を通読できる入門書。用語の土台を作ってから科目Bのアルゴリズムに入ると理解が速い。
科目Aの頻出テーマを図と語呂で押さえる入門書。参考書と問題集を兼ねるので初受験の一冊目に選びやすい。
公開問題を大量に解いて仕上げるための問題集。擬似言語の読解に慣れた後、本番形式で時間配分を試す段階で使う。
本セクションはAmazonアソシエイトのリンクを含みます。
プログラムの読み方でつまずいたら。
たいてっくが、アルゴリズムの追い方から SQL・データベース設計まで、1対1で学習をサポートします。「コードを目で追っても何をしているか分からない」段階からで大丈夫です。まずは無料相談から。
「教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。」
— H 様(DB・SQL コース受講)「体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。」
— M 様(DB・SQL コース受講)「大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。」
— K 様(DB・SQL コース受講)