sql語句中的邏輯短路

我們知道,在常見的面向過程/對象的開發語言中,邏輯判斷是存在【邏輯短路】這個概念的,判斷邏輯非的時候,如果前置條件爲true,後置條件就不會再判斷了,會直接退出邏輯判斷並返回結果true;判斷邏輯與的時候,如果前置條件爲false,後置條件就不會再判斷了,會直接退出邏輯判斷並返回結果false。邏輯短路這個概念在實際的開發中十分常見,而sql語句作爲面向結果的語言,也是存在這個概念的。

首先我們要先弄清楚where條件實際上也是邏輯判斷,where中的每個組成部分都可以看做是邏輯判斷,比如在【where yanggb = 1 or yangb = 2】中,【yanggb = 1】和【yanggb = 2】就是兩個邏輯判斷,【or】則是兩個邏輯判斷的連接符,數據庫的查詢解析器會接收這個邏輯判斷逐行匹配數據,當數據匹配上該邏輯結果就返回數據,數據匹配不上就不返回,因此在這裏,如果【yanggb = 1】匹配上了,【yanggb = 2】就不用再判斷了,節省了計算資源與時間,和常規的邏輯判斷是一致的。

再舉一下完整的例子:

條件爲【OR】的語句【where yanggb = 'yanggb' or huangq = 'huangq'】,如果【yanggb = 'yanggb'】已經成立了,這條數據就不再去判斷【huangq = 'huangq'】了 ,因爲不影響結果。

條件爲【AND】的語句【where yanggb = 'yanggb' and huangq = 'huangq'】,如果【yanggb = 'yanggb'】已經不成立了,也不去判斷【huangq = 'huangq'】,因爲成不成立都不影響結果 。

這就是sql語句裏的【邏輯短路】概念。

比較高級的用法,是在sql語句被程序調用需要判斷傳參是否爲空的情況下利用【邏輯短路】這個特性完成開發需求。

select yanggb1
from yanggb
where 1 = 1
and (:yanggb is null or yanggb = :yanggb)

在上面這段語句中,:yanggb是外部傳參,當傳參值爲空的時候,就可以匹配上所有的數據;當傳參不爲空的時候,則可以匹配上對應條件的數據,這正是【邏輯短路】的最佳應用。

 

"對一個人的依賴,是所有的情緒都想要第一時間讓你知道。"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章