WHERE 文節内の複数の検索条件

いくつかの述部を含む検索条件をコーディングすると、要求をさらに限定することができます。

指定する検索条件には、任意の比較演算子、または BETWEEN、DISTINCT、IN、LIKE、EXISTS、IS NULL、および IS NOT NULL のどのキーワードでも含めることができます。

2 つの述部を AND と OR を使って結合することができます。 さらに、NOT キーワードを使用すると、望む検索条件を指定した検索条件の否定値にすることを指定できます。 WHERE 文節には、必要なだけの述部が指定できます。

  • AND は、条件を限定したい行について、その行が検索条件の両方の述部を満たさなければならないことを示します。例えば、部門 D21 の社員のうちで、 1987 年 12 月 31 日より後に雇用された社員を調べるには、次のように指定します。
    ...
      WHERE WORKDEPT = 'D21' AND HIREDATE > '1987-12-31'
  • OR は、条件を限定したい行について、その行が検索条件の述部の一方または両方で設定された条件を満たさなければならないことを示します。 例えば、部門 C01 または D11 のいずれかに所属する社員を調べたい場合には、 次のように指定することができます。
    ...
      WHERE WORKDEPT = 'C01' OR WORKDEPT = 'D11'
    注: IN を用いて、この要求を次のように指定することもできます。WHERE WORKDEPT IN ('C01', 'D11')
  • NOT は、条件を限定したい行について、その行が NOT の後に置かれた検索条件または述部で設定された基準を満たしてはならないことを示します。例えば、部門 E11 の社員のうちで、職種コードがアナリストの社員を除くすべての社員を調べるには、 次のように指定できます。
    ...
      WHERE WORKDEPT = 'E11' AND NOT JOB = 'ANALYST'

これらの結合子を含む検索条件を評価するとき、SQL は特定の順序でその評価を行います。SQL は最初に NOT 文節を評価し、次に AND 文節を評価し、次に OR 文節を評価します。

評価の順序は括弧を使用することで変更できます。括弧で囲んだ検索条件が最初に評価されます。 例えば、部門 E11 と E21 の社員のうちで、学歴が 12 より上のすべての社員を選択するには、 次のように指定できます。

...
  WHERE EDLEVEL > 12 AND
     (WORKDEPT = 'E11' OR WORKDEPT = 'E21')

括弧は、検索条件の意味を決定します。この例では、次の条件に一致するすべての行を必要としています。

  • WORKDEPT (部門番号) の値が E11 または E21 であり、かつ
  • EDLEVEL (学歴) の値が 12 より高い。

括弧を使用しないで、次のように指定すると、

...
  WHERE EDLEVEL > 12 AND WORKDEPT = 'E11'
    OR WORKDEPT = 'E21'

異なった結果が得られます。選択される行は、次の条件を満たす行です。

  • WORKDEPT = E11 で、かつ EDLEVEL > 12、または
  • WORKDEPT = E21 で、EDLEVEL の値は任意

複数の等価比較を組み合わせる場合、以下に示す例のとおり、AND を用いて述部を記述できます。

...
  WHERE WORKDEPT = 'E11' AND EDLEVEL = 12 AND JOB = 'CLERK'

また、次の例のように、2 つのリストを比較することもできます。

...
  WHERE (WORKDEPT, EDLEVEL, JOB) = ('E11', 12, 'CLERK')

2 つのリストが使用される場合、1 つ目のリストの 1 つ目の項目が、2 つ目のリストの 1 つ目の項目と比較されます。比較は双方のリストでこのような方法で行われます。 そのため、各リストのエントリー数が同じでなければなりません。 リストを使用することは、AND で照会を記述するのと同じです。これらのリストは、等号および不等号比較演算子と共にのみ、使用可能です。