プライマリ・コンテンツに移動
Oracle® Database SQL言語リファレンス
11gリリース2 (11.2)
B56299-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

多重集合条件

多重集合条件は、ネストした表を様々な側面からテストします。

IS A SET条件

IS A SET条件を使用すると、指定されたネストした表が一意の要素で構成されているかどうかをテストできます。ネストした表がNULLの場合、条件はNULLを戻します。それ以外では、ネストした表がセットである場合(ネストした表の長さが0(ゼロ)の場合も含む)にTRUEを戻し、その他の場合はFALSEを戻します。

is_a_set_condition::=

is_a_set_condition.gifの説明が続きます。
図「is_a_set_condition.gif」の説明

次の例は、表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_condition.gifの説明が続きます。
図「is_empty_condition.gif」の説明

この条件は、コレクションが空の場合に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.gifの説明が続きます。
図「member_condition.gif」の説明

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_table1nested_table2のサブ多重集合である場合、TRUEが戻されます。次の条件のいずれかが発生する場合、nested_table1nested_table2のサブ多重集合となります。

  • nested_table1がNULLでなく、また行を含まない場合。空の多重集合はnested_table2に対してNULL以外の値を示すサブ多重集合であるため、nested_table2がNULLの場合でも、TRUEが戻されます。

  • nested_table1nested_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_table1nested_table2のサブ多重集合となっている場合。

前述の条件のいずれも発生していない場合は、FALSEが戻されます。

submultiset_condition::=

submultiset_condition.gifの説明が続きます。
図「submultiset_condition.gif」の説明

  • OFキーワードはオプションであり、演算子の動作に影響しません。

  • NOTキーワードはブール出力を逆にします。nested_table1nested_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演算子」を参照してください。