Oracle Database SQL(ORACLE MASTER Silver SQL 2019) 無料問題 4 / 10 ・ 分野5: 変換関数と条件式の使用
次の SELECT 文の結果として正しいものはどれか。 SELECT NULLIF(80, 100), NULLIF(100, 100) FROM dual;
- NULL と 100:等しくないときに NULL、等しいときに第2引数
- 100 と NULL:等しくないときは第2引数、等しいときは NULL
- 80 と NULL:等しくないときは第1引数、等しいときは NULL
- NULL と NULL:どちらの組も等しいと判定される
正解と解説を見る
正解: C
正解の理由
SQL Language Reference の NULLIF は、「expr1 と expr2 を比べ、等しければ NULL を返し、等しくなければ expr1 を返す」と定める。80 と 100 は等しくないので 80、100 と 100 は等しいので NULL になる。
違う選択肢
「100 と NULL:等しくないときは第2引数、等しいときは NULL」… 等しくないときに返る値を第2引数と読んだ説明である。NULLIF は2つの式が等しくなければ、第1引数をそのまま返す
「NULL と 100:等しくないときに NULL、等しいときに第2引数」… NULLIF の働きを逆に読んだ説明である。NULLIF は等しいときに NULL を返し、等しくないときに第1引数を返す
「NULL と NULL:どちらの組も等しいと判定される」… 2つの組を等しいと判定する説明である。80 と 100 は等しくないので、1つ目は NULL にならず、第1引数の 80 が返る
押さえどころ
NULLIF(a, b) は CASE WHEN a = b THEN NULL ELSE a END と同じである。第1引数にリテラルの NULL は指定できない。0 での割り算を避けるために NULLIF(列, 0) を使う、という使い方がよくある。
Oracle Database SQL(ORACLE MASTER Silver SQL 2019)の演習アプリ(無料10問・全問は購入で)へ