问题

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

分析

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

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

更多相关文章

  1. Android(安卓)-- Android(安卓)JUint 与 Sqlite
  2. android 当系统存在多个Launcher时,如何设置开机自动进入默认的La
  3. Android(安卓)SQLiteDatabase的使用
  4. android系统服务启动顺序
  5. android 通话记录次数
  6. Android回调事件传播-android学习之旅(四十五)
  7. Android(安卓)SQLiteDatabase的使用
  8. Android(安卓)中实现FlowLayout 布局
  9. android实现关键字搜索功能

随机推荐

  1. Java 中有哪些无锁技术来解决并发问题?如
  2. 如何解决Renault Can Clip代码不正确的问
  3. 什么是 Java 内存模型?
  4. FastAPI基础之Http状态码备忘
  5. 什么是 happens-before 原则?
  6. BigDecima类型数据的处理--Non-terminati
  7. Java自学指南一、找一个开始并能坚持下去
  8. 网络变更服务器不断网方案测试
  9. 看到蛋糕,才发现自己已到而立之年
  10. VMware workstation 技巧总结(持续更新)