在本教學中,將學習如何使用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
進行求值,它將發出一個錯誤訊息,因為除以零錯誤。
下面使用範例資料庫中的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
子句的複合條件語句。