メインコンテンツへ
データベース

次のSQL文において、CASE式とNULL処理の結果として正しいものはどれか。 SELECT CASE WHEN score IS NULL THEN '未受験' WHEN score >= 60 THEN '合格' ELSE '不合格' END AS 判定 FROM 成績 WHERE 受験者ID = 1; 受験者ID=1のscoreがNULLである場合の判定の値はどれか。

ア.'不合格'
イ.NULL
ウ.'未受験'正解
エ.SQLエラーが発生し結果は返らない

解説

NULLはSQLの「幽霊」。通常の比較演算子では捕まえられない(NULL = NULLはNULL)。IS NULL/IS NOT NULLという特殊な武器が必要!

なぜ ウ が正解か

CASE式はWHEN句を上から順に評価し、最初に真になった条件の値を返す。Step1: score IS NULL → score=NULLなのでTRUE。Step2: 最初の条件が真なので「未受験」を返してCASE評価終了。NULLとの比較はIS NULLを使うことで正しく捕捉できる。

なぜ ア は間違いか

'不合格'はELSEに相当するが、CASE式はWHENを順番に評価するので最初のWHEN(IS NULL)がTRUEの時点でELSEには到達しない。

なぜ イ は間違いか

CASE式自体がNULLを返すのは全WHEN条件がFALSEでELSEもない場合のみ。この例ではELSEが存在し、かつ最初のWHENで「未受験」が返る。

なぜ エ は間違いか

IS NULLは合法なSQL構文。NULLを扱うために標準で用意された演算子であり、エラーは発生しない。

出典: AI生成問題(学習用)