1. 程式人生 > 實用技巧 >MySQL教程54-MySQL邏輯運算子

MySQL教程54-MySQL邏輯運算子

邏輯運算子又稱為布林運算子,用來確定表示式的真和假。MySQL中支援的邏輯運算子如下表所示。

MySQL 中的邏輯運算子
運算子作用
NOT 或者 ! 邏輯非
AND 或者 && 邏輯與
OR 和 || 邏輯或
XOR 邏輯異或

下面分別討論 MySQL 邏輯運算子的使用方法。

NOT!都是邏輯非運算子,返回和運算元相反的結果,具體語法規則為:

  • 當運算元為 0(假)時,返回值為 1;
  • 當運算元為非零值時,返回值為 0;
  • 當運算元為 NULL 時,返回值為 NULL。

【例項1】分別使用非運算子 NOT 或者 ! 進行邏輯判斷,執行結果如下:

由執行結果可以看出,NOT 1+1

! 1+1的返回值不同,這是因為 NOT 與 ! 的優先順序不同:

  • NOT 的優先順序低於 +,因此NOT 1+1相當於NOT(1+1),先計算1+1,然後再進行 NOT 運算,由於運算元不為 0,因此NOT 1+1的結果是 0;
  • 相反,! 的優先級別要高於 +,因此! 1+1相當於(!1)+1,先計算!1結果為 0,再加 1,最後結果為 1。

注意: 在使用運算子運算時,一定要注意運算子的優先順序,如果不能確定計算順序,最好使用括號,以保證運算結果的正確。

邏輯與運算子(AND 或者 &&)

AND 和 && 都是邏輯與運算子,具體語法規則為:

  • 當所有運算元都為非零值並且不為 NULL 時,返回值為 1;
  • 當一個或多個運算元為 0 時,返回值為 0;
  • 運算元中有任何一個為 NULL 時,返回值為 NULL。

【例項2】分別使用與運算子 AND 和 && 進行邏輯判斷,執行結果如下:

由結果可以看到,AND 和 && 的作用相同。1 AND-1中沒有 0 或者 NULL,所以返回值為 1;1 AND 0中有運算元 0,所以返回值為 0;1 AND NULL雖然有 NULL,所以返回值為 NULL。

注意:AND 運算子可以有多個運算元,但要注意多個運算元運算時,AND 兩邊一定要使用空格隔開,不然會影響結果的正確性。

邏輯或運算子(OR 或者 ||)

  • 當兩個運算元都為非 NULL 值時,如果有任意一個運算元為非零值,則返回值為 1,否則結果為 0;
  • 當有一個運算元為 NULL 時,如果另一個運算元為非零值,則返回值為 1,否則結果為NULL;
  • 假如兩個運算元均為 NULL 時,則返回值為 NULL。

【例項3】分別使用或運算子 OR 和 || 進行邏輯判斷,執行結果如下:

由結果可以看到,OR 和 || 的作用相同。下面是對各個結果的解析:

  • 1 OR -1 OR 0含有 0,但同時包含有非 0 的值 1 和 -1,所以返回結果為 1;
  • 1 OR 2中沒有運算元 0,所以返回結果為 1;
  • 1 OR NULL雖然有 NULL,但是有運算元 1,所以返回結果為 1;
  • 0 OR NULL中沒有非 0 值,並且有 NULL,所以返回值為 NULL;
  • NULL OR NULL中只有NULL,所以返回值為NULL。

異或運算(XOR 運算子)

XOR 表示邏輯異或,具體語法規則為:

  • 當任意一個運算元為 NULL 時,返回值為 NULL;
  • 對於非 NULL 的運算元,如果兩個運算元都是非 0 值或者都是 0 值,則返回值為 0;
  • 如果一個為0值,另一個為非 0 值,返回值為 1。

【例項4】使用異或運算子 XOR 進行邏輯判斷,SQL語句如下:

由結果可以看到:

  • 1 XOR 10 XOR 0中運算子兩邊的運算元都為非零值,或者都是零值,因此返回 0;
  • 1 XOR 0中兩邊的運算元,一個為 0 值,另一個為非 0 值,所以返回值為 1;
  • 1 XOR NULL中有一個運算元為 NULL,所以返回值為 NULL;
  • 1 XOR 1 XOR 1中有多個運算元,運算子相同,因此運算順序從左到右依次計算,1 XOR 1的結果為 0,再與 1 進行異或運算,所以返回值為 1。

提示:a XOR b 的計算等同於 (a AND (NOT b))或者 ((NOT a) AND b)。