複雑な検索条件の定義

検索条件には、= や > などの基本的な比較述部に加え、BETWEEN、IN、EXISTS、IS NULL、LIKE などの述部も含めることができます。

検索条件にはスカラー全選択を含めることができます。

文字か、UCS-2 または UTF-16 グラフィック列述部の場合、BETWEEN、IN、EXISTS、および LIKE 文節の述部が評価される前に、オペランドに分類順序が適用されます。

複数の検索条件を実行することもできます。

  • BETWEEN ... AND ... は、2 つの値の間にある値 (両端の値も含む) によって満たされる検索条件を指定するために使用します。例えば、1987 年に雇用されたすべての社員を調べるには、 次のようにすることができます。
    ... WHERE HIREDATE BETWEEN '1987-01-01' AND '1987-12-31'

    BETWEEN キーワードには、両端の値が含まれます。同じ結果をもたらす次の検索条件は、より複雑ではあるものの、明確に条件を指定します。

    ... WHERE HIREDATE >= '1987-01-01' AND HIREDATE <= '1987-12-31'
  • IN は、指定された式の値がリストされた値のどれかに該当する行が処理の対象となることを指定します。例えば、部門 A00、C01、および E21 のすべての社員の名前を調べるには、 次のように指定することができます。
    ... WHERE WORKDEPT IN ('A00', 'C01', 'E21')
  • EXISTS は、ある行が存在するかどうかをテストしたいときに指定します。 例えば、給与が 60000 より大きい社員がいるかどうかを調べたい場合には、次のように指定することができます。
    EXISTS (SELECT * FROM EMPLOYEE WHERE SALARY > 60000)
  • IS NULL は、ヌル値をテストしたいときに指定します。 例えば、電話番号がない社員がいるかどうかを調べたい場合には、次のように指定することができます。
    ... WHERE EMPLOYEE.PHONE IS NULL
  • LIKE は、ある式が指定の値に類似している行が処理の対象となることを指定します。 LIKE を使用すると、SQL は、指定した文字ストリングに類似した文字ストリングを検索します。 類似の度合いは、検索条件に含めたストリングに使用されている 2 つの特殊文字により決まります。
    _
    下線は、任意の 1 文字を表します。
    %
    パーセント記号は、0 文字、1 文字、または 2 文字以上の未知のストリングを表します。 検索ストリングの前にパーセント記号を付ける場合、SQL は、列内で検索ストリングと一致する値の前に 1 つ以上の文字が入っていても (あるいは入っていなくても)、その値を一致と見なします。そうでない場合は、検索ストリングが列の 1 桁目から始まっていなければ、一致とは見なされません。
    注: MIXED データを処理する場合には、次の相違があります。SBCS の下線文字は 1 つの SBCS 文字を参照します。 パーセント記号にはこのような制限はありません。すなわち、パーセント記号は任意の数の SBCS または DBCS 文字を参照します。LIKE 述部および MIXED データに関する詳細な情報については、DB2® for i SQL 解説書のトピック集を参照してください。

    下線文字またはパーセント記号は、列の値の一部の文字しか知らない場合、あるいは他の文字は関係ない場合に使用してください。 例えば、Minneapolis (ミネアポリス) に住んでいる社員を調べたい場合には、 次のように指定することができます。

    ... WHERE ADDRESS LIKE '%MINNEAPOLIS%'

    SQL は、ADDRESS 列に MINNEAPOLIS というストリングが含まれていれば、そのストリングがどこに置かれているかに関係なく、当該の行をすべて戻します。

    別の例として、名前が 'SAN' で始まる町のリストを入手するには、次のように指定できます。

    ... WHERE TOWN LIKE 'SAN%'

    アドレスを探したいが、マスターのストリート名リストにそのストリート名がない場合は、LIKE 式で式を使用することができます。 次の例では、表内の STREET 列は大文字と想定されます。

    ... WHERE UCASE (:address_variable) NOT LIKE '%'||STREET||'%'

    下線またはパーセント文字のいずれかが含まれる文字ストリングを検索したい場合は、ESCAPE 文節を使用してエスケープ文字を指定してください。例えば、名前にパーセントの入っている業務を表示するには、 次のように指定することができます。

    ... WHERE BUSINESS_NAME LIKE '%@%%' ESCAPE '@'
    LIKE ストリングの最初と最後にあるパーセント文字は、通常の LIKE パーセント文字として解釈されます。'@%' の組み合わせは、パーセント文字として解釈されます。