SQL逻辑操作符优先性:和或

SQL逻辑操作符优先性:和或

以下两项声明是否相等?

SELECT [...]FROM [...]WHERE some_col in (1,2,3,4,5) AND some_other_expr

SELECT [...]FROM [...]WHERE some_col in (1,2,3) or some_col in (4,5) AND some_other_expr

我能用什么真值表来证实这一点吗?


慕斯王
浏览 601回答 3
3回答

守着星空守着你

And优先于Or所以即使a <=> a1 Or a2Where&nbsp;a&nbsp;And&nbsp;b与Where&nbsp;a1&nbsp;Or&nbsp;a2&nbsp;And&nbsp;b,因为这将被执行为Where&nbsp;a1&nbsp;Or&nbsp;(a2&nbsp;And&nbsp;b)为了使它们保持不变,您想要的是以下内容(使用括号覆盖优先级规则):&nbsp;Where&nbsp;(a1&nbsp;Or&nbsp;a2)&nbsp;And&nbsp;b这里有一个例子来说明:Declare&nbsp;@x&nbsp;tinyInt&nbsp;=&nbsp;1Declare&nbsp;@y&nbsp;tinyInt&nbsp;=&nbsp;0Declare&nbsp;@z&nbsp;tinyInt&nbsp;=&nbsp;0Select&nbsp;Case&nbsp;When&nbsp;@x=1&nbsp;OR&nbsp;@y=1&nbsp;And&nbsp;@z=1&nbsp;Then&nbsp;'T'&nbsp;Else&nbsp;'F'&nbsp;End&nbsp;--&nbsp;outputs&nbsp; TSelect&nbsp;Case&nbsp;When&nbsp;(@x=1&nbsp;OR&nbsp;@y=1)&nbsp;And&nbsp;@z=1&nbsp;Then&nbsp;'T'&nbsp;Else&nbsp;'F'&nbsp;End&nbsp;--&nbsp;outputs&nbsp;F对于那些喜欢查阅参考资料的人(按字母顺序排列):Microsoft Transact-sql运算符优先级Oracle MySQL 9操作符优先Oracle 10g条件优先级PostgreSQL运算符优先SQLite理解的SQL

繁花如伊

我再补充两点:“IN”实际上是带有括号的串行OR。在我所知道的每一种语言中都优先于OR所以,这两个表达式就是不相等的。WHERE&nbsp;some_col&nbsp;in&nbsp;(1,2,3,4,5)&nbsp;AND&nbsp;some_other_expr--to&nbsp;the&nbsp;optimiser&nbsp;is&nbsp;thisWHERE &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;some_col&nbsp;=&nbsp;1&nbsp;OR &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;some_col&nbsp;=&nbsp;2&nbsp;OR&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;some_col&nbsp;=&nbsp;3&nbsp;OR&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;some_col&nbsp;=&nbsp;4&nbsp;OR&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;some_col&nbsp;=&nbsp;5 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;some_other_expr因此,当您中断IN子句时,可以将串行OR拆分起来,并更改优先级。

拉风的咖菲猫

算术算子级联算子比较条件是[不]空,就像,[不]在[不]之间不等于非逻辑条件逻辑条件或逻辑条件可以使用括号覆盖优先级规则。
打开App,查看更多内容
随时随地看视频慕课网APP