我有以下查询:
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.
AND的优先级高于OR:
从Oracle 12.1 docs (AND和OR的优先级至少与版本7一致- 可能更进一步,但我没有文档链接)
以前的版本:
版本8
版本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), :=
但是,为了清楚起见,我强烈建议使用括号,并确保按照您想要的顺序对运算符进行求值.