摘要:在本教程中,您将学习如何使用 SQL 或运算符合并两个布尔表达式。
SQL 或运算符简介
SQL 或是一个 逻辑运算符,它合并两个布尔表达式。SQL 或运算符根据表达式的结果返回真或假。
或运算符通常用于 WHERE
SELECT
、UPDATE
或 DELETE
语句的子句中,以形成灵活的条件。
以下说明了 SQL 或运算符的语法
SELECT
column1,
column2,
...
FROM
table1
WHERE
expression1
OR expression2;
下表显示了当我们比较真、假和 NULL 值时,OR
运算符的结果。
真 | 假 | NULL | |
真 | 真 | 真 | 真 |
假 | 真 | 假 | NULL |
NULL | 真 | NULL | NULL |
注意,如果任一表达式为真,则 OR 运算符始终返回真。
如果数据库系统支持短路功能,则一旦一个表达式为真,OR
运算符就会停止计算条件的剩余部分。
请注意,短路功能有助于数据库系统在它能确定结果后立即中止计算逻辑表达式的剩余部分,从而节省 CPU 计算。有关短路功能的更多信息,请查看 SQL AND 运算符教程。
当您将 OR 运算符与 AND 运算符一起使用时,数据库系统将在 AND 运算符后计算 OR 运算符。这称为优先规则。但是,您可以使用括号来更改计算顺序。
SQL 或运算符示例
我们将在 样本数据库 中使用 employees
表来演示 OR
运算符。

以下语句查找 1997 年或 1998 年加入公司的所有员工。
SELECT
first_name,
last_name,
hire_date
FROM
employees
WHERE
YEAR (hire_date) = 1997 OR YEAR (hire_date) = 1998
ORDER BY
first_name,
last_name;

要查找 1997 年或 1997 年加入公司并在部门 ID 3 中工作的员工,请同时使用 AND
和 OR
运算符,如下所示
SELECT
first_name,
last_name,
hire_date,
department_id
FROM
employees
WHERE
department_id = 3
AND (
YEAR (hire_date) = 1997
OR YEAR (hire_date) = 1998
)
ORDER BY
first_name,
last_name;
如果您不使用括号,则查询将检索出 1997 年加入公司并在部门 ID 3 中工作的员工,或 1998 年加入公司但没有指定部门的员工。
这是因为数据库系统将在 AND 运算符后计算 OR
运算符。
SELECT
first_name,
last_name,
hire_date,
department_id
FROM
employees
WHERE
department_id = 3
AND YEAR (hire_date) = 1997
OR YEAR (hire_date) = 1998
ORDER BY
first_name,
last_name;
Code language: SQL (Structured Query Language) (sql)

如果一个查询使用了许多 OR
运算符,则它将变得难以阅读。为了使查询更具可读性,您可以使用 IN
运算符。
例如,以下查询查找出在 1990 年、1999 年或 2000 年加入该公司的所有员工。
SELECT
first_name,
last_name,
hire_date
FROM
employees
WHERE
YEAR (hire_date) = 2000
OR YEAR (hire_date) = 1999
OR YEAR (hire_date) = 1990;
Code language: SQL (Structured Query Language) (sql)
您可以使用以下方式用 IN
运算符替换 OR
运算符
SELECT
first_name,
last_name,
hire_date
FROM
employees
WHERE
YEAR (hire_date) IN (1990, 1999, 2000)
ORDER BY
hire_date;
Code language: SQL (Structured Query Language) (sql)

在本教程中,您已学习如何使用 SQL OR
运算符合并两个布尔表达式以形成一个灵活的条件。