平成27年度春期 応用情報技術者試験 午前 問26
“電話番号”列に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
解答・解説を見る
正解:ウ
AI解説
SQLは3値論理であり、NULLとの比較(LIKE、NOT LIKEを含む)は真でも偽でもないUNKNOWNとなり、WHERE句では行が選択されない。よってNULLのC社は抽出されない。E社の電話番号は先頭が「(」なので'010%'に一致せず、NOT LIKEの条件を満たす。結果はB社(020)、D社(030)、E社の3行で、ウが正解である。 ア: 1行は誤り。010で始まらない行はB社・D社・E社の3行あり、1行ではない。 イ: 2行は、E社を「010で始まる」と誤認して除外した場合の数え方である。E社の先頭文字は「(」であり'010%'には一致しないため、E社も抽出される。 ウ: 正解。抽出されるのはB社・D社・E社の3行である。NULLのC社はNOT LIKEでも抽出されない点がポイントである。 エ: 4行は、NULLのC社まで含めた誤りである。NULLとの比較結果はUNKNOWNとなり、NOT LIKEの条件でも行は選択されない。 💡 NULLは「=」「<>」「LIKE」「NOT LIKE」のいずれでも抽出されず、IS NULL/IS NOT NULLでのみ判定できる。NOT条件の問題ではNULL行の扱いが定番のひっかけである。
※Web掲載用に表記を一部変更しています。著作権はIPAに帰属します。