戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

応用情報技術者 2011年 秋期 午前2 問29


問題文

価格設定年月日にNULLを含む“商品”表に対して、次の問合せを行った。この検索結果の行数は幾つか。   SELECT 商品コード FROM 商品 WHERE 価格設定年月日 < '2011-12-01'
応用情報技術者 2011年 秋期 午前2 問29の問題画像

選択肢

ア:1
イ:2(正解)
ウ:3
エ:4

🔒 解説は解答すると表示されます

NULLを含む列の比較【午前2解説】

正解の理由

問合せの条件は「価格設定年月日 < '2011-12-01'」です。各行を評価すると、S001(2009-12-31)と S002(2008-03-31)は2011年12月1日より前なので真(TRUE)になり選択されます。S004(2011-12-01)は等しいので「より前」ではなく偽(FALSE)です。S003 は価格設定年月日が NULL なので、比較の結果は真でも偽でもない「不明(UNKNOWN)」になり、WHERE句では選択されません。したがって検索結果は2行で、イが正解です。

解法ステップ

  1. WHERE句の条件「価格設定年月日 < '2011-12-01'」を確認する。
  2. 各行の価格設定年月日を '2011-12-01' と比較する。
  3. SQLの三値論理に従い、結果が TRUE の行だけを数える(FALSE と UNKNOWN は除外)。
行ごとの判定:
  • S001: '2009-12-31' < '2011-12-01' → TRUE(選択される)
  • S002: '2008-03-31' < '2011-12-01' → TRUE(選択される)
  • S003: NULL < '2011-12-01' → UNKNOWN(選択されない)
  • S004: '2011-12-01' < '2011-12-01' → FALSE(選択されない)

選択肢別の誤答解説

  • ア: 1
    S001 と S002 はどちらも条件を満たすので、1行にはなりません。
  • イ: 2(正解)
    S001 と S002 の2行が選択されます。
  • ウ: 3
    NULL の行(S003)を「日付が無いので条件を満たす」と考えたり、S004 を「以前」として含めたりすると3行になりますが、どちらも誤りです。
  • エ: 4
    全行が選択されるのは、NULL の行も等しい日付の行も TRUE と評価した場合で、誤りです。

よくある誤解

  • NULL との比較は FALSE ではなく UNKNOWN になります。WHERE句は TRUE の行だけを選ぶので、NULL の行は「<」でも「>=」でも選ばれません。
  • 「<」は「より前(未満)」であり、同じ日付は含みません。同じ日付も含めたい場合は「<=」を使います。

補足コラム

NULL の行も結果に含めたい場合は、IS NULL を条件に加えます。
SELECT 商品コード
FROM 商品
WHERE 価格設定年月日 < '2011-12-01'
   OR 価格設定年月日 IS NULL;
この問合せなら S001、S002、S003 の3行が選択されます。

FAQ

Q. NULL = NULL は TRUE になりますか?
A. なりません。NULL = NULL も UNKNOWN です。NULL かどうかを調べるには IS NULL / IS NOT NULL を使います。
Q. 日付を文字列として比較してよいのですか?
A. DATE型の列と '2011-12-01' のような日付リテラルの比較は、日付の前後関係で評価されます。

関連キーワード: NULL、三値論理、比較演算子、IS NULL、WHERE句
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

応用情報技術者を
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について