WHERE 子句中的多个搜索条件

您可以通过对包含多个谓词的搜索条件进行编码来进一步限定请求。

您指定的搜索条件可以包含任何比较运算符或谓词 BETWEEN , DISTINCT , IN , LIKE , EXISTS , IS NULL 和 IS NOT NULL。

可以将任意两个谓词与 AND 和 OR 组合在一起。 此外,您可以使用 NOT 关键字来指定您想要的搜索条件是指定搜索条件的否定值。 WHERE 子句可以具有任意数量的谓词。

  • AND 表示,要使行符合条件,该行必须同时满足搜索条件的两个谓词。 例如,要了解在 1987 年 12 月 31 日之后雇佣了部门 D21 中的哪些员工,请指定:
    ...
      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 子句进行求值。

您可以使用括号来更改求值顺序。 首先对括在括号中的搜索条件进行求值。 例如,要选择教育程度高于 12 的部门 E11 和 E21 中的所有员工,可以指定:

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

括号确定搜索条件的含义。 在此示例中,您需要具有以下内容的所有行:

  • E11 或 E21的 WORKDEPT 值,以及
  • 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'

您还可以比较两个列表,例如:

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

使用两个列表时,通过两个列表将第一个列表中的第一个项与第二个列表中的第一个项进行比较,依此类推。 因此,每个列表必须包含相同数量的条目。 使用列表与使用 AND 编写查询完全相同。 列表只能与等于和不等于比较运算符一起使用。