Hitachi

Hitachi Advanced Data Binder SQLリファレンス


7.19.8 限定述語

表副問合せの結果と値式の結果を比較して判定します。

〈この項の構成〉

(1) 指定形式

限定述語::=値式{=|<>|!=|^=|<|<=|>|>=}{{ANY|SOME}|ALL}表副問合せ

(2) 指定形式の説明

値式

限定述語の評価対象列を指定します。値式の形式で指定します。値式については,「7.20 値式」を参照してください。

ANYまたはSOME

表副問合せの結果の任意の行のうち,値式との比較条件を満たしている行が1つでもある場合は,限定述語の結果が真になります。

なお,ANYまたはSOMEのどちらを指定しても結果は同じになります。

ALL

次に示すどちらかの条件を満たしている場合に,限定述語の結果が真になります。

  • 表副問合せの結果のすべての行が,値式との比較条件を満たしている場合

  • 表副問合せの結果が0行(空集合)の場合

表副問合せ

表副問合せについては,「7.3 副問合せ」を参照してください。

(3) 述語の評価

(a) ANYまたはSOMEを指定した場合

  • 表副問合せの結果の任意の行のうち,値式との比較条件を満たしている行が1つでもある場合は,限定述語の結果が真になります。

  • 次に示すどちらかの条件を満たしている場合は,限定述語の結果が偽になります。

    • 表副問合せの結果のすべての行が,値式との比較条件を満たしていない場合

    • 表副問合せの結果が0行(空集合)の場合

  • 上記以外の場合は不定になります。

ANYまたはSOMEを指定した限定述語の結果を次の表に示します。

表7‒10 ANYまたはSOMEを指定した場合の限定述語の結果

項番

表副問合せの各行に対する比較結果

限定述語の結果

1

真の行あり

2

真の行なし

不定あり

不定

3

不定なし

4

0行(空集合)

(b) ALLを指定した場合

  • 次に示すどちらかの条件を満たしている場合は,限定述語の結果が真になります。

    • 表副問合せの結果のすべての行が,値式との比較条件を満たしている場合

    • 表副問合せの結果が0行(空集合)の場合

  • 表副問合せの結果の任意の行のうち,値式との比較条件を満たさない行が1つでもある場合は,限定述語の結果が偽になります。

  • 上記以外の場合は不定になります。

ALLを指定した限定述語の結果を次の表に示します。

表7‒11 ALLを指定した場合の限定述語の結果

項番

表副問合せの各行に対する比較結果

限定述語の結果

1

偽の行あり

2

偽の行なし

不定あり

不定

3

不定なし

4

0行(空集合)

(4) 規則

  1. 表副問合せの結果の列数は1になるようにしてください。

  2. 式にバイナリデータを指定した場合,比較演算子には=<>!=,および^=だけが指定できます。

  3. 値式には配列データを指定できません。

  4. 表副問合せの選択式の値式には配列データを指定できません。

(5) 留意事項

  1. 限定述語を指定した場合,作業表が作成されることがあります。作業表が作成される作業表用DBエリアの容量が正しく見積もられていない場合,性能低下の原因となることがあります。作業表用DBエリアの容量見積もりについては,マニュアルHADB システム構築・運用ガイドを参照してください。作業表の詳細については,マニュアルHADB AP開発ガイド作業表が作成されるSQLを実行する際の考慮点を参照してください。

  2. 限定述語(=ANY指定または=SOME指定)を指定した場合,HADBによって表副問合せの結果の重複排除を行います。

(6) 例題

例題

顧客表(USERSLIST)と販売履歴表(SALESLIST)から,商品コード(PUR-CODE)がP001の商品を購入した顧客の情報を検索します。

SELECT * FROM "USERSLIST"
    WHERE "USERID"=ANY(SELECT "USERID" FROM "SALESLIST"
                            WHERE "PUR-CODE"='P001')

下線部分が限定述語の指定です。