IS NULL演算子とIS NOT NULL演算子

構文

is_null_expression ::= condition_expression [IS [NOT] NULL]

condition_expression ::= 
   comparison_expression | exists_expression 
    | is_of_type_expression | in_expression

セマンティクス

IS NULL演算子は、入力式の結果がNULLかどうかをテストします。入力式で複数の項目が返されると、エラーが発生します。入力式の結果が空の場合、IS NULLはfalseを返します。それ以外の場合、IS NULLは、入力式で計算された単一項目がNULLの場合にのみtrueを返します。IS NOT NULL演算子はNOT (IS NULL cond_expr)と等価です。NULLについては、表2-2で説明しています。

例6-63 既知の収入がないすべてのユーザーのID、名および姓を選択する

ユーザー・データを保持するアプリケーションについて考えてみます。例で使用する表のトピックでusers表を参照してください。

SELECT id, firstName, lastName FROM users u
WHERE u.income IS NULL

説明: ユーザーに既知の収入がない場合はユーザー表にNULL値が移入されていると仮定し、前述の問合せでは、incomeフィールドにNULL値があるユーザーの詳細をフェッチしています。

出力:
{"id":40,"firstName":"Joanna","lastName":"Smith"}

例6-64 航空会社手荷物追跡アプリケーションから、受託手荷物にタグが関連付けられている乗客のチケット番号および氏名をフェッチする

航空会社手荷物追跡アプリケーションについて考えてみます。例で使用する表のトピックでBaggageInfo表を参照してください。

SELECT ticketNo,fullname
FROM BaggageInfo bag
WHERE EXISTS bag.bagInfo.tagNum [$element IS NOT NULL]

説明: 航空会社手荷物追跡アプリケーションでは、乗客が運んでいるすべての受託手荷物に一意のタグ番号が関連付けられています。この問合せでは、タグ番号が割り当てられている(つまり、bagInfo表内のtagNumフィールドがnullではない)乗客の詳細をフェッチします。EXISTS演算子を使用して、tagNumフィールドにNULL値が含まれているかどうかを確認しています。

出力:
{"ticketNo":1762330498104,"fullname":"Michelle Payne"}
{"ticketNo":1762340683564,"fullname":"Mary Watson"}
{"ticketNo":1762377974281,"fullname":"Kendal Biddle"}
{"ticketNo":1762320569757,"fullname":"Lucinda Beckman"}
{"ticketNo":1762392135540,"fullname":"Adelaide Willard"}
{"ticketNo":1762399766476,"fullname":"Raymond Griffin"}
{"ticketNo":1762324912391,"fullname":"Elane Lemons"}
{"ticketNo":1762390789239,"fullname":"Zina Christenson"}
{"ticketNo":1762340579411,"fullname":"Zulema Martindale"}
{"ticketNo":1762376407826,"fullname":"Dierdre Amador"}
{"ticketNo":176234463813,"fullname":"Henry Jenkins"}
{"ticketNo":1762311547917,"fullname":"Rosalia Triplett"}
{"ticketNo":1762320369957,"fullname":"Lorenzo Phil"}
{"ticketNo":1762341772625,"fullname":"Gerard Greene"}
{"ticketNo":1762344493810,"fullname":"Adam Phillips"}
{"ticketNo":1762355527825,"fullname":"Doris Martin"}
{"ticketNo":1762383911861,"fullname":"Joanne Diaz"}
{"ticketNo":1762348904343,"fullname":"Omar Harvey"}
{"ticketNo":1762350390409,"fullname":"Fallon Clements"}
{"ticketNo":1762355854464,"fullname":"Lisbeth Wampler"}
{"ticketNo":1762357254392,"fullname":"Teena Colley"}

21 rows returned