Designed by 77
加载资源 ......
感谢 ♥ 作者
先不感谢了

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是外部传参,当传参值为空的时候,就可以匹配上所有的数据;当传参不为空的时候,则可以匹配上对应条件的数据,这正是【逻辑短路】的最佳应用。

 

"对一个人的依赖,是所有的情绪都想要第一时间让你知道。"

posted @ 2021-06-09 06:13  yanggb  阅读(993)  评论(2编辑  收藏  举报