本教學將學習如何使用MySQL OR
運算子組合布林表示式來過濾資料。
MySQL OR
運算子組合了兩個或兩個以上布林表示式。當任一條件為真時,返回true
。
下面說明了OR
運算子的語法。
boolean_expression_1 OR boolean_expression_2
boolean_expression_1
和boolean_expression_2
是布林表示式,它可能返回的結果是:true
,false
或NULL
。
下表顯示了OR
運算子的結果。
— | TRUE | FALSE | NULL |
---|---|---|---|
TRUE | TRUE | TRUE | TRUE |
FALSE | TRUE | FALSE | NULL |
NULL | TRUE | NULL | NULL |
MySQL使用OR
運算子進行短路評估(求值計算)。 換句話說,當MySQL可以確定結果時,MySQL會停止評估(求值計算)語句的其餘部分。
請參見以下範例。
SELECT 1 = 1 OR 1 / 0;
執行上面程式碼,得到以下結果 -
mysql> SELECT 1 = 1 OR 1 / 0;
+----------------+
| 1 = 1 OR 1 / 0 |
+----------------+
| 1 |
+----------------+
1 row in set
因為表示式1 = 1
總是返回true
,MySQL不會對1/0
進行求值。如果是這樣,它會發出一個除以零錯誤的錯誤訊息。
當您在語句中使用多個邏輯運算子時,MySQL會在AND
運算子之後再對OR
運算子進行求值。 這稱為運算子優先順序。
運算子優先順序決定運算子的求值順序。 MySQL首先對優先順序較高的運算子進行求值。
請參見以下範例。
SELECT true OR false AND false;
執行上面查詢,得到如下結果 -
mysql> SELECT true OR false AND false;
+-------------------------+
| true OR false AND false |
+-------------------------+
| 1 |
+-------------------------+
1 row in set
上面得出的結果,運算的過程是怎麼樣呢?
AND
運算子求值,因此,false AND false
返回false
。OR
運算子求值,根據返回的false
值再執行AND
運算,因此true OR false
返回true
。要更改評估/求值的順序,請使用括號,例如:
SELECT (true OR false) AND false;
執行上面查詢,得到如下結果 -
mysql> SELECT (true OR false) AND false;
+---------------------------+
| (true OR false) AND false |
+---------------------------+
| 0 |
+---------------------------+
1 row in set
上面得出的結果,運算的過程是怎麼樣呢?
true OR false
)返回true
true
和剩餘部分求值,即:true AND false
返回false
。下面,我們將使用範例資料庫(yiibaidb)中的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
)或者法國(France
)的客戶,請在WHERE子句中使用OR運算子,如下所示:
SELECT
customername, country
FROM
customers
WHERE
country = 'USA' OR country = 'France';
執行上面程式碼,得到如下結果 -
mysql> SELECT customername, country FROM customers WHERE country = 'USA' OR country = 'France';
+------------------------------+---------+
| customername | country |
+------------------------------+---------+
| Atelier graphique | France |
| Signal Gift Stores | USA |
| La Rochelle Gifts | France |
| Mini Gifts Distributors Ltd. | USA |
| Mini Wheels Co. | USA |
| Land of Toys Inc. | USA |
| Saveley & Henriot, Co. | France |
| Muscle Machine Inc | USA |
| Diecast Classics Inc. | USA |
| Technics Stores Inc. | USA |
... ...
+------------------------------+---------+
48 rows in set
以下宣告返回位於美國(USA
)或者法國(France
),並且信用額度大於10000
的客戶。
SELECT
customername, country, creditLimit
FROM
customers
WHERE
(country = 'USA' OR country = 'France')
AND creditlimit > 100000;
執行上面程式碼,得到如下結果 -
mysql> SELECT customername, country, creditLimit FROM customers WHERE (country = 'USA' OR country = 'France') AND creditlimit > 100000;
+------------------------------+---------+-------------+
| customername | country | creditLimit |
+------------------------------+---------+-------------+
| La Rochelle Gifts | France | 118200 |
| Mini Gifts Distributors Ltd. | USA | 210500 |
| Land of Toys Inc. | USA | 114900 |
| Saveley & Henriot, Co. | France | 123900 |
| Muscle Machine Inc | USA | 138500 |
| Diecast Classics Inc. | USA | 100600 |
| Collectable Mini Designs Co. | USA | 105000 |
| Marta's Replicas Co. | USA | 123700 |
| Mini Classics | USA | 102700 |
| Corporate Gift Ideas Co. | USA | 105000 |
| Online Diecast Creations Co. | USA | 114200 |
+------------------------------+---------+-------------+
11 rows in set
請注意,如果不使用括號,查詢將返回位於美國的客戶或者位於法國並且信用額度大於10000
的客戶。
SELECT
customername, country, creditLimit
FROM
customers
WHERE
country = 'USA' OR country = 'France' AND creditlimit > 100000;
執行上面程式碼,得到如下結果(共 38
行) -
mysql> SELECT customername, country, creditLimit FROM customers WHERE country = 'USA' OR country = 'France' AND creditlimit > 100000;
+------------------------------+---------+-------------+
| customername | country | creditLimit |
+------------------------------+---------+-------------+
| Signal Gift Stores | USA | 71800 |
| La Rochelle Gifts | France | 118200 |
| Mini Gifts Distributors Ltd. | USA | 210500 |
| Mini Wheels Co. | USA | 64600 |
| Land of Toys Inc. | USA | 114900 |
| Saveley & Henriot, Co. | France | 123900 |
| Muscle Machine Inc | USA | 138500 |
| Diecast Classics Inc. | USA | 100600 |
| Technics Stores Inc. | USA | 84600 |
| American Souvenirs Inc | USA | 0 |
| Cambridge Collectables Co. | USA | 43400 |
| Gift Depot Inc. | USA | 84300 |
| Vitachrome Inc. | USA | 76400 |
| Auto-Moto Classics Inc. | USA | 23000 |
| Online Mini Collectables | USA | 68700 |
| Toys4GrownUps.com | USA | 90700 |
| Boards & Toys Co. | USA | 11000 |
| Collectable Mini Designs Co. | USA | 105000 |
| Marta's Replicas Co. | USA | 123700 |
| Mini Classics | USA | 102700 |
| Mini Creations Ltd. | USA | 94500 |
| Corporate Gift Ideas Co. | USA | 105000 |
| Tekni Collectables Inc. | USA | 43000 |
| Classic Gift Ideas, Inc | USA | 81100 |
| Men 'R' US Retailers, Ltd. | USA | 57700 |
| Gifts4AllAges.com | USA | 41900 |
| Online Diecast Creations Co. | USA | 114200 |
| Collectables For Less Inc. | USA | 70700 |
| Classic Legends Inc. | USA | 67500 |
| Gift Ideas Corp. | USA | 49700 |
| The Sharp Gifts Warehouse | USA | 77600 |
| Super Scale Inc. | USA | 95400 |
| Microscale Inc. | USA | 39800 |
| FunGiftIdeas.com | USA | 85800 |
| West Coast Collectables Co. | USA | 55400 |
| Motor Mint Distributors Inc. | USA | 72600 |
| Signal Collectibles Ltd. | USA | 60300 |
| Diecast Collectables | USA | 85100 |
+------------------------------+---------+-------------+
38 rows in set
在本教學中,您已經學習了如何使用MySQL OR
運算子來組合布林表示式來過濾資料。需要注意的是:使用組合運算子時,OR
運算子和AND
運算子的求值順序。