在本教程中,将学习如何使用MySQL AND
运算符组合多个布尔表达式以形成多个条件来过滤数据。
MySQL AND运算符简介
AND
运算符是组合两个或多个布尔表达式的逻辑运算符,只有当两个表达式求值为true
时才返回true
。如果两个表达式中的一个求值为false
,则AND
运算符返回false
。
WHERE boolean_expression_1 AND boolean_expression_2
以下说明AND
运算符组合true
,false
和null
时的结果。
- | TRUE | FALSE | NULL |
---|---|---|---|
TRUE | TRUE | FALSE | NULL |
FALSE | FALSE | FALSE | FALSE |
NULL | NULL | FALSE | NULL |
AND
运算符通常用在SELECT
,UPDATE
,DELETE
语句的WHERE
子句中以形成布尔表达式。AND
运算符也用于INNER JOIN或LEFT JOIN子句的连接条件。
当求值具有AND
运算符的表达式时,MySQL会计算表达式的其余部分,直到可以确定结果为止。该功能称为短路求值。请参见以下示例。
SELECT 1 = 0 AND 1 / 0 ;
执行上面查询时,得到以下结果 -
mysql> SELECT 1 = 0 AND 1 / 0 ;
+-----------------+
| 1 = 0 AND 1 / 0 |
+-----------------+
| 0 |
+-----------------+
1 row in set
请注意,在MySQL中,
0
被认为是false
,非零被视为true
。
MySQL只计算表达式1 = 0 AND 1/0
的第一部分1 = 0
,因为表达式1 = 0
返回false
,所以MySQL得出结论:整个表达式的结果是false
。 MySQL不对表达式的剩余部分求值,即不对1/0
进行求值; 如果对1/0
进行求值,它将发出一个错误消息,因为除以零错误。
MySQL AND运算符示例
下面使用示例数据库中的customers
表进行演示。customers
表的结构如下所示 -
mysql> desc customers;
+------------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+---------------+------+-----+---------+-------+
| customerNumber | int(11) | NO | PRI | NULL | |
| customerName | varchar(50) | NO | | NULL | |
| contactLastName | varchar(50) | NO | | NULL | |
| contactFirstName | varchar(50) | NO | | NULL | |
| phone | varchar(50) | NO | | NULL | |
| addressLine1 | varchar(50) | NO | | NULL | |
| addressLine2 | varchar(50) | YES | | NULL | |
| city | varchar(50) | NO | | NULL | |
| state | varchar(50) | YES | | NULL | |
| postalCode | varchar(15) | YES | | NULL | |
| country | varchar(50) | NO | | NULL | |
| salesRepEmployeeNumber | int(11) | YES | MUL | NULL | |
| creditLimit | decimal(10,2) | YES | | NULL | |
+------------------------+---------------+------+-----+---------+-------+
13 rows in set
以下声明选择国家是USA
和CA
的客户。我们在WHERE
子句中使用AND
运算符。
SELECT customername, country, state FROM customers WHERE country = 'USA' AND state = 'CA';
执行上面查询得到以下结果 -
mysql> SELECT customername, country, state FROM customers WHERE country = 'USA' AND state = 'CA';
+------------------------------+---------+-------+
| 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
使用AND
运算符,可以组合两个以上的布尔表达式。例如,以下查询返回位于美国加州的客户,并且信用额度大于100K
。
SELECT customername,
country,
state,
creditlimit
FROM customers
WHERE country = 'USA'
AND state = 'CA'
AND creditlimit > 100000;
执行上面查询语句,得到以下结果 -
mysql> SELECT customername, country, state, creditlimit FROM customers
WHERE country = 'USA' AND state = 'CA' AND creditlimit > 100000;
+------------------------------+---------+-------+-------------+
| customername | country | state | creditlimit |
+------------------------------+---------+-------+-------------+
| Mini Gifts Distributors Ltd. | USA | CA | 210500 |
| Collectable Mini Designs Co. | USA | CA | 105000 |
| Corporate Gift Ideas Co. | USA | CA | 105000 |
+------------------------------+---------+-------+-------------+
3 rows in set
在本教程中,我们向您展示了如何使用MySQL AND
运算符组合两个或多个表达式以形成WHERE
子句的复合条件语句。