香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > MYSQL >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

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


时间:2020-11-03 13:41 作者:admin610456


问题

昨天在写数据库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=12、 class=2

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

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

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)