比較演算子

比較演算子は、式どうしを比較するために条件の中で使用されます。比較の結果は、truefalseunknown のいずれかになります。

重要

null 値と比較すると unknown が返されます。クエリに WHERE 句と HAVING 句の両方または一方がある場合、条件が true を返す行のみが結果に追加されます。

この動作は SQL 標準によって定義されています。詳細については、「 3 値論理 」を参照してください。

比較演算子を以下に示します。

  • a < b: ab より小さい場合は true

  • a <= b: ab 以下の場合は true

  • a > b: ab より大きい場合は true

  • a >= b: ab 以上の場合は true

  • a = b: ab が等しい場合は true

  • a <> b: ab と異なる場合は true

  • a LIKE b: a がパターン b と一致する場合は trueb はテキスト型の式であり、以下のワイルドカード文字を含めることができます。

    • % (パーセンテージ): 空のテキストを含め、任意の長さのテキストの部分を表します。

    • _ (下線): 任意の文字を表します (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 と一致する場合は truebJava 正規表現 です。

    大文字と小文字を区別せずに比較を実行する場合は、演算子 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 に一致する場合は truebJava 正規表現 です。

  • 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 が右辺 (bc...) の 1 つまたは複数の式に等しい場合は true

    例 : 以下のステートメントは、 internet_inc ビューから taxid 属性の値が B78596011 または B78596012 のタプルを選択します。

    SELECT *
    FROM internet_inc
    WHERE taxid in ('B78596011', 'B78596012')
    
  • a between b and c: ab 以上で、 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)
      

      ReadXQueryExpressionFromFiletrue の場合、 XQueryExpression は XQuery 式を含むファイルへのパスです。

    • XMLExists(XQueryExpression : text, ReadXQueryExpressionFromFile : boolean, value : xml, ReadXMLValueFromFile)
      

      ReadXQueryExpressionFromFiletrue の場合、 XQueryExpression は XQuery 式を含むファイルへのパスでなければなりません。

      ReadXMLValueFromFiletrue の場合、 ReadXMLValueFromFile は入力の XML を含むファイルへのパスでなければなりません。