多重集合条件
多重集合条件は、ネストした表を様々な側面からテストします。
IS A SET条件
IS
A
SET
条件を使用すると、指定されたネストした表が一意の要素で構成されているかどうかをテストできます。この条件は、ネストした表がNULL
の場合に、UNKNOWN
を戻します。それ以外では、ネストした表がセットである場合(ネストした表の長さが0(ゼロ)の場合も含む)にTRUE
を戻し、その他の場合はFALSE
を戻します。
is_a_set_condition::=
例
次の例は、表customers_demo
から、cust_address_ntab
というネストした表の列に一意の要素が含まれる行を選択します。
SELECT customer_id, cust_address_ntab FROM customers_demo WHERE cust_address_ntab IS A SET ORDER BY customer_id; CUSTOMER_ID CUST_ADDRESS_NTAB(STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID) ---------------------------------------------------------------------------------------------- 101 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('514 W Superior St', '46901', 'Kokomo', 'IN', 'US')) 102 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('2515 Bloyd Ave', '46218', 'Indianapolis', 'IN', 'US')) 103 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US')) 104 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('6445 Bay Harbor Ln', '46254', 'Indianapolis', 'IN', 'US')) 105 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('4019 W 3Rd St', '47404', 'Bloomington', 'IN', 'US'))
この例では、表customers_demo
と、データを含むネストした表の列が1つ必要です。この表およびネストした表の列を作成する方法は、「MULTISET演算子」を参照してください。
IS EMPTY条件
IS
[NOT]
EMPTY
条件を使用すると、指定されたネストした表が空かどうかをテストできます。単一の値(NULL
)で構成されたネストした表は、空のネストした表とはみなされません。
is_empty_condition::=
この条件は、コレクションが空の場合にIS
EMPTY
条件にブール値TRUE
を戻し、コレクションが空でない場合にIS
NOT
EMPTY
条件にブール値TRUE
を戻します。ネストした表またはVARRAYにNULL
を指定すると、結果はNULL
になります。
例
次の例は、サンプル表pm.print_media
から、ad_textdocs_ntab
というネストした表の列が空ではない行を選択します。
SELECT product_id, TO_CHAR(ad_finaltext) AS text FROM print_media WHERE ad_textdocs_ntab IS NOT EMPTY ORDER BY product_id, text;
MEMBER条件
member_condition::=
member_condition
は、要素がネストした表のメンバーかどうかをテストするメンバーシップ条件です。expr
が指定されたネストした表またはVARRAYのメンバーと等しい場合、TRUE
が戻されます。expr
がNULLまたはネストした表が空の場合、NULL
が戻されます。
-
expr
の型は、ネストした表の要素型と同じである必要があります。 -
OF
キーワードはオプションであり、条件の動作に影響しません。 -
NOT
キーワードはブール出力を逆にします。expr
が指定されたネストした表のメンバーである場合、FALSE
が戻されます。 -
ネストした表の要素の型は、比較可能な型である必要があります。スカラー型以外の型の比較の可能性は、比較条件を参照してください。
例
次の例は、表customers_demo
から、cust_address_ntab
というネストした表の列に、WHERE
句で指定された値が含まれる行を選択します。
SELECT customer_id, cust_address_ntab FROM customers_demo WHERE cust_address_typ('8768 N State Rd 37', 47404, 'Bloomington', 'IN', 'US') MEMBER OF cust_address_ntab ORDER BY customer_id; CUSTOMER_ID CUST_ADDRESS_NTAB(STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID) ------------ --------------------------------------------------------------------------------- 103 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US'))
この例では、表customers_demo
と、データを含むネストした表の列が1つ必要です。この表およびネストした表の列を作成する方法は、MULTISET演算子を参照してください。
SUBMULTISET条件
SUBMULTISET
条件は、指定されたネストした表が他の指定されたネストした表のサブ多重集合かどうかをテストします。
この演算子はブール値を戻します。nested_table1
がnested_table2
のサブ多重集合である場合、TRUE
が戻されます。次の条件のいずれかが発生する場合、nested_table1
はnested_table2
のサブ多重集合となります。
-
nested_table1
がNULLでなく、また行を含まない場合。空の多重集合はnested_table2
に対してNULL以外の値を示すサブ多重集合であるため、nested_table2
がNULLの場合でもTRUE
が戻されます。 -
nested_table1
とnested_table2
がともにNULLでなく、nested_table1
にNULL要素が含まれず、またnested_table1
内の各要素がnested_table2
内の等しい要素と1対1でマップされている場合。
次の条件のいずれかが発生する場合、NULL
が戻されます。
-
nested_table1
がNULLの場合。 -
nested_table2
がNULLで、またnested_table1
がNULLでもなく空でもない場合。 -
nested_table1
およびnested_table2
の各NULL要素をNULL以外の値に変更し、nested_table1
内の各要素と等しいnested_table2
内の要素の1対1マッピングを有効にすることで、nested_table1
がnested_table2
のサブ多重集合となっている場合。
前述の条件のいずれも発生していない場合は、FALSE
が戻されます。
submultiset_condition::=
-
OF
キーワードはオプションであり、演算子の動作に影響しません。 -
NOT
キーワードはブール出力を逆にします。nested_table1
がnested_table2
のサブセットである場合、FALSE
が戻されます。 -
ネストした表の要素の型は、比較可能な型である必要があります。スカラー型以外の型の比較の可能性は、比較条件を参照してください。
例
次の例は、customers_demo
表から、cust_address_ntab
というネストした表がcust_address2_ntab
というネストした表のサブ多重集合である行を選択します。
SELECT customer_id, cust_address_ntab FROM customers_demo WHERE cust_address_ntab SUBMULTISET OF cust_address2_ntab ORDER BY customer_id;
この例では、表customers_demo
と、データを含むネストした表の列が2つ必要です。この表およびネストした表の列を作成する方法は、MULTISET演算子を参照してください。