19

想知道是否有人知道我们为什么在这个 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 相关的地方,我不能简单地不使用括号,以便让 SQL 为我选择名字以 A 或 B 开头的员工吗?以这种方式定位括号有什么不同?啊,括号有双重用途吗?还是在最后一个子句中优先考虑 OR,因为 AND 在它前面?

4

3 回答 3

24

看一下 SQL Server 中的运算符优先级(您尚未指定,但我想所有 RDBMS 都相同)。这意味着 AND(不带括号)在1比 OR 更紧密地结合之前被评估。

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

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

或者

  • employe.nom LIKE 'B%'

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

于 2011-05-11T17:02:22.463 回答
15

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

AND ()

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

如果没有外括号,它也将允许最后一个子句的任何内容为真。

于 2011-05-11T16:59:18.893 回答
2

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

于 2011-05-11T17:07:27.557 回答