IS_EMPTYおよびIS_NOT_EMPTY関数は、セットが空であるかどうかを判別します。IS EMPTYおよびIS NOT EMPTY関数の構文は、それぞれの関数の代替の構文になります。
Rec ID Body attribute --------------------------- | 16 | { Silky, Tannins } | | 17 | { } | | 18 | { Silky, Tannins } | | 19 | { Fresh, Robust } | | 20 | { } | | 21 | { } | | 22 | { Firm, Robust } | ---------------------------
レコードのうち3つにはBodyが割り当てられておらず(このため、空のセットになります)、他の3つのレコードにはBodyが2つ割り当てられています。
例では、これらの関数はWHERE句内で使用されています。ただし、これらの関数は、SELECTやHAVING句など、任意式が使用できるすべての場所で使用できます。
IS_EMPTY(<set>)ここで、setはセット・データ型の1つのセットです(mdex:string-set、mdex:long-setなど)。たとえば、setは、複数割当てのdouble属性にすることができます。
IS_EMPTY({ }) = TRUE IS_EMPTY({ 1 }) = FALSE
RETURN results AS SELECT WineID AS idRec, Body AS bodyAttr WHERE (WineID BETWEEN 16 AND 22) AND (IS_EMPTY(Body)) ORDER BY idRec
idRec ------ | 17 | | 20 | | 21 | ------
結果を見ると、レコード17、20および21のみが返されていますが、これはBodyセットが空であるためです。
IS EMPTY関数の構文はIS_EMPTYとは異なりますが、セットが空である場合は同様にTRUEを返します。
<set> IS EMPTYここで、setはセット・データ型の1つのセットです(複数割当てのdouble属性など)。
RETURN results AS SELECT WineID AS idRec, Body AS bodyAttr WHERE (WineID BETWEEN 16 AND 22) AND (Body IS EMPTY) ORDER BY idRec
この例の結果は、前述のIS_EMPTYの例の場合と同じです。
IS_NOT_EMPTY(<set>)ここで、setはセット・データ型の1つのセットです。たとえば、setは、複数割当てのジオコード属性にすることができます。
IS_NOT_EMPTY({ }) = FALSE IS_NOT_EMPTY({ 1 }) = TRUE
RETURN results AS SELECT WineID AS idRec, Body AS bodyAttr WHERE (WineID BETWEEN 16 AND 22) AND (IS_NOT_EMPTY(Body)) ORDER BY idRec
bodyAttr idRec ---------------------------- | { Silky, Tannins } | 16 | | { Silky, Tannins } | 18 | | { Fresh, Robust } | 19 | | { Firm, Robust } | 22 | ----------------------------
結果を見ると、レコード16、18、19および22が返されていますが、これはBodyセットが空ではないためです。ただし、レコード17、20および21は、Bodyが割り当てられていないため返されません(このため、これらのセットは空になります)。
IS NOT EMPTY関数の構文はIS_NOT_EMPTYとは異なりますが、セットが空ではない場合は同様にTRUEを返します。
<set> IS NOT EMPTYここで、setはセット・データ型の1つのセットです(複数割当ての文字列属性など)。
RETURN results AS SELECT WineID AS idRec, Body AS bodyAttr WHERE (WineID BETWEEN 16 AND 22) AND (Body IS NOT EMPTY) ORDER BY idRec
この例の結果は、前述のIS_NOT_EMPTYの例の場合と同じです。