sql语句中的逻辑短路

Posted 彩虹の你

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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是外部传参,当传参值为空的时候,就可以匹配上所有的数据;当传参不为空的时候,则可以匹配上对应条件的数据,这正是【逻辑短路】的最佳应用。

 

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

以上是关于sql语句中的逻辑短路的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 是不是会短路 IF 语句?

SQL Select 语句的用法

MyBatis:动态sql语句

使用SQL语句解决最短路径问题-SQLite

Microsoft SQL Server 代码片段收集

使用SQL语句实现最短路线问题