EQLには、セットに対してブール式を使用するための存在数量詞および汎用数量詞が用意されています。
両方の型の式のいずれも、SELECT句、WHERE句、HAVING句、ORDER BY句、結合条件など、ブール式を受け入れる任意のコンテキストで出現可能です。
存在数量詞ではSOMEキーワードを使用します。存在数量詞では、使用されている比較演算子に関して、セット内のいずれかの項目が一致している場合、TRUE値が返されます。
SOME id IN set SATISFIES (booleanExpr)ここで、
この式は、booleanExpr内の識別子idをバインドします。このバインディングにより、条件内で同じ名前を持つ他の属性に影効果が付けられます。影効果が付けられるのは、文修飾子を持たない識別子/属性に対する参照のみです。
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をバインドします。このバインディングにより、条件内で同じ名前を持つ他の属性に影効果が付けられます。影効果が付けられるのは、文修飾子を持たない識別子/属性に対する参照のみです。
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 | --------------------------------
返されるレコードは割当てがBody='Robust'の1つのみであるレコード(レコード6、23および24)、およびBodyが割り当てられていないレコード(レコード1、2、17、20および21)だけです。
この問合せでは、WHERE句内の"WineID IS NOT NULL"式の使用方法について注意してください。こうすることにより、システム内で汎用式が通常TRUEと評価される他のレコードは返さずに、空のセットを返します。