平成27年度 春期 午前 問26
データベース
NULLに関する問題
“電話番号”列に NULL を含む“取引先”表に対して,SQL 文を実行した結果の行数は幾つか。
取引先
| 取引先コード | 取引先名 | 電話番号 |
|---|---|---|
| 1001 | A 社 | 010-1234-xxxx |
| 2001 | B 社 | 020-2345-xxxx |
| 3001 | C 社 | NULL |
| 4001 | D 社 | 030-3011-xxxx |
| 5001 | E 社 | (010-4567-xxxx) |
〔SQL 文〕
SELECT * FROM 取引先 WHERE 電話番号 NOT LIKE '010%'
- ア1
- イ2
- ウ3
- エ4
答えと解説を見る
✓ これが正解ウ3
解説
値の無い行は、否定しても戻ってきません。
設問は、電話番号の列に値の無い行を含む取引先の表に対して、NOT LIKEを使った問合せを実行したときの行数を問うています。読みどころは二つです。一つは、010で始まるという条件が先頭の3文字を見るものであって、どこかに010を含むという意味ではないこと。もう一つは、値の無い行の扱いです。5行を一行ずつ当てます。先頭が010の行は条件に当てはまるので、否定されて落ちます。先頭が020の行と030の行は残ります。先頭の1文字が括弧である行は010で始まらないので、これも残ります。値の無い行は落ちます。SQLの比較は真と偽の二つではなく、真、偽、不定の三つで考えるからです。分からない値が010で始まるかどうかも分からないため判定は不定となり、不定を否定しても不定のままです。WHERE句は真の行だけを通すので、不定の行は残りません。よって残るのは3行です。
ほかの選択肢はなぜ違うのか
- ア1:先頭の3文字ではなく、番号のどこかに01が現れるかどうかで判定し、さらに値の無い行も落とした場合の数です。この読み方では020で始まる1行しか残らず、%の位置が先頭を指していることを見落としています。
- イ2:括弧で始まる番号を010で始まるものと読み、値の無い行も落とした場合の数です。残ると数えたのは020と030で始まる2行で、括弧が1文字目に来ている点が抜け落ちています。
- エ4:値の無い行についても、010で始まらないのだから残ると数えた場合の数です。三つの値で考える論理では、分からない値に対する判定は不定になり、否定しても真に変わらないため、その行は通りません。
出典:平成27年度 春期 応用情報技術者試験 午前 問26
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)