產品操作MySQL第7篇 – 運算符 - OR

產品操作MySQL第7篇 – 運算符 - OR

MYSQL

本資料為產品崗位作為日常工作參考,語言口語化

At 2019/4/26 By David.Yang

運算邏輯

OR運算符可以相互組合多個,在表達式任意一個為TRUE,即返回TRUE

WHERE

boolean_expression

OR

boolean_expression


產品操作MySQL第7篇 – 運算符 - OR


OR短路求值

使用OR進行條件運算時,多個邏輯條件會逐個運算,直到結果確定時,才會停止剩餘部分的計算。

示例

-- TRUE OR NULL

SELECT 1 = 1 OR 1 / 0;

+----------------+

| 1 = 1 OR 1 / 0 |

+----------------+

| 1 |

+----------------+

1 row in set (0.00 sec)

OR連接兩部分運算邏輯,1 = 1 和 1 / 0

第一部分 1 = 1返回TRUE;

所以真個OR邏輯運算結果為TRUE;

因為短路求值,MYSQL將不會再對剩餘部分進行運算,1 / 0將不會進行求值;

注:

0被認為是false,非零被視為true。

OR運算符演示

我們來統計一下來自南宋和大理國的學生有多少?

SQL

SELECT

*

FROM

students

WHERE

nationality = "南宋"

OR

nationality = "大理國";

條件過濾後,結果集如下


產品操作MySQL第7篇 – 運算符 - OR


同樣,OR可以組合2個以上的或邏輯運算。

運算符的優先級

正常優先級執行

我們的業務場景當中經常會出現AND OR等組合使用的情況,

MYSQL在處理AND和OR運算邏輯時有優先級,

處理AND運算符的邏輯時優先級高於OR,

所以會之後再進行OR運算符的計算。

示例

SQL

SELECT 1 = 1 OR 1 = 0 AND 0 / 1;

+--------------------------+

| 1 = 1 OR 1 = 0 AND 0 / 1 |

+--------------------------+

| 1 |

+--------------------------+

1 row in set (0.00 sec)

AND優先級高

ϒ對AND運算進行計算,1 = 0 AND 0 / 1,表達式結果轉換為FALSE AND FALSE,所以AND邏輯返回FALSE。

ϒ對OR運算進行計算,1 = 1 OR FALSE,表達式轉換為TRUE OR FALSE,所有返回TRUE

干預優先級執行

我們可以通過調整語法進行優先級的干預,使得執行優先級根據我們的意願進行執行。

怎麼來實現呢?

通過()。

示例

SQL

SELECT (1 = 1 OR 1 = 0) AND 0 / 1;

+----------------------------+

| (1 = 1 OR 1 = 0) AND 0 / 1 |

+----------------------------+

| 0 |

+----------------------------+

1 row in set (0.00 sec)

優先執行()內的運算邏輯

ϒ對括號內()邏輯進行運算,(1 = 1 OR 1 = 0),轉化為TRUE OR FALSE,返回TRUE。

ϒ對AND邏輯進行運算,TRUE AND 0 / 1,轉化為TRUE AND FALSE,返回FALSE;

優先級執行演示

獲得來自南宋或者西夏的學生有哪些,在WHERE條件中使用OR運算邏輯來處理。

SQL

SELECT

*

FROM

students

WHERE

nationality = "南宋"

OR

nationality = "西夏";

得到一下結果


產品操作MySQL第7篇 – 運算符 - OR


在這個基礎上,我們想再申明需要年齡大於等於16歲,通過年齡來進行一個與邏輯的運算。

SQL

SELECT

*

FROM

students

WHERE

(

nationality = "南宋"

OR

nationality = "西夏"

)

AND

age >= 16;

得到結果集如下


產品操作MySQL第7篇 – 運算符 - OR


注意,

將乳我們不加括號,不對優先級進行干預會得到一個什麼樣的結果集呢?

SQL

SELECT

*

FROM

students

WHERE

nationality = "南宋"

OR

nationality = "西夏"

AND

age >= 16;

得到結果集如下


產品操作MySQL第7篇 – 運算符 - OR


這是什麼意思你通過上面的講解應該很清楚吧。

這種查詢方法的意思就是,你想要得到南宋的學生,或者西夏學生且年齡大於等於16的同學。

本篇主要在於對OR運算符的運算機制進行講解,

幫助你明白OR運算時時如何工作的。

稍微注意一下AND和OR運算符的優先級問題。


分享到:


相關文章: