SQL括号在OR子句中使用

时间:2011-05-11 16:56:09

标签: sql parentheses

想知道是否有人会知道为什么我们在这个SQL中使用括号: 因此,格式如下:

名称以A或B开头的员工的姓名,地点和部门。(法语的粗略翻译)。

我回答了以下方式:

SELECT service.nom_serv, localite.ville, localite.departemen
FROM service, localite, employe
WHERE service.code_loc=localite.code_loc
AND employe.service=service.code_serv
AND ((employe.nom LIKE 'A%') OR (employe.nom LIKE 'B%'))

基本上,在最后一个AND关注WHERE的地方,我不能简单地没有括号,以便为我的员工选择一个名字以A或B开头的员工吗?以这种方式定位括号有何不同?而ahy是否有双重括号?或者是在最后一个子句中优先考虑OR,因为AND在它之前?

3 个答案:

答案 0 :(得分:21)

看看SQL Server中的Operator Precedence(您没有指定,但我认为它对所有RDBMS都是一样的)。这意味着ANDs(没有括号) 1 绑定比OR更紧密之前进行评估。

因此,在您的特定情况下,没有括号,条件是:

  • employe.service=service.code_serv AND employe.nom LIKE 'A%'

OR

  • employe.nom LIKE 'B%'

1 在SQL中故意不指定评估顺序,允许更多可能的重新排序,即保证从左到右或优先顺序评估的语言。

答案 1 :(得分:13)

您可以使用它来指定子句的分组,而不是优先级。 SQL不允许您指定优先级,因为优化器将为您创建最佳优先级。

AND ()

将在一个语句中同时采用两个OR条件。因此如果其中任何一个为真,那么AND也是如此。内括号不是必需的,但有助于可视化分离。

如果没有外括号,它将允许任何带有final子句的东西也是真的。

答案 2 :(得分:1)

有额外的括号。数学中的规则是添加括号以阐明逻辑。在这种情况下,如果删除所有括号,您将得到错误的答案。你拥有的是AND((b)OR(c))。删除所有括号将从(a OR b)AND(a OR c)到(a AND b)OR c,这是不正确的。