EQLでは、セットに対してブール式で使用する既存の数値と汎用数値が提供されます。
どちらのタイプの式も、SELECT
句、WHERE
句、HAVING
句、ORDER BY
句、結合条件など、ブール式を受け入れる任意のコンテキストで使用できます。
存在数量詞
既存の数量詞はSOME
キーワードを使用します。 既存の数量詞で、セット内のアイテムのいずれかが、使用される比較演算子に基づいて一致する場合、返される値はTRUE
です。
SOME id IN set SATISFIES (booleanExpr)説明:
式によって、booleanExpr内の識別子idがバインドされます。 このバインディングは、述語内に同じ名前を持つ他の属性を表示します。 このシャドウは、文修飾子を持たない識別子/属性への参照にのみ適用されることに注意してください。
set
の1つ以上の要素に対してbooleanExprがTRUEであれば、数量詞はTRUEです。
SOME
x IN
{ } SATISFIES
(x > 0)はFALSEです。
SOME
x IN
{ -3, -2, 1 } SATISFIES
(x > 0)はTRUEです。
SOME
x IN
{ 5, 7, 10 } SATISFIES
(x > 0)はTRUEです。
SOME
x IN
{ 'foo', '3', '4' } SATISFIES
(TO_INTEGER
(x) > 0)はTRUEです。これは、x ='3'の述語がTRUEであるためです。
SOME
x IN
{ 'foo', '-1', '-2' } SATISFIES
(TO_INTEGER
(x) > 0)がNULLです。 X = '-1'とx = '-2'の述語はfalseですが、x = 'foo'の場合はNULLです。
RETURN results AS SELECT WineID AS idRec, WineType AS wines, Body AS bodyAttr FROM WineState WHERE SOME x IN Body SATISFIES (x = 'Robust') ORDER BY idRec
bodyAttr idRec wines --------------------------------------------- | { Robust, Tannins } | 4 | Red | | { Robust } | 6 | Red | | { Oak, Robust | 8 | Red | | { Robust, Tannins } | 11 | Zinfandel | | { Fresh, Robust } | 19 | White | | { Firm, Robust } | 22 | Blanc de Noirs | | { Robust } | 23 | Brut | | { Robust } | 24 | Brut | | { Firm, Robust } | 25 | White | ---------------------------------------------
Body='Robust'割当てのある9つのレコードのみが返されます。
ユニバーサル数量詞
汎用数量詞は、EVERY
キーワードを使用します。 ユニバーサル数量詞では、セット内のすべてのアイテムが、使用される比較演算子に基づいて一致を持つ場合、返される値はTRUE
です。
EVERY id IN set SATISFIES (booleanExpr)
id
、set
およびbooleanExpr
では、既存の数量詞と同じ意味を持ちます。
式によって、booleanExpr内の識別子idがバインドされます。 このバインディングは、述語内に同じ名前を持つ他の属性を表示します。 このシャドウは、文修飾子を持たない識別子/属性への参照にのみ適用されることに注意してください。
set
の少なくとも1つの要素に対してbooleanExprがFALSEであれば、数量詞はFALSEになります。
set
の各要素に対してbooleanExprがTRUEであれば、数量詞はTRUEです。
EVERY
x IN
{ } SATISFIES
(x > 0)がTRUEの場合。
EVERY
x IN
{ -3, -2, 1 } SATISFIES
(x > 0)はFALSEです。
EVERY
x IN
{ 5, 7, 10 } SATISFIES
(x > 0)がTRUEの場合、述語はセットのすべての値に対してTRUEになるためです。
EVERY
x IN
{ 'foo', '3', '4' } SATISFIES
(TO_INTEGER
(x) > 0)がNULLです。 x = '3'およびx = '4'に対して述語はtrueですが、x = 'foo'に対してはNULLです。
EVERY
x IN
{ 'foo', '-1', '-2' } SATISFIES
(TO_INTEGER
(x)> 0)はFALSEです。これは、x = '-1'の述語がFALSEであるためです。
RETURN results AS SELECT WineID AS idRec, WineType AS wines, Body AS bodyAttr FROM WineState WHERE (EVERY x IN Body SATISFIES (x = 'Robust')) AND (WineID IS NOT NULL) ORDER BY idRec
bodyAttr idRec wines -------------------------------- | | 1 | Chardonnay | | | 2 | Chardonnay | | { Robust } | 6 | Red | | | 17 | Merlot | | | 20 | White | | | 21 | White | | { Robust } | 23 | Brut | | { Robust } | 24 | Brut | --------------------------------
返されるレコードは、本文=Robust割当て(レコード6、23および24)のみが含まれ、本文の割当てがないレコード(レコード1、2、17、20および21)のみです。
問合せでは、WHERE
句でWineID IS NOT NULL式を使用します。 これにより、汎用式が通常はTRUEと評価されるが空のセットを返すシステムの他のレコードが返されることを回避できます。