我目前正在做的课程在WHERE子句中使用括号,如下所示:
SELECT bar
FROM Foo
WHERE (CurrentState = 'happy');
这是标准的sql吗? 如果不是那么为什么要使用它们
似乎没有在日期和版本中使用我有Darwen的书。
修改
只是为了澄清 - 我指的是1992 sql标准
答案 0 :(得分:10)
是。您可以使用括号绑定where子句的组件。在您的示例中,这不是必需的,但如果您有多个and
和or
组件,则可能需要使用括号来确保正确的操作顺序,或者只是自我记录查询。
示例1:
select *
from foo
where
(class='A' and subclass='B')
or (class='C' and subclass='D')
在示例1中,并非严格要求parens,因为and
比or
绑定得更紧,但如果您有多个or
条件绑定and
,那么需要它来获得正确的结果,如下面的例子2所示。
示例2:
select *
from foo
where
(class='A' or class='B')
and (subclass='C' or subclass='D')
我在任何一种情况下都使用它们,因为我不喜欢以与查询优化器相同的方式解析脑中的sql - 我宁愿明确它并且更快地理解意图是什么。
答案 1 :(得分:5)
它们是可选的。它们对更复杂的WHERE语句有意义。
... WHERE (created > '2012-10' AND created < '2013-01')
OR (modified > '2012-10' AND modified < '2013-01')
答案 2 :(得分:3)
没有。只有当您在声明中AND
OR
条件时才需要使用它们以避免短路,就像这样:
SELECT...
FROM...
WHERE col1 > 1 AND col2 < 3 AND col3 >= OR col3 = 1 AND col5 < 1
上述查询会给您带来意想不到的结果,因为它无法确定它将采取的正确条件。在这种情况下,圆括号将帮助您隔离条件,
SELECT...
FROM...
WHERE col1 > 1 AND col2 < 3 AND (col3 >= OR col3 = 1) AND col5 < 1
顺便说一下,它应该是单引号' '
而不是‘ ’