我们知道,在常见的面向过程/对象的开发语言中,逻辑判断是存在【逻辑短路】这个概念的,判断逻辑非的时候,如果前置条件为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是外部传参,当传参值为空的时候,就可以匹配上所有的数据;当传参不为空的时候,则可以匹配上对应条件的数据,这正是【逻辑短路】的最佳应用。
"对一个人的依赖,是所有的情绪都想要第一时间让你知道。"