我有以下查询:
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。
答案 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), :=
但是,为了清楚起见,我强烈建议使用括号,并确保按照您想要的顺序对运算符进行评估。