MySQL AND Operator

摘要:在本教程中,您将学习如何使用 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运算符的结果。

真的错误的无效的
真的真的错误的无效的
错误的错误的错误的错误的
无效的无效的错误的无效的

实际上,您将在SELECTUPDATEDELETE语句的WHERE子句中使用AND运算符来形成条件。此外,您还可以在INNER JOINLEFT 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子句中构成条件。
本教程有帮助吗?