【问题标题】:SQL Parentheses use in an OR clause在 OR 子句中使用 SQL 括号
【发布时间】:2011-08-23 11:57:27
【问题描述】:

想知道是否有人知道我们为什么在此 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 在它前面?

【问题讨论】:

标签: sql parentheses


【解决方案1】:

查看 SQL Server 中的 Operator Precedence(您尚未指定,但我想所有 RDBMS 都一样)。这意味着 AND(不带括号)1比 OR 绑定更紧密之前进行评估。

所以在你的具体情况下,没有括号,条件是:

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

  • employe.nom LIKE 'B%'

1SQL 中刻意未指定求值顺序,从而允许对保证从左到右或优先排序求值的语言进行更多可能的重新排序。

【讨论】:

    【解决方案2】:

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

    AND ()
    

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2021-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多