课程括号我目前做的是括号中的WHERE子句,像这样:是在WHERE子句标准的SQL
SELECT bar
FROM Foo
WHERE (CurrentState = 'happy');
这是标准的SQL?
如果不是那么为什么要使用它们?
似乎没有在日期& Darwen书我使用。
编辑
只是为了澄清 - 我指的是1992年的SQL标准
课程括号我目前做的是括号中的WHERE子句,像这样:是在WHERE子句标准的SQL
SELECT bar
FROM Foo
WHERE (CurrentState = 'happy');
这是标准的SQL?
如果不是那么为什么要使用它们?
似乎没有在日期& Darwen书我使用。
编辑
只是为了澄清 - 我指的是1992年的SQL标准
号他们仅在需要时你有你的发言AND
上OR
条件下使用避免短路,就像这样:
SELECT...
FROM...
WHERE col1 > 1 AND col2 < 3 AND col3 >= OR col3 = 1 AND col5 < 1
上面的查询将得到é你意想不到的结果,因为它不会确定它将采取的正确条件。 A轮支架将帮助你在这种情况下,隔离条件,
SELECT...
FROM...
WHERE col1 > 1 AND col2 < 3 AND (col3 >= OR col3 = 1) AND col5 < 1
的方式,它应该是单引号' '
不‘ ’
你是什么意思的“号”?问题是“括号中的WHERE子句标准SQL” – Mat 2013-04-20 16:43:51
@Mat他们是标准的SQL? – 2013-04-20 16:45:02
它们可能是有效的,但它们不是标准的。 – 2013-04-20 16:45:03
它们是可选的。它们对更复杂的WHERE语句有意义。
... WHERE (created > '2012-10' AND created < '2013-01')
OR (modified > '2012-10' AND modified < '2013-01')
+1感谢贡献 – whytheq 2013-04-20 16:59:14
是的。您可以使用括号来绑定where子句的组件。在您的示例中,这不是必需的,但如果您有多个组件and
和or
,则可能需要括号来确保操作的正确顺序或仅仅是为了自行记录查询。
例1:
select *
from foo
where
(class='A' and subclass='B')
or (class='C' and subclass='D')
在例1中,括号是没有严格要求,因为and
结合比or
越紧,但如果你有多个or
条件由and
绑你需要它得到正确的结果,如下例2所示。
例2:
select *
from foo
where
(class='A' or class='B')
and (subclass='C' or subclass='D')
我使用它们在任何情况下,因为我不喜欢解析SQL中我的头以同样的方式查询优化器 - 我宁愿是明确关于它并且更快地理解它的意图是什么。
+1感谢您的信息,但显然当事情变得复杂的布尔逻辑时,我会使用括号,只是想知道为什么我的课程材料在没有AND和OR操作符时使用它们。 – whytheq 2013-04-20 16:56:23
有时课程资料很奇怪。通常,他们会做一些愚蠢的事情,只是为了让你养成教授认为有用的习惯。在这种情况下,你可能会问你的经理为什么他/她认为这很重要。 – PaulProgrammer 2013-04-20 17:00:49
是的,SQL标准允许使用括号。 – 2013-04-20 16:39:53
另一方面,你放在那里的引号没有。 – Mat 2013-04-20 16:42:06
@Mat同意 - 我编辑过 - 这是单引号在doc文件中输入时的样子;我刚刚从doc复制到SO。奇怪的 – whytheq 2013-04-20 16:50:29