SQL括号在OR子句中使用

ang*_*ela 17 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%'))
Run Code Online (Sandbox Code Playgroud)

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

Dam*_*ver 22

看看SQL Server 中的运算符优先级(您没有指定,但我认为它对所有RDBMS都是一样的).这意味着ANDs(没有括号)1更紧密地绑定之前被评估.

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

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

要么

  • employe.nom LIKE 'B%'

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


Dus*_*ine 13

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

AND ()
Run Code Online (Sandbox Code Playgroud)

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

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