欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

mysql and or 同时存在,优先级问题

图一,图二的结果完全不一样。
and 放在下面的那个sql语句返回的结果是错误的
它把supplier不等于16和status不等于3的也查出来了

 
它把supplier不等于16和status不等于3的也查出来了











 
  •  
  •  
  •  
  •   
  •  
  •  
  •  
  •  
  •  
 
 
983037739 

 
|
发布于2016-06-16 11:20最佳答案
 
and 优先级高于 or
可以用()改变优先级
这点注意到了,没有问题
 
追问
那按理说图一的查询语句不会出现 supplier不等于16 和 status 不等于3 的啊 因为and优先级更高阿
来自 https://zhidao.baidu.com/question/1949797052048765068.html

 

sql语句not and or执行顺序

前言

今天的代码中很悲催的出现了信息泄漏的情况,开始我怎么都不肯相信,首先自信自己的编程技术,其次自信自己对业务逻辑的理解,最后彻查代码的时候,却发现问题出现在sql语句的逻辑判断上,这里记录一下吧
 

sql语句逻辑运算符优先级

首先,sql语句中逻辑运算符优先级跟c一样,not > and > or (c里面是 ! > && > || )
 

举例说明

[plain] view plain copy
 
 print?
  1. select * from table_name where a = 1 and b = 2 or c =  3;  

 

我的本意:

在table_name表里选择a = 1 并且 (b = 2 或者 c = 3)的结果集,但是结果肯定不和我想的一样,结果集是 (a = 1 并且 b =2 ) 的结果集或者 c = 3的结果集

 

因为sql的执行顺序为:

 

[plain] view plain copy
 
 print?
  1. select * from table_name where (a = 1 and b = 2) or c = 3;  

如果想达到我想的效果:

 

 

[plain] view plain copy
 
 print?
  1. select * from table_name where a = 1 and (b = 2 or c = 3);  

 

 

注意

  • 在写c或者php代码时,我们为了代码简洁或者为了炫技竟然通过&& || !各种组合达到我们想要的结果,但是写sql语句的时候还是小心一些为好,毕竟sql注入也就是这个原理
  • sql里多用()来改变执行顺序,达到自己想要的结果比较好
来自 http://blog.csdn.net/wzy_1988/article/details/8286967
普通分类: