背景

前几天在给徒弟验收第一遍机房收费系统的时候,对于“组合查询”这一块,如果把三行查询内容输满的话,就会出错误,两行没有问题,经过第二遍验收后来和徒弟一同探讨这个问题,找到了出错的地方:一、输入查询内容的框对应数据库的字段类型全部是“String”,导致出现“2>11”这样的错误;二、对于Sql Server中and和or的优先级理解不当,徒弟一直坚持在Sql Server中and和or的优先级相同,也就是说无论是选择and还是or,执行顺序都是从上往下,前两行做完筛选之后,再去结合第三行到数据库中做筛选,可是真的是这样的吗?

验证

针对Student_Info表,表中字段信息如图:

按照徒弟的思路(and和or在SqlServer中优先级相同),设计如下查询语句:

select * from Student_Info where StudentNo='1' or Sex='男'</span>

这样子选出来的是三条完整的记录,没有问题。

同样照着这个思路再加上一个限制条件:

select * from Student_Info where StudentNo='1' or Sex='男' and Holder='3'

按照徒弟的意思,这次筛选出来的记录仅仅是第三条,即“StudentNo=2”的那条,可是结果却让我们大跌眼镜,如图:


    此时出现了两条记录!!!,这说明“and和or在Sql Server中的优先级是不同的”。然而出现这个结果的那条Sql语句真正的逻辑关系应该是这样的:

select * from Student_Info where (StudentNo='1') or (Sex='男' and Holder='3')

虽然加上括号不符合规范,但是这样能够直观的说明问题,也就是说,就像我们学习模拟电路中讲的逻辑关系一样,逻辑与的优先级比逻辑或要高,但是同时低于逻辑非,知识是相通的,最近接触数据结构开始研究算法了,经历了这次师徒交流,为算法的学习打下了一点兴趣。

扩展

除了Sql Server,对于C#、JAVA等编程语言,我拿JAVA做了测试:

public class AndOr {public static void main(String[] args){System.out.println(false && true ||true);System.out.println(true || true && false);}
}

输出结果如图:

则说明,不仅仅是在Sql Server中,电路中、编程语言中都是and的优先级高于or,这对于将来算法的学习也是做了铺垫。同时,建议大家回头去想想自己做的组合查询,是不是会因为第二个逻辑判断条件的加入而导致输出错误的现象,如果有,欢迎一起交流,这块我相信这个问题绝对不是一个人的问题。

Sql Server中and和or的优先级问题相关推荐

  1. SQL Server中的锁类型及用法(转载)

    一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新  A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏读  ...

  2. 深入浅出SQL Server中的死锁

    简介 死锁的本质是一种僵持状态,是多个主体对于资源的争用而导致的.理解死锁首先需要对死锁所涉及的相关观念有一个理解. 一些基础知识 要理解SQL Server中的死锁,更好的方式是通过类比从更大的面理 ...

  3. Microsoft SQL Server中的事务(转载)

    1.1 事务的概念 事务是作为单个工作单元而执行的一系列操作,比如查询和修改数据等. 事务是数据库并发控制的基本单位,一条或者一组语句要么全部成功,对数据库中的某些数据成功修改; 要么全部不成功,数据 ...

  4. SQL Server 中关于EXCEPT和INTERSECT的使用方法

    熟练使用SQL Server中的各种使用方法会给查询带来非常多方便.今天就介绍一下EXCEPT和INTERSECT.注意此语法仅在SQL Server 2005及以上版本号支持. EXCEPT是指在第 ...

  5. sql server作业_在SQL Server中报告作业失败并发出警报

    sql server作业 SQL Server Agent can be used to run a wide variety of tasks within SQL Server. The buil ...

  6. 透明加密tde_如何在SQL Server中监视和管理透明数据加密(TDE)

    透明加密tde Transparent Data Encryption (TDE) was originally introduced in SQL Server 2008 (Enterprise E ...

  7. 如何在SQL Server中处理过多的SOS_SCHEDULER_YIELD等待类型值

    The SQL Server SOS_SCHEDULER_YIELD is a fairly common wait type and it could indicate one of two thi ...

  8. SQL Server 中关于EXCEPT和INTERSECT的用法

    熟练使用SQL Server中的各种用法会给查询带来很多方便.今天就介绍一下EXCEPT和INTERSECT.注意此语法仅在SQL Server 2005及以上版本支持. EXCEPT是指在第一个集合 ...

  9. SQL Server中的数字,浮点数和小数之间的差异

    本文翻译自:Difference between numeric, float and decimal in SQL Server I searched in Google and also visi ...

最新文章

  1. mysql crm动态列设计_值得收藏:一份非常完整、详细的MySQL规范
  2. Linux下编译build的命令,Linux命令行下编译Android NDK的示例代码
  3. 小小base标签在web开发中的大作用
  4. count(*),count(1),count(0)效率
  5. 如何快速处理线上故障【转】
  6. Java 文件操作-RandomAccessFile
  7. Open Flash Chart 图表组件
  8. 最简单的基于DirectShow的示例:获取Filter信息
  9. 网站api自己怎么写_网站建设及推广网站关键词优化自己怎么做网站推广
  10. Hadoop开发环境搭建
  11. 软考高级 真题 2017年上半年 信息系统项目管理师 综合知识
  12. python 计算gdp_菜鸟笔记Python3——数据可视化(三)世界GDP分析
  13. kindle中html笔记,大神教你用Kindle做笔记,事半功倍的方法来了!
  14. 数据库基础及常用SQL语句
  15. 人脸识别最低像素_深入浅出人脸识别技术
  16. 一年省一,两年国集,高二斩获世界金牌,他有哪些经验值得借鉴?
  17. Eclipse的快捷键设置及使用
  18. 【5G NR】CSI-RS
  19. 用PhoneGap开发移动程序
  20. 腾讯云安装部署Linux保姆教程

热门文章

  1. Node解析二进制文件
  2. 如何通俗地理解基于查找表的DDS、相位累加器、相位调制器?
  3. 2016-04-01
  4. Markdown KaTex 正负号±
  5. 企业选择OA系统的好处有哪些?该如何选择?
  6. vue打包兼容qq浏览器内核问题
  7. 斐讯N1 安装mysql
  8. 平平无奇的python大作业罢辽
  9. 浏览器图片加载是并行的么?再就是Js和CSS呢?是串行的?
  10. 数据存储方案(一) - 文件存储、SharedPreferences存储