比較演算子¶
比較演算子は、式どうしを比較するために条件の中で使用されます。比較の結果は、true 、 false 、 unknown のいずれかになります。
重要
null 値と比較すると unknown が返されます。クエリに WHERE 句と HAVING 句の両方または一方がある場合、条件が true を返す行のみが結果に追加されます。
この動作は SQL 標準によって定義されています。詳細については、「 3 値論理 」を参照してください。
比較演算子を以下に示します。
a < b:aがbより小さい場合は true 。a <= b:aがb以下の場合は true 。a > b:aがbより大きい場合は true 。a >= b:aがb以上の場合は true 。a = b:aとbが等しい場合は true 。a <> b:aがbと異なる場合は true 。a LIKE b:aがパターンbと一致する場合は true 。bはテキスト型の式であり、以下のワイルドカード文字を含めることができます。%(パーセンテージ): 空のテキストを含め、任意の長さのテキストの部分を表します。_(下線): 任意の文字を表します (1 文字のみ)。
オプションで、
ESCAPE句に続けて任意の文字を指定できます。この文字は「エスケープ文字」と呼ばれます。エスケープ文字がワイルドカード文字 (_または%) の前に配置された場合は、ワイルドカードとしてではなく、通常の文字として解釈する必要があることを示しています。エスケープ文字のデフォルト値は
$(ドル) です。パターンに文字
%または_が含まれ、これらをワイルドカードではなくリテラルとみなす場合は、これらの先頭にエスケープ文字を付けてエスケープします。つまり、ESCAPEパラメータで指定された文字、またはそれが指定されていない場合はドルを使用します。たとえば、「$$」とします。例 1) パターン
'%commerce_'は、部分文字列'commerce'とそれに続く任意の文字で終わる文字列に一致します。たとえば、以下の値はこのパターンに一致します。「commerce1」、「New commerce2」例 2) 以下のクエリは
summaryにテキストadslが含まれるinternet_incビューの行を返します。SELECT * FROM internet_inc WHERE summary like '%adsl%'例 3)
discount列の値が「30%」の行をすべて取得するには、次の条件を使用します。SELECT ... FROM ... WHERE discount LIKE '30~%' ESCAPE '~'エスケープ文字 ~ は、「30」の後のパーセンテージ文字をワイルドカードとして扱う必要がないことを示しています。
a regexp_like b:aがパターンbと一致する場合は true 。bは Java 正規表現 です。大文字と小文字を区別せずに比較を実行する場合は、演算子
regexp_ilikeを使用します。この演算子の方が、大文字と小文字の区別を無効にする正規表現 (たとえば、?iで始まる正規表現) を使用するよりパフォーマンスが良いからです。例 : 次のビュー
PRODUCTSについて考えてみます。IDENTIFIER
NAME
AJ00
Product A
AJ17
Product B
AJ1A8
Product C
PQ983
Product D
PQ00
Product E
クエリ
SELECT * FROM products WHERE identifier regexp_like 'AJ\d+'は以下の行を返します。IDENTIFIER
NAME
AJ00
Product A
AJ17
Product B
a regexp_ilike b: 大文字と小文字の区別を無効にして、aがパターンbに一致する場合は true 。bは Java 正規表現 です。a is not NULL:aが NULL でない場合は true 。a is NULL:aが NULL である場合は true 。a is TRUE:aがブール式で true の場合は true 。a is FALSE:aがブール式で false の場合は true 。a in (b [, c]* ):aが右辺 (b、c...) の 1 つまたは複数の式に等しい場合は true 。例 : 以下のステートメントは、
internet_incビューからtaxid属性の値がB78596011またはB78596012のタプルを選択します。SELECT * FROM internet_inc WHERE taxid in ('B78596011', 'B78596012')
IN 演算子に指定できる値の最大数を制限するには、以下のコマンドを実行します。
SET 'com.denodo.vdb.interpreter.parser.condition.maxValuesOnInOperator' = '<enter an integer greater than 0>';
a between b and c:aがb以上で、c以下の場合は true 。例 : 以下の 2 つのステートメントは同じ結果を生成します。
internet_incビューからiinc_id属性の値が 2 ~ 4 の範囲 (すべてを含む) のタプルを選択します。SELECT * FROM internet_inc WHERE iinc_id between 2 AND 4
~: この演算子の評価は、さまざまな類似度アルゴリズムを使用して、2 つのテキスト型オペランドの類似度を評価する 0 ~ 1 の間の値を返します。類似演算子は、比較するオペランドに加えて、使用する類似度アルゴリズムと、パラメータとして 最小 類似度しきい値 を受け取ります。文字列間の類似度がしきい値に達するか、またはしきい値を超えると、条件は true と評価されます。それ以外の場合は、false と評価されます。
左側 (テキスト型) のオペランドが比較する文字列の 1 つです。右側のオペランドはテキスト型エレメントのリストです。このリストの最初のエレメントが比較する第 2 の文字列です。2 番目のエレメントには最小類似度しきい値 (0 ~ 1 の間の値) を指定し、3 番目 (オプション) には使用する類似度アルゴリズムを指定します。
使用可能なアルゴリズムは、類似度関数の場合と同じです (付録「 SIMILARITY 」を参照)。
例 : 以下のクエリは、文字列間でジャロ ウィンクラー編集距離アルゴリズムを使用して、
customernameフィールドの「General Motors Inc」文字列との類似度が 0.7 を超えているタプルを返します。SELECT * FROM internet_inc_cname WHERE customer_name ~ ('General Motors Inc','0.7','JaroWinkler')
XMLExists: この演算子はxml値に対して XQuery 式 (XML クエリ) を実行します。一致が見つかる場合は true を返します。この演算子には 3 通りの指定方法があります。XMLExists(XQueryExpression : text, value : xml)
valueの中にXQueryExpressionの一致がある場合はtrueを返します。XMLExists(XQueryExpression : text, ReadXQueryExpressionFromFile : boolean, value : xml)
ReadXQueryExpressionFromFileがtrueの場合、XQueryExpressionは XQuery 式を含むファイルへのパスです。XMLExists(XQueryExpression : text, ReadXQueryExpressionFromFile : boolean, value : xml, ReadXMLValueFromFile)
ReadXQueryExpressionFromFileがtrueの場合、XQueryExpressionは XQuery 式を含むファイルへのパスでなければなりません。ReadXMLValueFromFileがtrueの場合、ReadXMLValueFromFileは入力の XML を含むファイルへのパスでなければなりません。
