MySQL AND語句

2019-10-16 22:57:54

在本教學中,將學習如何使用MySQL AND運算子組合多個布林表示式以形成多個條件來過濾資料。

MySQL AND運算子簡介

AND運算子是組合兩個或多個布林表示式的邏輯運算子,只有當兩個表示式求值為true時才返回true。如果兩個表示式中的一個求值為false,則AND運算子返回false

WHERE boolean_expression_1 AND boolean_expression_2

以下說明AND運算子組合truefalsenull時的結果。

- TRUE FALSE NULL
TRUE TRUE FALSE NULL
FALSE FALSE FALSE FALSE
NULL NULL FALSE NULL

AND運算子通常用在SELECTUPDATEDELETE語句的WHERE子句中以形成布林表示式。AND運算子也用於INNER JOINLEFT 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

以下宣告選擇國家是USACA的客戶。我們在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子句的複合條件語句。