比較演算子¶
比較演算子は、式どうしを比較するために条件の中で使用されます。比較の結果は、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 を含むファイルへのパスでなければなりません。