在 SQL 中,所有邏輯運算子的求值結果為 TRUE
、FALSE
或 NULL
(UNKNOWN
)。在 MySQL 中,這些值實作為 1 (TRUE
)、0 (FALSE
) 和 NULL
。大部分情況下,這與不同的 SQL 資料庫伺服器相同,儘管某些伺服器可能會傳回任何非零值作為 TRUE
。
MySQL 會將任何非零、非 NULL
值求值為 TRUE
。例如,下列陳述式都會評估為 TRUE
mysql> SELECT 10 IS TRUE;
-> 1
mysql> SELECT -10 IS TRUE;
-> 1
mysql> SELECT 'string' IS NOT NULL;
-> 1
邏輯 NOT。如果運算元為
0
,則評估為1
;如果運算元為非零,則評估為0
;而NOT NULL
則會傳回NULL
。mysql> SELECT NOT 10; -> 0 mysql> SELECT NOT 0; -> 1 mysql> SELECT NOT NULL; -> NULL mysql> SELECT ! (1+1); -> 0 mysql> SELECT ! 1+1; -> 1
最後一個範例產生
1
,因為此表達式會以與(!1)+1
相同的方式評估。!
運算子為非標準擴充功能,已棄用;預期會在未來的 MySQL 版本中移除。必要時,應調整應用程式以改為使用標準 SQLNOT
運算子。邏輯 AND。如果所有運算元皆為非零且不是
NULL
,則評估為1
;如果一或多個運算元為0
,則評估為0
;否則會傳回NULL
。mysql> SELECT 1 AND 1; -> 1 mysql> SELECT 1 AND 0; -> 0 mysql> SELECT 1 AND NULL; -> NULL mysql> SELECT 0 AND NULL; -> 0 mysql> SELECT NULL AND 0; -> 0
&&
運算子為非標準擴充功能,已棄用;預期會在未來的 MySQL 版本中移除對其的支援。必要時,應調整應用程式以改為使用標準 SQLAND
運算子。邏輯 OR。當兩個運算元都不是
NULL
時,如果有任何運算元為非零,則結果為1
,否則為0
。如果其中一個運算元為NULL
,則當另一個運算元為非零時,結果為1
,否則為NULL
。如果兩個運算元皆為NULL
,則結果為NULL
。mysql> SELECT 1 OR 1; -> 1 mysql> SELECT 1 OR 0; -> 1 mysql> SELECT 0 OR 0; -> 0 mysql> SELECT 0 OR NULL; -> NULL mysql> SELECT 1 OR NULL; -> 1
注意如果啟用
PIPES_AS_CONCAT
SQL 模式,||
會表示 SQL 標準字串串連運算子(如CONCAT()
)。||
運算子為非標準擴充功能,已棄用;預期會在未來的 MySQL 版本中移除對其的支援。必要時,應調整應用程式以改為使用標準 SQLOR
運算子。例外情況:如果啟用PIPES_AS_CONCAT
,則不會套用棄用,因為在此情況下,||
表示字串串連。邏輯 XOR。如果任一運算元為
NULL
,則傳回NULL
。對於非NULL
運算元,如果有奇數個運算元為非零,則評估為1
,否則會傳回0
。mysql> SELECT 1 XOR 1; -> 0 mysql> SELECT 1 XOR 0; -> 1 mysql> SELECT 1 XOR NULL; -> NULL mysql> SELECT 1 XOR 1 XOR 1; -> 1
a XOR b
在數學上等於(a AND (NOT b)) OR ((NOT a) and b)
。