機能
限定述語は、限定された値の集合との比較を指定します。
記述形式
参照項番
一般規則
比較演算子の種類については、“表2.57 比較演算子”を参照してください。
値式のデータ型と、副問合せのデータ型は、比較可能であることが必要です。比較可能なデータ型については、“表2.58 比較可能なデータ型”を参照してください。
限定子ALLを指定した場合、限定述語の結果は次のようになります。
副問合せの結果が空のとき、または値式の値と副問合せの結果を比較し、副問合せの結果のすべての値について、比較演算が真になる場合、限定述語の結果は真となります。副問合せの結果の値について、1つでも比較演算が偽になる場合は、限定述語の結果は偽となります。限定述語の結果が真または偽でない場合、不定となります。これらの関係を以下に示します。
限定述語の結果 | 副問合せとの比較結果 | 備 考 | ||
---|---|---|---|---|
結果が真の行 | 結果が偽の行 | 結果が不定の行 | ||
真 | なし | なし | なし | 副問合せの結果が空 |
あり | なし | なし |
| |
偽 | あり | あり | あり |
|
あり | あり | なし |
| |
なし | あり | あり |
| |
なし | あり | なし |
| |
不定 | あり | なし | あり |
|
なし | なし | あり |
|
あり: 該当する結果がある
なし: 該当する結果はない
限定子ANYまたはSOMEを指定した場合、限定述語の結果は次のようになります。値式の値と副問合せの結果を比較し、副問合せの結果の値について、1つでも比較演算が真の場合、限定述語の結果は真となります。副問合せの結果の値について、すべての比較演算が偽の場合、限定述語の結果は偽となります。限定述語の結果が真または偽でない場合、不定となります。これらの関係を以下に示します。
限定述語の結果 | 副問合せとの比較結果 | 備考 | ||
---|---|---|---|---|
結果が真の行 | 結果が偽の行 | 結果が不定の行 | ||
真 | あり | あり | あり |
|
あり | あり | なし |
| |
あり | なし | あり |
| |
あり | なし | なし |
| |
偽 | なし | なし | なし | 副問合せの結果が空 |
なし | あり | なし |
| |
不定 | なし | あり | あり |
|
なし | なし | あり |
|
あり: 該当する結果がある
なし: 該当する結果はない
限定述語で“値式 = ANY 副問合せ”と記述したものは、IN述語で“値式 IN副問合せ”と記述したのと同じ意味です。
値式に動的パラメタ指定が指定された場合のDESCRIBE情報は、副問合せのデータ型になります。
使用例
取引製品110を発注している会社名を検索します。
SELECT 会社名 FROM 会社表 WHERE 会社番号 = ANY (SELECT 取引先 (1) FROM 発注表 (1) WHERE 取引製品 = 110) (1)
(1)の問合せ式により導出される結果は、下のようになります。
会社表中の会社番号の値について、(1)で導出された結果と等しい値をもつ行が、少なくとも1つ存在する場合に真となります。したがってこの問合せ結果は下のようになります。
在庫数量が、ある取引先からの発注数量を下回っている製品番号を検索します。
SELECT 製品番号 FROM 在庫表 WHERE 在庫数量 < ANY (SELECT 発注数量 FROM 発注表 WHERE 取引製品 = 製品番号)
上記の問合せ式において、在庫表の製品番号ごとの在庫数量と、発注表の発注数量との関係を次に示します。
発注表中から取引製品ごとに発注数量を取り出します。取り出した発注数量のどれか1つでも、在庫表中の在庫数量よりも多ければ真となります。このとき、比較対象となる在庫数量は、製品番号が発注表中の取引製品と同じである行の値です。上図において、★の部分は、“ANY”の結果が真となる行を表しています。したがって、この問合せの結果は次のようになります。
在庫数量が、すべての取引先の発注数量より下回っている製品番号を検索します。
SELECT 製品番号 FROM 在庫表 WHERE 在庫数量 < ALL (SELECT 発注数量 FROM 発注表 WHERE 取引製品 = 製品番号)
上記の副問合せにおいて、製品番号ごとの在庫表の在庫数量と、発注表の発注数量との行間の関係は、例2の場合と同じです。在庫表の製品番号と同じ取引製品をもつ発注表中のすべての行に対して、各取引先からの発注数量が、在庫数量を上回っている場合に真となります。したがって、この問合せの結果は次のようになります。