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

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

    你要去做一个大人,不要回头,不要难过。
  • 相关阅读:
    Jexus部署Asp.Net Core项目
    Docker 学习
    mysql 调优 (转)
    ZXHN H218N 超级管理员账号
    微擎遇到 请先更新或安装主模块后再安装插件 问题解决
    centos7 + php7
    PPTPD 服务搭建
    精心调制的Bash主题分享
    vue
    木马技术
  • 原文地址:https://www.cnblogs.com/yanggb/p/14823598.html
Copyright © 2020-2023  润新知