我正在尝试研究如何运行SQL查询并且遇到了一些绊脚石。
如果使用类似于以下的where子句:
A OR B AND C
这可能意味着以下任何一个
(A OR B)和C
或 的
OR(B和C)
在大多数情况下,结果将是相同的,但如果要查询的集合仅包含{A},则第一个变量将返回空结果集,第二个变量将返回{A}。事实上,SQL确实返回了1个结果。
有没有人知道(或有链接)有助于我理解查询构建方式的任何见解?
番茄酱
答案 0 :(得分:2)
根据MSDN的顺序如下:
〜(按位NOT)
(*)(乘),/(分部),%(模数)
(+)(正), - (负),+(加),(+连接), - (减),& (按位AND),^(按位异或),| (按位OR)
=,>,<,> =,< =,<>,!=,!>,!< (比较运营商)
不是
和
ALL,ANY,BETWEEN,IN,LIKE,或某些
- 醇>
=(作业)
答案 1 :(得分:2)
在AND
优先级高于OR
的知识(来自文档)中,您应该以联合正常形式编写WHERE
子句的谓词(" a AND
条款的附件")。
如果意图是
( A OR B ) AND C
然后写下来,一切都很好。
但是,如果意图是
A OR ( B AND C )
然后我建议你应用导致联合正常形式的distributive rewrite law,即
( P AND Q ) OR R <=> ( P OR R ) AND ( Q OR R )
在你的情况下:
A OR ( B AND C ) <=> ( A OR B ) AND ( A OR C )
答案 2 :(得分:0)
AND
和OR
有不同的先行。
答案 3 :(得分:0)
对于SQL-Server(这是您的标记),这里的优先级为http://msdn.microsoft.com/en-us/library/ms190276.aspx但是.. 如果你担心给定的确切结果集,你应该开始使用()子集。