主页 > 知识库 > 关于SQL语句中的AND和OR执行顺序遇到的问题

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

热门标签:福建外呼电销机器人加盟 百度地图标注要什么软件 400电话申请厂家现货 徐泾镇腾讯地图标注 昌德讯外呼系统 天津公司外呼系统软件 自己做地图标注需要些什么 中国地图标注公司 电话机器人的价格多少钱一个月

问题

昨天在写数据库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语句中的AND和OR执行顺序遇到的问题》,本文关键词  关于,SQL,语句,中的,AND,和,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《关于SQL语句中的AND和OR执行顺序遇到的问题》相关的同类信息!
  • 本页收集关于关于SQL语句中的AND和OR执行顺序遇到的问题的相关信息资讯供网民参考!
  • 推荐文章