最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-09 21:14:28
文档

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

关于SQL语句中的AND和OR执行顺序遇到的问题:问题 昨天在写数据库SQL的时候遇到一个问题。问题的根结在SQL语句的AND和OR关键字的执行优先级问题。下面就针对这个问题进行一下测试。 场景 1、有一张学生表Student,表字段包括Id(用户主键)、Name(用户名)、Grade(年级)、Class(班级)、Sex
推荐度:
导读关于SQL语句中的AND和OR执行顺序遇到的问题:问题 昨天在写数据库SQL的时候遇到一个问题。问题的根结在SQL语句的AND和OR关键字的执行优先级问题。下面就针对这个问题进行一下测试。 场景 1、有一张学生表Student,表字段包括Id(用户主键)、Name(用户名)、Grade(年级)、Class(班级)、Sex


问题

昨天在写数据库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)

您可能感兴趣的文章:

  • Mysql带And关键字的多条件查询语句
  • MySQL中的RAND()函数使用详解
  • MySQL下的RAND()优化案例分析
  • 文档

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

    关于SQL语句中的AND和OR执行顺序遇到的问题:问题 昨天在写数据库SQL的时候遇到一个问题。问题的根结在SQL语句的AND和OR关键字的执行优先级问题。下面就针对这个问题进行一下测试。 场景 1、有一张学生表Student,表字段包括Id(用户主键)、Name(用户名)、Grade(年级)、Class(班级)、Sex
    推荐度:
    标签: sql 顺序 关于
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top