# 真偽式

真偽式はWHERE節やチェック制約に置くことができます。 チェック制約に置く真偽式には、ここで記述されていない制限があります。 詳細はCONSTRAINT 節を参照してください。 WHERE節に置く真偽式の構文は柔軟なものとなっています。具体的な例は、WHERE節を参照してください。

真偽式にはブーリアン演算子を一つ以上置くことができます。 この演算子はSQL のブーリアン演算子に一覧されています。

表 1. SQL のブーリアン演算子
演算子 | 説明と例 | 構文
--- | --- | ---

AND, OR, NOT

オペランドにとる真偽式を評価します。

    (orig_airport = 'SFO') OR
        (dest_airport = 'GRU')
        -- 真を返す。

    {
      式 AND
        式|
      式 OR
        式 |
      NOT 式
    }

比較演算子

<, =, >, <=, >=, <> は、全ての組み込みの型に適用することができます。

    DATE('1998-02-26') <
        DATE('1998-03-01')
    -- 真を返す。

    式
    {
      < |
      = |
      > |
      <= |
      >= |
      <>
    }
    式

IS NULL, IS NOT NULL

式の結果が空かそうでないかを判定します。

    WHERE MiddleName IS NULL

    式 IS [ NOT ]
      NULL

LIKE

文字式が文字パターンと一致するかを判定します。文字パターンには一つ以上のワイルドカードが含まれます。

%は最初の文字式にて、該当する位置の任意の文字数(0文字以上)の文字列に一致します。

_は文字式にて、該当する位置の一文字に一致します。

それ以外の文字は、文字式にて該当する位置の同じ文字に一致します。

    city LIKE 'Sant_'

%や_をワイルドカードではない文字とするには、ESCAPE節で指定するエスケープ文字を使って文字をエスケープします。

    SELECT a FROM tabA WHERE a
    LIKE '%=_' ESCAPE '='

注: LIKEによる比較ではDerbyは、個々の文字を非メタ文字と比較します。これはDerbyが=による比較のとき行う処理とは違います。=による比較では左辺の文字列全体が、=演算子の右辺の文字列全体と比較されます。より詳細な情報については、Derby ディベロッパーズ ガイドのDerbyにおける文字の照合を参照してください。

    文字式
      [ NOT ] LIKE
      ワイルドカードのある文字式
      [ ESCAPE

    'エスケープ文字']

BETWEEN

最初のオペランドが二つ目と三つ目のオペランドの間の値であるかを判定します。二つ目のオペランドは三つ目のオペランドより小さな値でなければなりません。 この演算子は<=と>=が適用できる型に対してのみ適用できます。

    WHERE booking_date BETWEEN
        DATE('1998-02-26') AND
        DATE('1998-03-01')

    式 [ NOT ]
    BETWEEN 式
      AND 式

IN

表副問合せや値の並びに作用します。左辺の式の値が表副問合せや値の並びに含まれるならば、真を返します。なお、表副問合せは複数行を返してかまいませんが、列は一つでなければなりません。

    WHERE booking_date NOT IN
        (SELECT booking_date FROM
    HotelBookings WHERE rooms_available = 0)

    {
     式 [ NOT ]
        IN
        表副問合せ |
      式 [ NOT ]
        IN ( 式
        [, 式 ]* )
    }

EXISTS

表副問合せに作用して、その表副問合せが行を返すならば真を返し、行が返らないならば偽を返します。表副問合せは複数の列(*を使った場合に限ります。)や行を返すことができます。

    WHERE EXISTS
      (SELECT *
      FROM Flights
      WHERE dest_airport = 'SFO'
      AND orig_airport = 'GRU')

    [NOT] EXISTS 表副問合せ

定量比較

定量比較はALL、ANY、SOMEの何れかが適用された比較演算子 (<,=, >, <=, >=, <>)となります。

これは表副問合せに作用します。表副問合せは複数の行を返すことができますが、単一の列しか返せません。

ALLが指定された場合、表副問合せが返す全ての値に対して、比較の結果が真でなければなりません。ANYないしSOMEが指定された場合、表副問合せが返す何れかの値に対して、比較の結果が真である必要があります。ANYとSOMEは同じ意味です。

    WHERE normal_rate < ALL
    (SELECT budget/550 FROM Groups)

    式
      比較演算子
      {
        ALL |
        ANY |
        SOME
      }
      表副問合せ

親トピック: SQL式
関連概念
動的パラメータ
関連資料
選択式
TableExpression
VALUES式
式に関する優先順位