Oracle—AND之间的差异(Case1或Case2或Case3)



大家好,我有一个相当简单的问题。

我想知道之间有什么区别

SELECT * 
  FROM TABLE 
 WHERE A = 'xxx' 
   AND (B = 'xxx' OR C='xxx' OR D='xxx')

这个查询

SELECT * 
  FROM TABLE 
 WHERE A = 'xxx' 
   AND B = 'xxx' 
    OR C='xxx' 
    OR D='xxx'

在底部查询中,它将返回2个结果,在顶部查询中,返回0个结果。

A = 'xxx' AND B = 'xxx' OR C='xxx' OR D='xxx'

相当于

(A = 'xxx' AND B = 'xxx') OR (C='xxx') OR (D='xxx')

由于操作员的优先顺序

SELECT * FROM TABLE
WHERE A = 'xxx' AND (B = 'xxx' OR C='xxx' OR D='xxx')

相当于这个

SELECT * FROM TABLE
WHERE A = 'xxx' AND B = 'xxx' OR 
      A = 'xxx' AND C = 'xxx' OR
      A = 'xxx' AND D = 'xxx'

在WHERE子句中放入的逻辑遵循布尔表达式的规则。就像代数表达式一样,也有阶运算。一般来说,订单是

  1. 不是
  2. 以及

最新更新