助け合いフォーラム
Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26843
問題を開く
EMPLOYEES表のYOMI列に値が入ってない行を検索しようと以下のSQL文を実行しましたが、検索結果は1件も表示されませんでした。
該当のデータは3件あります。
SELECT employee_name, yomi
FROM employees
WHERE yomi = '';
WHERE句をどのように書き換えれば、希望のデータが検索されるでしょうか。
該当のデータは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列の値を判定しているので、希望のデータは検索されません。
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
列の値がNULL値ではないことを判定する場合は、IS NULL演算子とNOT演算子と組合せ、次のように記述します。
使用方法は次のとおりです。
WHERE 項目 IS NULL
SQLを表示
SELECT employee_id, employee_name, manager_id
FROM employees
WHERE manager_id IS NULL;
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;
FROM employees
WHERE manager_id IS NOT NULL;
WHERE yomi = '' について
投稿日 2024/01/29
Oracleでは空文字をNULLとして扱いますよね?
それでは、WHERE yomi = '' でもNULLを検索できないのはなぜですか?
r
rink_rew
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と評価される条件が使用された場合、その問合せに対して行は戻されません。
コメント
この投稿に対して返信しませんか?