• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    关于SQL语句中的AND和OR执行顺序遇到的问题

    问题

    昨天在写数据库SQL的时候遇到一个问题。问题的根结在SQL语句的AND和OR关键字的执行优先级问题。下面就针对这个问题进行一下测试。

    场景

    1、有一张学生表Student,表字段包括Id(用户主键)、Name(用户名)、Grade(年级)、Class(班级)、Sex(性别)。如下:

    表结构

    2、在表中导入十条测试数据,如下:

    表数据

    3、现需要查询出性别为女的1年级女学生,或者性别为女的2班级女学生。SQL语句如下:
        select * from student where sex='女' and grade=1 or class=2
    但是该sql查询出来的结果并不符合要求,执行结果如下:

    执行结果

    执行的结果中还查询出了班级为2的男学生,显然结果是不正确的。

    4、修改下SQL语句,添加上括号。如下:

    select * from student where sex='女' and (grade=1 or class=2)

    该sql查询出来的结果符合要求

    分析

    从上面的场景中,问题的关键就在于AND和OR的执行顺序问题。
    查阅资料,关系型运算符优先级高到低为:NOT >AND >OR
    如果where 后面有OR条件的话,则OR自动会把左右的查询条件分开。
    就如上面场景中的第一条语句,他的查询条件分为两部分(或):

    1、sex='女' and grade=1
    2、 class=2

    这也就是查询出1年级的女学生,2班级的学生。不符合最初查询的要求。
    那么解决办法就是使用括号区分执行的顺序
    就如上面场景的第二条语句,查询条件分为两部分(并):

    1、 sex='女' 
    2、 (grade=1 or class=2)
    

    您可能感兴趣的文章:
    • SQL语句执行顺序图文介绍
    • SQL语句执行顺序详解
    • SQL语句执行深入讲解(MySQL架构总览->查询执行流程->SQL解析顺序)
    • 从零开始学习SQL查询语句执行顺序
    • 一文告诉你Sql的执行顺序是怎样的
    上一篇:从零开始学习SQL查询语句执行顺序
    下一篇:SQL语句中OR和AND的混合使用的小技巧
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    关于SQL语句中的AND和OR执行顺序遇到的问题 关于,SQL,语句,中的,AND,和,