助け合いフォーラム

Oracle DB

Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26843
問題を開く
EMPLOYEES表のYOMI列に値が入ってない行を検索しようと以下のSQL文を実行しましたが、検索結果は1件も表示されませんでした。
該当のデータは3件あります。

 SELECT employee_name, yomi
 FROM employees
 WHERE yomi = '';

WHERE句をどのように書き換えれば、希望のデータが検索されるでしょうか。

正解

WHERE yomi IS NULL;

解説

フィールドに値が格納されていない状態をNULL値といい、列がNULL値であるかを判定するには、IS NULL演算子を使用します。IS NULL演算子では、列の値がNULL値である場合に条件が成立します。
NULL値は特殊な値ですので、列の値がNULL値かどうかの判定はIS NULL演算子以外の比較演算子ではできません。

設問のSQL文のようにNULL値に対して=(等号)などの比較演算子を使用した場合、条件の判定がNULL値となり検索結果は1行も表示されません。(エラーにはなりません)

以上より、
・WHERE yomi IS NULL;
が正解となります。

その他の選択肢については以下のとおりです。

・WHERE yomi = "";
文字リテラルを二重引用符(")で囲むとエラーとなります。

・WHERE yomi IS NOT NULL;
IS NOT NULL演算子は、NULL値でない場合に条件が成立します。

・WHERE employee_name IS NULL;
YOMI列ではなくEMPLOYEE_NAME列の値を判定しているので、希望のデータは検索されません。

参考

IS NULL演算子を使用すると、列の値がNULL値であるかどうかを調べることができます。
使用方法は次のとおりです。

 WHERE 項目 IS NULL

 
 
SQLを表示
SELECT employee_id, employee_name, manager_id
FROM employees
WHERE manager_id IS NULL;


列の値がNULL値ではないことを判定する場合は、IS NULL演算子とNOT演算子と組合せ、次のように記述します。

 
 
SQLを表示
SELECT employee_id, employee_name, manager_id
FROM employees
WHERE manager_id IS NOT NULL;
上に戻る

WHERE yomi = '' について

投稿日 2024/01/29

Oracleでは空文字をNULLとして扱いますよね?
それでは、WHERE yomi = '' でもNULLを検索できないのはなぜですか?

2024/01/29 16:06

''(空文字/長さ0の文字値)はNULLとして扱われるので、

  • =での比較はできない (結果がUNKNOWNとなる)
  • NULLを検索したければ、IS NULL / IS NOT NULL を使用しなければならない。

ということですね。「WHERE yomi = ''」では、NULLを=で検索することになります。

確かにOracleのNULLの扱いはクセがあると言えるかもしれませんが、参考URLに記載のマニュアルに以下のとおり記載されてますので。

NULLを検査するには、比較条件IS NULLおよびIS NOT NULLのみを使用します。NULLを他の条件で使用して、その結果がNULLの値に依存する場合、結果はUNKNOWNになります。
SELECT文のWHERE句でUNKNOWNと評価される条件が使用された場合、その問合せに対して行は戻されません。


コメント

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?