在本教程中,您将了解SQL逻辑运算符以及如何使用它们来测试条件是否为:true
。
逻辑运算符用于测试条件是否为:true
。 与比较运算符类似,逻辑运算符返回值为三个:true
,false
或unknown
的其中一个。
下表说明了SQL逻辑运算符:
编号 | 运算符 | 描述 |
---|---|---|
1 | ALL | 如果所有比较都为真,则返回true 。 |
2 | AND | 如果两个表达式都为真,则返回true 。 |
3 | ANY | 如果任何一个比较为真,则返回true 。 |
4 | BETWEEN | 如果操作数在一个指定范围内,则返回true 。 |
5 | EXISTS | 如果子查询有结果集,则返回true 。 |
6 | IN | 如果操作数等于列表中的值之一,则返回true 。 |
7 | LIKE | 如果操作数与模式匹配,则返回true 。 |
8 | NOT | 反转其他布尔运算符的结果。 |
9 | OR | 如果任一表达式为真,则返回true 。 |
10 | SOME | 如果某些表达式为真,则返回true 。 |
1. AND运算符
AND
运算符用于在SQL语句的WHERE
子句中构造多个条件,例如:SELECT
,UPDATE
和DELETE
语句中:
expression1 AND expression2
如果两个表达式的计算结果为true
,则AND
运算符返回true
。以下示例中,将查询薪水大于5000
且小于7000
的所有员工信息:
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary > 5000 AND salary < 7000
ORDER BY salary;
执行上面查询语句,得到以下结果 –
+------------+-----------+--------+
| first_name | last_name | salary |
+------------+-----------+--------+
| Bruce | Wong | 6000 |
| Pat | Zhou | 6000 |
| Charles | Yang | 6200 |
| Shanta | Liu | 6500 |
| Susan | Zhou | 6500 |
| Min | Su | 6900 |
+------------+-----------+--------+
6 rows in set
2. OR运算符
与AND
运算符类似,OR
运算符用于在SQL语句的WHERE
子句中组合多个条件:
expression1 OR expression2
只要有一个表达式的计算结果为true
,则OR
运算符返回true
。
例如,以下语句查找薪水为8000
或9000
的员工信息:
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary = 8000 OR salary = 9000
ORDER BY salary;
执行上面查询语句,得到以下结果 –
+------------+-----------+--------+
| first_name | last_name | salary |
+------------+-----------+--------+
| Matthew | Han | 8000 |
| Alexander | Lee | 9000 |
| Daniel | Chen | 9000 |
+------------+-----------+--------+
3 rows in set
3. IS NULL运算符
IS NULL
运算符将列的值与null
值进行比较,如果比较的值为null
,则返回true
; 否则,它返回false
。 例如,以下语句查找没有电话号码的所有员工信息:
SELECT
first_name, last_name, phone_number
FROM
employees
WHERE
phone_number IS NULL
ORDER BY first_name , last_name;
执行上面查询语句,得到以下结果 –
+------------+-----------+--------------+
| first_name | last_name | phone_number |
+------------+-----------+--------------+
| Charles | Yang | NULL |
| Jack | Yang | NULL |
| John | Liu | NULL |
| Jonathon | Yang | NULL |
| Karen | Liu | NULL |
| Kimberely | Yang | NULL |
+------------+-----------+--------------+
6 rows in set
4. BETWEEN运算符
BETWEEN
运算符用于搜索在给定最小值和最大值范围内的值。 请注意,最小值和最大值包含在条件集合中。
例如,以下语句查找薪水在8000
到10000
之间的所有员工信息。
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary BETWEEN 8000 AND 10000
ORDER BY salary;
执行上面查询语句,得到以下结果 –
+------------+-----------+--------+
| first_name | last_name | salary |
+------------+-----------+--------+
| Matthew | Han | 8000 |
| John | Chen | 8200 |
| Max | Han | 8200 |
| William | Wu | 8300 |
| Jack | Yang | 8400 |
| Jonathon | Yang | 8600 |
| Alexander | Lee | 9000 |
| Daniel | Chen | 9000 |
| Hermann | Wu | 10000 |
+------------+-----------+--------+
9 rows in set
注:
8000
和10000
也出现在结果集中。
5. IN运算符
IN
运算符将值与指定值列表进行比较。 如果比较值与列表中的其中一个值匹配,则IN
运算符返回true
; 否则返回false
。
以下语句查找在部门ID为1
或9
的所有员工信息。
SELECT
first_name, last_name, department_id
FROM
employees
WHERE
department_id IN (1 , 9)
ORDER BY department_id;
执行上面查询语句,得到以下结果 –
+------------+-----------+---------------+
| first_name | last_name | department_id |
+------------+-----------+---------------+
| Jennifer | Zhao | 1 |
| Steven | Lee | 9 |
| Neena | Wong | 9 |
| Lex | Liang | 9 |
+------------+-----------+---------------+
4 rows in set
6. LIKE运算符
LIKE
运算符使用通配符运算符将值与类似值进行比较。 SQL提供了两个与LIKE
运算符一起使用的通配符:
- 百分号(
%
)表示零个,一个或多个字符。 - 下划线符号(
_
)表示单个字符。
以下语句查找名字以字符串Ma
开头的员工信息:
SELECT
employee_id, first_name, last_name
FROM
employees
WHERE
first_name LIKE 'Ma%'
ORDER BY first_name;
执行上面查询语句,得到以下结果 –
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 120 | Matthew | Han |
| 112 | Max | Su |
| 121 | Max | Han |
+-------------+------------+-----------+
3 rows in set
以下示例查找那些名字的第二个字符为i
的所有员工信息:
SELECT
employee_id, first_name, last_name
FROM
employees
WHERE
first_name LIKE '_i%'
ORDER BY first_name;
执行上面查询语句,得到以下结果 –
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 107 | Diana | Chen |
| 178 | Kimberely | Yang |
| 201 | Michael | Zhou |
| 113 | Min | Su |
| 122 | Min | Liu |
| 117 | Sigal | Zhang |
| 206 | William | Wu |
+-------------+------------+-----------+
7 rows in set
7. ALL运算符
ALL
运算符将值与另一个值集中的所有值进行比较。 ALL
运算符必须以比较运算符开头,后跟子查询。
以下是ALL
运算符的语法:
comparison_operator ALL (subquery)
注,可在子查询教程中了解子查询的用法。
以下示例查找薪水大于部门ID为8
中所有员工工资的员工信息:
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary >= ALL (SELECT
salary
FROM
employees
WHERE
department_id = 8)
ORDER BY salary DESC;
执行上面查询语句,得到以下结果 –
+------------+-----------+--------+
| first_name | last_name | salary |
+------------+-----------+--------+
| Steven | Lee | 24000 |
| Neena | Wong | 17000 |
| Lex | Liang | 17000 |
| John | Liu | 14000 |
+------------+-----------+--------+
4 rows in set
8. ANY运算符
ANY
运算符根据条件将值与集合中的任何值进行比较,如下所示:
comparison_operator ANY(subquery)
与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;
执行上面查询语句,得到以下结果 –
+------------+-----------+--------+
| first_name | last_name | salary |
+------------+-----------+--------+
| Alexander | Lee | 9000 |
| Avg | Su | 11000 |
| Bruce | Wong | 6000 |
| Charles | Yang | 6200 |
| Daniel | Chen | 9000 |
... ...
| Shelley | Wu | 12000 |
| Steven | Lee | 24000 |
| Susan | Zhou | 6500 |
| Valli | Chen | 4800 |
| William | Wu | 8300 |
+------------+-----------+--------+
32 rows in set
请注意,SOME
是ANY
的别名,因此,可以互换使用它们。
9. EXISTS运算符
EXISTS
运算符测试子查询是否包含任何行:
EXISTS (subquery)
如果子查询返回一行或多行,则EXISTS
的结果为true
; 否则结果是false
。
例如,以下语句查找所有具有受抚养人的员工信息:
SELECT
first_name, last_name
FROM
employees e
WHERE
EXISTS( SELECT
1
FROM
dependents d
WHERE
d.employee_id = e.employee_id);
执行上面查询语句,得到以下结果 –
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| Steven | Lee |
| Neena | Wong |
| Lex | Liang |
| Alexander | Lee |
| Bruce | Wong |
| David | Liang |
| Valli | Chen |
| Diana | Chen |
... ...
| Shelley | Wu |
| William | Wu |
+------------+-----------+
30 rows in set
通过上面的学习,现在,您应该了解所有SQL逻辑运算符以及如何使用它们来测试条件。