4.5.8 述語の構文規則
(1) 形式
!! <検索条件>の形式
<検索条件> ::= <左括弧> <検索条件> <右括弧>
|<述語>
|NOT <検索条件>
|<検索条件> OR <検索条件>
|<検索条件> AND <検索条件>
!! <述語>の形式
<述語> ::= <比較述語>
|<論理述語>
|<Between述語>
|<In述語>
|<Like述語>
|<Null述語>
|<Exists述語>
!! <比較述語>の形式
<比較述語> ::= <値式> <比較演算子> <比較述語値式>
<比較述語値式> ::= <値式>|<副問い合わせ>
<比較演算子> ::= <等号演算子>
|<不等号演算子>
|<小なり演算子>
|<大なり演算子>
|<小なり等号演算子>
|<大なり等号演算子>
!! <論理述語>の形式
<論理述語> ::= <値式> IS TRUE
!! <Between述語>の形式
<Between述語> ::= <値式>
〔 NOT 〕 BETWEEN <値式> AND <値式>
!! <In述語>の形式
<In述語> ::= <値式> 〔 NOT 〕 IN <In述語値>
<In述語値> ::= <副問い合わせ>
|<左括弧> <In項目リスト> <右括弧>
<In項目リスト> ::= <値指定> { <コンマ> <値指定> }...
!! <Like述語>の形式
<Like述語> ::= <文字列Like述語>
<文字列Like述語> ::= <値式>
〔 NOT 〕 <Like種別> <パターン文字列>
〔 ESCAPE <エスケープ文字> 〕
<Like種別> ::= LIKE
|XLIKE
<パターン文字列> ::= <値指定>
<エスケープ文字> ::= <値指定>
!! <Null述語>の形式
<Null述語> ::= <値式> IS 〔 NOT 〕 NULL
!! <Exists述語>の形式
<Exists述語> ::= EXISTS <副問い合わせ>
(2) <検索条件>
<検索条件>は,<FROM句>のON条件式<結合指定>や,<WHERE句>に指定します。<検索条件>では,複数の<検索条件>の論理演算を指定できます。
- 形式
<検索条件> ::= <左括弧> <検索条件> <右括弧>
|<述語>
|NOT <検索条件>
|<検索条件> OR <検索条件>
|<検索条件> AND <検索条件>
- <検索条件>についての規則
- <検索条件>の論理演算は,次の順序で評価されます。
- 論理演算の評価順序
- 括弧内
- NOT
- AND
- OR
- 論理演算で指定できるネスト数については,データベースの制限に従います。
- edmSQLでは,DMAの検索モデルのedmQueryOperator_AndNotオペレータに該当する演算子はありません。指定する場合は,ANDとNOTを組み合わせて指定してください。
- edmSQLで提供している論理演算子ANDおよびORは,2項演算子です。DMAの検索モデルのオペレータの仕様とは異なりますので,ご注意ください。複数の被演算子を指定したい場合は,演算子を複数組み合わせて指定してください。
例えば,「a」,「b」,「c」および「d」のAND演算は,「a AND b AND c AND d」または「((a AND b) AND c) AND d」のように表記してください。
- 論理演算子の詳細
- 否定演算
- 演算子:NOT
- 形式:NOT <検索条件>
- 否定演算の演算結果を次の表に示します。
表4-39 否定演算の演算結果
- 論理和演算
- 演算子:OR
- 形式:<検索条件> OR <検索条件>
- 論理和演算の演算結果を次の表に示します。
表4-40 論理和演算の演算結果
- 論理積演算
- 演算子:AND
- 形式:<検索条件> AND <検索条件>
- 論理積演算の演算結果を次の表に示します。
表4-41 論理積演算の演算結果
(3) <述語>
<述語>では,edmSQLで提供されている述語の一覧が定義されています。
- 形式
<述語> ::= <比較述語>
|<論理述語>
|<Between述語>
|<In述語>
|<Like述語>
|<Null述語>
|<Exists述語>
(4) <比較述語>
<比較述語>は,演算子の両辺の比較によって結果を返却します。
- 形式
<比較述語> ::= <値式> <比較演算子> <比較述語値式>
<比較述語値式> ::= <値式>|<副問い合わせ>
<比較演算子> ::= <等号演算子>|<不等号演算子>|<小なり演算子>
|<大なり演算子>|<小なり等号演算子>
|<大なり等号演算子>
- <比較述語>の評価
- 演算子が示す比較演算子が,両辺の被演算子の関係を満たす場合,「真」になります。
- 演算子の示す比較条件が,両辺の被演算子の関係を満たさない場合,「偽」になります。
- 指定した被演算子がNULL値の場合,「不定」になります。
- 指定した被演算子が<副問い合わせ>であり,その検索結果集合が空の場合,「不定」になります。
- <比較述語>の規則
- <比較演算子>の両辺に指定する被演算子には,同じデータ型の値を指定してください。値がNULL値である場合も,同じデータ型にしてください。
- <比較演算子>によって比較できるのは,データ型がBoolean型,Integer32型,String型およびObject型の値です。ただし,演算子によって使用できるデータ型は異なります。
- 比較できるデータ型は,データベースによって制限されます。
- <副問い合わせ>が指定できるのは,<比較演算子>の右辺だけです。
- <副問い合わせ>を<比較演算子>の被演算子に指定する場合,<副問い合わせ>で指定できる<選択項目>は一つだけです。また,<副問い合わせ>の検索結果として得られる検索件数も,1件または0(空集合)になる必要があります。
- <FROM句>に指定する<比較述語>には,<副問い合わせ>は指定できません。
- VariableArray型プロパティを指定する場合は,必ず<フィールド参照>(要素指定の添え字はANY)を指定して,比較できるデータ型のプロパティとして指定してください。また,VariableArray型プロパティのフィールド参照同士の比較はできません。
- <比較述語>で使用する演算子の詳細
- 演算子の詳細を,次の表に示します。
表4-42 <比較述語>で使用できる演算子の詳細
演算子 | 意味 | 比較可能なデータ型 |
---|
<等号演算子> (=) | 値が等しい場合に「真」になります。 | - Boolean型
- Integer32型
- String型
- Object型
|
<不等号演算子> (<>) | 値が等しくない場合に「真」になります。 | - Boolean型
- Integer32型
- String型
|
<小なり演算子> (<) | 左辺の値が右辺の値よりも小さい場合に「真」になります。 | |
<大なり演算子> (>) | 左辺の値が右辺の値よりも大きい場合に「真」になります。 | |
<小なり等号演算子> (<=) | 左辺の値が右辺の値よりも小さいか,等しい場合に「真」になります。 | |
<大なり等号演算子> (>=) | 左辺の値が右辺の値よりも大きいか,等しい場合に「真」になります。 | |
(5) <論理述語>
<論理述語>では,Boolean型の値を評価して結果を返却します。
- 形式
<論理述語> ::= <値式> IS TRUE
- <論理述語>の評価
- <値式>のBoolean型の値が,真(TRUE)の場合に「真」になります。
- <値式>のBoolean型の値が,真(TRUE)以外の場合,「偽」になります。
- <論理述語>の規則
- <値式>に指定できるのは,戻り値がBoolean型の<ルーチンの起動>だけです。なお,<論理述語>に指定する<ルーチンの起動>で呼び出せる関数は,HiRDB Text Search Plug-inと連携するための,次の関数だけです。
contains関数
contains_with_score関数
concept_with_score関数
例えば,WHERE句に,次のように指定できます。
WHERE contains(edmProp_StIndex, '{"コンピュータ"}') IS TRUE
(6) <Between述語>
- 形式
<Between述語> ::= <値式>
〔 NOT 〕 BETWEEN <値式> AND <値式>
- <Between述語>の評価
- 第1の<値式>を「値式1」,第2の<値式>を「値式2」,第3の<値式>を「値式3」とした場合,「値式1」の値が,「値式2」と「値式3」の範囲内の値の場合,「真」になります。範囲外の場合,「偽」になります。
- 第1の<値式>を「値式1」,第2の<値式>を「値式2」,第3の<値式>を「値式3」とした場合,BETWEEN述語は,次の表記と同じ意味を表します。
〔NOT〕((値式2 <= 値式1) AND (値式1 <= 値式3))
- <Between述語>の規則
- 「値式2 ≦ 値式3」である必要はありません。
(7) <In述語>
- 形式
<In述語> ::= <値式> 〔 NOT 〕 IN <In述語値>
<In述語値> ::= <副問い合わせ>
|<左括弧> <In項目リスト> <右括弧>
<In項目リスト> ::= <値指定> { <コンマ> <値指定> }...
- <In述語>の評価
- 第1の<値式>が,<In述語値>の中の任意の値と一致する場合,<IN述語>は「真」になります。
NOTを指定した場合は,第1の<値式>が<In述語値>の中の任意の値と一致するとき,「偽」になります。
- 第1の<値式>が,<In述語値>の中のすべての値と一致しない場合,<IN述語>は「偽」になります。
NOTを指定した場合は,第1の<値式>が,<In述語値>の中のすべての値と一致しないとき,「真」になります。
- <In述語>の規則
- 第1の<値式>のデータ型と,<In述語値>のデータ型は一致させてください。指定できるデータ型は,Boolean型,Integer32型,String型およびObject型です。
- データベースによって,指定できるデータ型や,<In項目リスト>に指定できる<値指定>が制限される場合があります。
- <In項目リスト>を指定する場合は,第1の<値式>に<値指定>は指定できません。
- <In述語>で<副問い合わせ>の検索結果と比較する場合,<副問い合わせ>で指定できる<選択項目>は一つだけです。
- <副問い合わせ>の検索結果集合が空集合の場合は,<IN述語>は「偽」になります。
NOTを指定した場合に,<副問い合わせ>の検索結果集合が空集合のときは,「真」になります。
(8) <Like述語>
- 形式
<Like述語> ::= <文字列Like述語>
<文字列Like述語> ::= <値式>
〔 NOT 〕 <Like種別> <パターン文字列>
〔 ESCAPE <エスケープ文字> 〕
<Like種別> ::= LIKE
|XLIKE
<パターン文字列> ::= <値指定>
<エスケープ文字> ::= <値指定>
- パターンの詳細
- <パターン文字列>
- _:1文字の任意の文字を示します。
- %:0文字以上の任意の文字数の文字列を示します。
- <エスケープ文字>
- <エスケープ文字>は,パターン文字列中に「_」や「%」を記述したい場合に指定する文字です。<エスケープ文字>には,任意の1文字を指定します。
- <Like述語>の評価
- <値式>の値が,<パターン文字列>で表すパターンと一致した場合,「真」になります。
NOTを指定した場合は,<値式>の値が,<パターン文字列>の表すパターンと一致したとき,「偽」になります。
- <値式>の値が,<パターン文字列>の表すパターンと一致しない場合,「偽」になります。
NOTを指定した場合,<値式>の値が,<パターン文字列>の表すパターンと一致しないとき,「真」になります。
- <Like述語>の規則
- <値式>に指定できるのは,String型の値だけです。
- <パターン文字列>に指定できるのは,String型の値だけです。
- <エスケープ文字>に指定できるのは,String型の値だけです。
- <Like述語>は,<FROM句>には指定できません。
- データベースによっては,<値式>,<パターン文字列>,<エスケープ文字>に指定できる値に制限があります。また,処理性能を上げるための指定方法については,データベースの使用方法に従ってください。
- 指定した文字の認識のされ方は,String型がデータベース上でどの文字列型に対応するかに依存します。
- <Like種別>の規則
- <Like種別>がLIKEの場合,パターン文字列とのパターン一致で,大文字・小文字を区別して評価します。
- <Like種別>がXLIKEの場合,パターン文字列とのパターン一致で,大文字・小文字を区別しないで評価します。
(9) <Null述語>
- 形式
<Null述語> ::= <値式> IS 〔 NOT 〕 NULL
- <Null述語>の評価
- <値式>がNULL値の場合に「真」になります。
NOTを指定した場合は,<値式>がNULL値のとき,「偽」になります。
- <値式>がNULL値でない場合に「偽」になります。
NOTを指定した場合は,<値式>がNULL値でないとき,「真」になります。
- <Null述語>の規則
- <値式>に使用できるデータ型は,Boolean型,Integer32型,String型およびObject型(VariableArray型を除く)のプロパティです。ただし,Boolean型のプロパティは,NULL値をとることができません。
データベースによって,指定できるデータ型に制限があります。
(10) <Exists述語>
- 形式
<Exists述語> ::= EXISTS <副問い合わせ>
- <Exists述語>の評価
- <副問い合わせ>の検索結果が,空集合でなければ「真」になります。
- <副問い合わせ>の検索結果が,空集合の場合は「偽」になります。
- <Exists述語>の規則
- <副問い合わせ>の検索結果が空集合とは,検索結果の件数が0件であることです。つまり,検索結果の件数が1以上の場合に,<Exists述語>は「真」になります。
- <Exists述語>の<副問い合わせ>では,SELECT句の<選択項目>には,<アスタリスク>が指定できます。これ以外の<選択項目>に,<アスタリスク>は指定できません。