**摘要**:在本教程中,您将了解 SQL 逻辑运算符以及如何使用它们来测试条件的真假性。
逻辑运算符允许您测试条件的真假性。类似于 比较运算符,逻辑运算符返回真、假或未知的值。
下表说明了 SQL 逻辑运算符
运算符 | 含义 |
---|---|
ALL | 当所有比较都为真时返回真 |
AND | 当两个表达式都为真时返回真 |
ANY | 当任何一个比较为真时返回真。 |
BETWEEN | 当操作数在某个范围内时返回真 |
EXISTS | 当子查询包含任何行时返回真 |
IN | 当操作数等于列表中的一个值时返回真 |
LIKE | 当操作数与模式匹配时返回真 |
NOT | 反转任何其他布尔运算符的结果。 |
OR | 当任一表达式为真时返回真 |
SOME | 当一些表达式为真时返回真 |
AND
AND
运算符允许您在 SQL 语句的 WHERE
子句中构造多个条件,例如 SELECT
、UPDATE
和 DELETE
expression1 AND expression2
Code language: SQL (Structured Query Language) (sql)
AND
运算符当且仅当两个表达式都计算为真时,才会返回真。
以下示例查找所有工资大于 5,000 美元且小于 7,000 美元的员工
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary > 5000 AND salary < 7000
ORDER BY salary;
Code language: SQL (Structured Query Language) (sql)

OR
类似于 AND
运算符,OR
运算符在 SQL 语句的 WHERE
子句中组合多个条件
expression1 OR expression2
Code language: SQL (Structured Query Language) (sql)
但是,OR
运算符当至少一个表达式计算为真时返回真。
例如,以下语句查找工资为 7,000 美元或 8,000 美元的员工
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary = 7000 OR salary = 8000
ORDER BY salary;
Code language: SQL (Structured Query Language) (sql)

IS NULL
IS NULL
运算符将一个值与空值进行比较,如果所比较的值为空,则返回真;否则,返回假。
例如,以下语句查找所有没有电话号码的员工
SELECT
first_name, last_name, phone_number
FROM
employees
WHERE
phone_number IS NULL
ORDER BY first_name , last_name;
Code language: SQL (Structured Query Language) (sql)

BETWEEN
BETWEEN
运算符 根据给定的最小值和最大值搜索值,这些值属于某个值集。请注意,最小值和最大值被包括在条件集的一部分中。
例如,以下语句查找所有工资在 9,000 美元到 12,000 美元之间的员工。
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary BETWEEN 9000 AND 12000
ORDER BY salary;
Code language: SQL (Structured Query Language) (sql)

请注意,值 9,000 美元和 12,000 美元都包含在输出中。
IN
IN
运算符将一个值与一个指定的值列表进行比较。IN
运算符当被比较的值至少与列表中的一个值匹配时返回真;否则,返回假。
以下语句查找所有在部门 ID 为 8 或 9 中工作的员工。
SELECT
first_name, last_name, department_id
FROM
employees
WHERE
department_id IN (8, 9)
ORDER BY department_id;
Code language: SQL (Structured Query Language) (sql)

LIKE
LIKE
运算符 使用通配符运算符将一个值与类似的值进行比较。SQL 提供了两个与 LIKE
运算符结合使用的通配符
- 百分号 (
%
) 表示零、一个或多个字符。 - 下划线符号 (
_
) 表示一个字符。
以下语句将找出名字首字母以字符串jo
开头的所有人
SELECT
employee_id, first_name, last_name
FROM
employees
WHERE
first_name LIKE 'jo%'
ORDER BY first_name;
Code language: SQL (Structured Query Language) (sql)

以下示例将找出名字的第二个字符是 h
的所有人
SELECT
employee_id, first_name, last_name
FROM
employees
WHERE
first_name LIKE '_h%'
ORDER BY first_name;
Code language: SQL (Structured Query Language) (sql)

ALL
ALL
运算符将一个值与另一个值集中的所有值进行比较。ALL
运算符必须紧跟一个比较运算符,然后是子查询。
以下说明了ALL
运算符的语法
comparison_operator ALL (subquery)
Code language: SQL (Structured Query Language) (sql)
以下示例将找出薪水高于部门 8 中所有员工薪水的员工
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary >= ALL (SELECT
salary
FROM
employees
WHERE
department_id = 8)
ORDER BY salary DESC;
Code language: SQL (Structured Query Language) (sql)

ANY
ANY
运算符根据以下所示的条件,将一个值与集合中的任何一个值进行比较
comparison_operator ANY(subquery)
Code language: SQL (Structured Query Language) (sql)
类似于ALL运算符,ANY
运算符必须紧跟一个比较运算符,然后是子查询。
例如,以下语句将找出薪水高于每个部门平均水平的所有员工
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary > ANY(SELECT
AVG(salary)
FROM
employees
GROUP BY department_id)
ORDER BY first_name , last_name;
Code language: SQL (Structured Query Language) (sql)

请注意,SOME
是ANY
的别名,因此您可以互换使用。
EXISTS
EXISTS (subquery)
Code language: SQL (Structured Query Language) (sql)
如果子查询返回一行或多行,则EXISTS
的结果为真;否则,结果为假。
例如,以下语句将找出所有有抚养人的员工
SELECT
first_name, last_name
FROM
employees e
WHERE
EXISTS( SELECT
1
FROM
dependents d
WHERE
d.employee_id = e.employee_id);
Code language: SQL (Structured Query Language) (sql)

现在,您应该对所有 SQL 逻辑运算符以及如何使用它们来检验条件的真假有了简要的概述。在接下来的教程中,您将详细了解每个逻辑运算符。