ページの先頭行へ戻る
Symfoware Server V10.0.0 SQLリファレンス

2.11.6 限定述語

機能

限定述語は、限定された値の集合との比較を指定します。

記述形式

構文要素の構成

参照項番

一般規則

ALL
  • 限定子ALLを指定した場合、限定述語の結果は次のようになります。

    副問合せの結果が空のとき、または値式の値と副問合せの結果を比較し、副問合せの結果のすべての値について、比較演算が真になる場合、限定述語の結果は真となります。副問合せの結果の値について、1つでも比較演算が偽になる場合は、限定述語の結果は偽となります。限定述語の結果が真または偽でない場合、不定となります。これらの関係を以下に示します。

    表2.59 限定子ALLを指定した場合の限定述語の結果

    限定述語の結果

    副問合せとの比較結果

    結果が真の行

    結果が偽の行

    結果が不定の行

    なし

    なし

    なし

    副問合せの結果が空

    あり

    なし

    なし

      

    あり

    あり

    あり

      

    あり

    あり

    なし

      

    なし

    あり

    あり

      

    なし

    あり

    なし

      

    不定

    あり

    なし

    あり

      

    なし

    なし

    あり

      

    あり: 該当する結果がある

    なし: 該当する結果はない

ANYまたはSOME
  • 限定子ANYまたはSOMEを指定した場合、限定述語の結果は次のようになります。値式の値と副問合せの結果を比較し、副問合せの結果の値について、1つでも比較演算が真の場合、限定述語の結果は真となります。副問合せの結果の値について、すべての比較演算が偽の場合、限定述語の結果は偽となります。限定述語の結果が真または偽でない場合、不定となります。これらの関係を以下に示します。

    表2.60 限定子ANYまたはSOMEを指定した場合の限定述語の結果

    限定述語の結果

    副問合せとの比較結果

    備考

    結果が真の行

    結果が偽の行

    結果が不定の行

    あり

    あり

    あり

      

    あり

    あり

    なし

      

    あり

    なし

    あり

      

    あり

    なし

    なし

      

    なし

    なし

    なし

    副問合せの結果が空

    なし

    あり

    なし

      

    不定

    なし

    あり

    あり

      

    なし

    なし

    あり

      

    あり: 該当する結果がある

    なし: 該当する結果はない

  • 限定述語で“値式 = ANY 副問合せ”と記述したものは、IN述語で“値式 IN副問合せ”と記述したのと同じ意味です。

DESCRIBE情報について
  • 値式に動的パラメタ指定が指定された場合のDESCRIBE情報は、副問合せのデータ型になります。

使用例

1

取引製品110を発注している会社名を検索します。

SELECT  会社名  FROM  会社表
WHERE   会社番号 = ANY
    (SELECT  取引先                                (1)
     FROM   発注表                                (1)
     WHERE  取引製品 = 110)                        (1)

(1)の問合せ式により導出される結果は、下のようになります。

会社表中の会社番号の値について、(1)で導出された結果と等しい値をもつ行が、少なくとも1つ存在する場合に真となります。したがってこの問合せ結果は下のようになります。


2

在庫数量が、ある取引先からの発注数量を下回っている製品番号を検索します。

SELECT  製品番号  FROM  在庫表
WHERE  在庫数量 < ANY
    (SELECT  発注数量
     FROM    発注表
     WHERE   取引製品 = 製品番号)

上記の問合せ式において、在庫表の製品番号ごとの在庫数量と、発注表の発注数量との関係を次に示します。

発注表中から取引製品ごとに発注数量を取り出します。取り出した発注数量のどれか1つでも、在庫表中の在庫数量よりも多ければ真となります。このとき、比較対象となる在庫数量は、製品番号が発注表中の取引製品と同じである行の値です。上図において、★の部分は、“ANY”の結果が真となる行を表しています。したがって、この問合せの結果は次のようになります。

3

在庫数量が、すべての取引先の発注数量より下回っている製品番号を検索します。

SELECT  製品番号  FROM  在庫表
WHERE  在庫数量 < ALL
    (SELECT  発注数量
     FROM    発注表
     WHERE   取引製品 = 製品番号)

上記の副問合せにおいて、製品番号ごとの在庫表の在庫数量と、発注表の発注数量との行間の関係は、例2の場合と同じです。在庫表の製品番号と同じ取引製品をもつ発注表中のすべての行に対して、各取引先からの発注数量が、在庫数量を上回っている場合に真となります。したがって、この問合せの結果は次のようになります。