摘要:在本教程中,您将学习如何使用 MySQL AND
运算符组合多个布尔表达式来过滤数据。
MySQL AND 运算符简介
MySQL 没有内置的布尔类型。相反,它使用数字零作为 FALSE,使用非零值作为 TRUE。
AND
运算符是一个逻辑运算符,它组合两个或多个布尔表达式并返回 1、0 或 NULL:
A AND B
在此表达式中,A 和 B 称为操作数。它们可以是文字值或表达式。
如果 A 和 B 均非零且不为 NULL,则逻辑 AND 运算符返回 1。如果任一操作数为零,则返回 0;否则,返回 NULL。
如果 A 和 B 均非零且 NOT NULL,则逻辑 AND 运算符返回 1。例如:
SELECT 1 AND 1;
Code language: SQL (Structured Query Language) (sql)
+---------+
| 1 AND 1 |
+---------+
| 1 |
+---------+
1 row in set (0.00 sec)
Code language: plaintext (plaintext)
如果 A 或 B 为零或 A 和 B 都为零,则逻辑 AND 运算符返回 0:
SELECT 1 AND 0, 0 AND 1, 0 AND 0, 0 AND NULL;
Code language: SQL (Structured Query Language) (sql)
+---------+---------+---------+------------+
| 1 AND 0 | 0 AND 1 | 0 AND 0 | 0 AND NULL |
+---------+---------+---------+------------+
| 0 | 0 | 0 | 0 |
+---------+---------+---------+------------+
1 row in set (0.00 sec)
Code language: plaintext (plaintext)
如果任一操作数非零或两个操作数均为 NULL,逻辑 AND 运算符将返回 NULL。
SELECT 1 AND NULL, NULL AND NULL;
Code language: SQL (Structured Query Language) (sql)
+------------+---------------+
| 1 AND NULL | NULL AND NULL |
+------------+---------------+
| NULL | NULL |
+------------+---------------+
1 row in set (0.00 sec)
Code language: plaintext (plaintext)
下表说明了组合 true、false 和 null 时AND
运算符的结果。
真的 | 错误的 | 无效的 | |
---|---|---|---|
真的 | 真的 | 错误的 | 无效的 |
错误的 | 错误的 | 错误的 | 错误的 |
无效的 | 无效的 | 错误的 | 无效的 |
实际上,您将在SELECT
、 UPDATE
、 DELETE
语句的WHERE
子句中使用AND
运算符来形成条件。此外,您还可以在INNER JOIN
和LEFT JOIN
子句的条件中使用AND
运算符。
当计算包含AND
运算符的表达式时,MySQL 一旦可以确定结果,就会停止计算表达式的其余部分。
这称为短路评估。换句话说, AND
运算符被短路了。例如:
SELECT 1 = 0 AND 1 / 0 ;
Code language: SQL (Structured Query Language) (sql)
+-----------------+
| 1 = 0 AND 1 / 0 |
+-----------------+
| 0 |
+-----------------+
1 row in set (0.01 sec)
Code language: plaintext (plaintext)
在此示例中,MySQL 仅计算表达式1 = 0 AND 1 / 0
的第一部分1 = 0
。
由于表达式1 = 0
返回0,MySQL可以确定整个表达式的结果为0。
因此,MySQL 不需要计算表达式的剩余部分,即1/0
;它会发出被零除的错误。
MySQL AND 运算符示例
我们使用示例数据库中的customers
表进行演示。

以下语句使用AND
运算符查找位于美国加利福尼亚州 (CA) 的客户:
SELECT
customername,
country,
state
FROM
customers
WHERE
country = 'USA' AND
state = 'CA';
Code language: SQL (Structured Query Language) (sql)
+------------------------------+---------+-------+
| customername | country | state |
+------------------------------+---------+-------+
| Mini Gifts Distributors Ltd. | USA | CA |
| Mini Wheels Co. | USA | CA |
| Technics Stores Inc. | USA | CA |
| Toys4GrownUps.com | USA | CA |
| Boards & Toys Co. | USA | CA |
| Collectable Mini Designs Co. | USA | CA |
| Corporate Gift Ideas Co. | USA | CA |
| Men 'R' US Retailers, Ltd. | USA | CA |
| The Sharp Gifts Warehouse | USA | CA |
| West Coast Collectables Co. | USA | CA |
| Signal Collectibles Ltd. | USA | CA |
+------------------------------+---------+-------+
11 rows in set (0.00 sec)
Code language: plaintext (plaintext)
通过使用AND
运算符,您可以组合两个以上的布尔表达式。例如,以下查询返回位于美国加利福尼亚州且信用额度大于 100K 的客户。
SELECT
customername,
country,
state,
creditlimit
FROM
customers
WHERE
country = 'USA' AND
state = 'CA' AND
creditlimit > 100000;
Code language: SQL (Structured Query Language) (sql)
+------------------------------+---------+-------+-------------+
| customername | country | state | creditlimit |
+------------------------------+---------+-------+-------------+
| Mini Gifts Distributors Ltd. | USA | CA | 210500.00 |
| Collectable Mini Designs Co. | USA | CA | 105000.00 |
| Corporate Gift Ideas Co. | USA | CA | 105000.00 |
+------------------------------+---------+-------+-------------+
3 rows in set (0.00 sec)
Code language: plaintext (plaintext)
概括
- 使用
AND
运算符组合两个布尔表达式。当两个表达式都为 true 时,AND
运算符返回 true;否则,返回 false。 - 使用
AND
运算符在SELECT
语句的WHERE
子句中构成条件。