SQL逻辑运算符优先级:AND和OR
问题:
考虑以下SQL语句:
<code class="language-sql">SELECT [...] FROM [...] WHERE some_col IN (1,2,3,4,5) AND some_other_expr</code>
和
<code class="language-sql">SELECT [...] FROM [...] WHERE some_col IN (1,2,3) OR some_col IN (4,5) AND some_other_expr</code>
这两个语句等价吗?如果不等价,我们如何确定它们的优先级?
答案:
AND和OR运算符的优先级
在SQL中,运算符优先级决定了WHERE子句中逻辑运算符的计算顺序。AND和OR运算符的优先级如下:
这意味着即使AND运算符出现在OR运算符的右侧,也会优先计算。
将优先级应用于语句
在给定的语句中:
因此,第二个语句将按以下方式计算:
<code class="language-sql">WHERE (some_col IN (1,2,3)) OR (some_col IN (4,5) AND some_other_expr)</code>
真值表验证
这是一个真值表,用于说明计算差异:
some_col | some_other_expr | 语句 1 | 语句 2 |
---|---|---|---|
1 | 0 | False | True |
2 | 1 | True | True |
3 | 0 | False | True |
4 | 0 | False | False |
5 | 1 | False | True |
如我们所见,这两个语句的真值在第一行有所不同,这表明它们不等价。
使用括号来覆盖优先级
如果要更改计算顺序,可以使用括号来覆盖默认优先级。例如,要使第二个语句与第一个语句等价,需要将其编写如下:
<code class="language-sql">WHERE (some_col IN (1,2,3) OR some_col IN (4,5)) AND some_other_expr</code>
以上是SQL 的'AND”和'OR”运算符是否具有不同的优先级?这如何影响查询结果?的详细内容。更多信息请关注PHP中文网其他相关文章!