SQL'AND'或'OR'首先出现?

时间:2014-01-28 22:46:30

标签: sql oracle

我有以下查询:

SELECT * FROM MUFFIN_TYPES MT
  WHERE MT.flavor IS NULL 
    OR MT.flavor IS NOT NULL 
    AND MT.additionDate IS NOT NULL

如果没有明确的括号,这就令人困惑。 MT.flavor IS NULL OR MT.flavor IS NOT NULL总是会评估为真吗?或者它会评估为MT.flavor IS NULL (OR MT.flavor IS NOT NULL AND MT.additionDate IS NOT NULL)

我找不到有关此事的任何文件。我是后两种选择,但我不确定。

注意:我正在使用Oracle Pl / SQL。

1 个答案:

答案 0 :(得分:5)

AND的优先级高于OR:

来自Oracle 12.1 docs(AND和OR的优先级至少与version 7一致 - 可能更进一步,但我没有文档链接)

先前版本:

  

运算符优先级显示在以下列表中,从最高位置开始   优先级最低。在一条线上一起显示的运算符   具有相同的优先权。

INTERVAL
BINARY, COLLATE
!
- (unary minus), ~ (unary bit inversion)
^
*, /, DIV, %, MOD
-, +
<<, >>
&
|
= (comparison), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
BETWEEN, CASE, WHEN, THEN, ELSE
NOT
&&, AND
XOR
||, OR
= (assignment), :=

但是,为了清楚起见,我强烈建议使用括号,并确保按照您想要的顺序对运算符进行评估。