博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL AND和OR求值顺序
阅读量:6715 次
发布时间:2019-06-25

本文共 710 字,大约阅读时间需要 2 分钟。

假如需要列出价格为10美元及以上,且由DLL01或BRS01制造的所有产品。下面的SELECT语句使用组合的AND和OR操作符建立了一个WHERE子句:

SELECT prod_name, prod_price FROM Products WHERE vend_id = 'DLL01' OR vend_id = ‘BRS01’ AND prod_price >= 10;

分析▼

请看上面的结果。返回的行中有4行价格小于10美元,显然,返回的行未按预期的进行过滤。为什么会这样呢?原因在于求值的顺序。SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。当SQL看到上述WHERE子句时,它理解为:由供应商BRS01制造的价格为10美元以上的所有产品,以及由供应商DLL01制造的所有产品,而不管其价格如何。换句话说,由于AND在求值过程中优先级更高,操作符被错误地组合了。

此问题的解决方法是使用圆括号对操作符进行明确分组。请看下面的SELECT语句及输出:

SELECT prod_name, prod_price FROM Products WHERE (vend_id = 'DLL01' OR vend_id = ‘BRS01’) AND prod_price >= 10;

 

 

总结:在WHERE子句中使用圆括号 任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。不要过分依赖默认求值顺序,即使它确实如你希望的那样。使用圆括号没有什么坏处,它能消除歧义。

 

转载于:https://www.cnblogs.com/thiaoqueen/p/7057143.html

你可能感兴趣的文章
python发送微信及企业微信消息
查看>>
通用数据库都有哪些
查看>>
[转载]linux 文件改名,移动
查看>>
【BZOJ】2151 种树
查看>>
hello Cookie
查看>>
xml2map map2xml
查看>>
Extra Credits: Symbolism 101
查看>>
Idea配置JRebel插件的详细配置及图解
查看>>
[LeetCode] #167# Two Sum II : 数组/二分查找/双指针
查看>>
29、SurfaceView
查看>>
QLExpress语法介绍
查看>>
[python] [转]如何自动生成和安装requirements.txt依赖
查看>>
java中微信统一下单采坑(app微信支付)
查看>>
AngularJs创建省,市,区的3级列表
查看>>
wp7 独立存储
查看>>
项目UML设计(团队)
查看>>
Divideing Jewels
查看>>
Oulipo (poj3461
查看>>
无法建立目录wp-content/uploads/xxxx/xx。有没有上级目录的写权限?解决办法
查看>>
poj 3037 Skiing
查看>>