STITストラテジスト試験 午前Ⅰ

平成23年度秋期 ITストラテジスト 午前Ⅰ 問10

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

価格設定年月日に NULL を含む “商品” 表に対して,次の問合せを行った。この検索結果の行数は幾つか。 SELECT 商品コード FROM 商品 WHERE 価格設定年月日<'2011-12-01'
商品コードを価格設定年月日が2011-12-01より前の行に限定するSQL問合せと、4行の商品表。
商品コードを価格設定年月日が2011-12-01より前の行に限定するSQL問合せと、4行の商品表。

選択肢

  1. ア
    1
  2. イ
    2
  3. ウ
    3
  4. エ
    4
解き方のヒントを見る

NULLを含む条件判定の見方

SQLの条件式を読むときは、値そのものだけでなく、比較の結果が条件判定の中でどのように扱われるかを整理することが重要です。まずは評価の段階を分け、各選択肢がどの段階を述べているかを確認しましょう。

この問題で問われていること

この問題では、NULLを含む値の扱いを個別の答えとして覚えるのではなく、比較・条件判定・結果の採用という流れを分けて捉え、選択肢の説明がどの段階に関するものかを一つずつ確認します。

視点

SQLの条件を考えるときは、入力値の性質、式の評価、判定結果の利用を混同しないように、処理を段階ごとに分けて読む。各段階で何が確定し、何が未確定かをメモすると、説明の前提を比較しやすくなる。

確認ポイント

  • 値の状態と、条件式を評価する段階を分けて整理する
  • 判定結果を次の処理でどう扱う説明かを確認する
  • 選択肢が前提・評価・採用のどこを述べているか照合する
正解と解説を見る

正解

イ

解説

SQLのWHERE句では条件式が真と判定された行だけが検索結果に残る。指定日より前の日付を持つ2行は対象だが、NULLは比較結果が真にならず、指定日と等しい行も小なり条件を満たさないため、結果は2行になる。

理由

価格設定年月日が2011-12-01より前である行は、2009-12-31と2008-03-31の2行です。NULLとの比較は真にならず、2011-12-01は小なり条件を満たさないため、検索結果は2行になる。

比較

この問合せは、表の行数をそのまま数えるのではなく、WHERE句の条件を満たす行だけを数える。日付の大小関係、NULLの扱い、指定日そのものとの比較を分けて確認することが重要です。

選択肢ア

これは不正解だよ。値が1になるには、条件を満たす行が1行だけだと数えることになります。しかし表では、指定日より前の日付を持つ行が複数あり、NULL行と境界日をどう扱うかもSQLの比較規則に従って確認する必要があります。

選択肢イ(正解)

これは正解だよ。WHERE句の条件は真になった行だけを結果に残します。2009-12-31と2008-03-31は2011-12-01より前なので対象です。一方、NULLとの比較は真にならず、2011-12-01は「より前」ではないため、結果は2行になります。

選択肢ウ

これは不正解だよ。3行とするには、日付条件を満たす二つの行に加えて、さらに一行を採用する必要があります。しかしNULLを含む行は比較が真にならず、指定日そのものも小なり条件を満たしません。そのため、3という数は条件と一致しません。

選択肢エ

これは不正解だよ。4行とするのは表の全行を結果に含める数え方です。しかしWHERE 価格設定年月日<'2011-12-01'は全行を無条件に採用する指定ではなく、NULLの行も指定日と同じ行も条件を満たしません。したがって4行にはなりません。

学習のポイント

NULLの比較と不等号の境界条件を、WHERE句の真偽判定と結び付けて学ぶ。

出典:独立行政法人 情報処理推進機構(IPA)平成23年度秋期 ITストラテジスト試験 午前Ⅰ 問10(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針