Exists演算子

構文

exists_expression ::= EXISTS concatenate_expression

セマンティクス

Exists演算子は、入力式によって返された順序が空かどうかをチェックし、それぞれfalseまたはtrueを返します。特殊なケースは、入力式でNULLが返される場合です。この場合、入力式が常に1つ以上の項目を返すことがわかっている場合(この場合、EXISTSはtrueを返します)を除き、EXISTSもNULLを返します。

例6-49 Exists演算子

住所に郵便番号がないすべてのユーザーを検索します。

SELECT id FROM users u
WHERE NOT EXISTS u.address.zip;

上の問合せでは、郵便番号にjson null値が含まれるユーザーが選択されないことに注意してください。次の問合せには、これらのユーザーも含まれています。

SELECT id FROM users u
WHERE NOT EXISTS u.address.zip OR u.address.zip = null;

Users表に、address列がNULLの行Rが含まれている場合どうなりますか。一般に、SQL for Oracle NoSQL Databaseでは、NULLは欠落値ではなく不明な値として解釈されます。したがって、行Rでは住所は不明であり、その結果、郵便番号が何であるか、または郵便番号が含まれているかどうかはわかりません。この場合、式u.address.zipはRでNULLを返し、exists u.address.zipもNULLを返します。これは、前述の問合せでは行Rが選択されないことを意味します。一方、行Rは次の問合せによって選択されます。この場合、一部の行で住所が不明(つまりNULL)であっても、すべての行に住所があります。したがって、式u.addressがNULLを返しても、exists u.addressはtrueを返します。

SELECT id FROM users u
WHERE EXISTS u.address;