首页>Program>source

想知道是否有人会知道为什么在此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%'))

从根本上讲,关于wHERE的最后一个AND,我不能简单地不用括号来让SQL为我选择名称以A或B开头的员工吗? 这样放置括号会有什么区别? 为何括号有双重用途? 还是因为在AND之前在最后一个子句中优先考虑OR?

最新回答
  • 14天前
    1 #

    看看SQL Server中的运算符优先级(您尚未指定,但我可以想象 所有RDBMS都是相同的).这意味着与(没有括号)相比,在1绑定之前比OR绑定更紧密地进行评估。

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

    威兹威兹 威兹威兹

    OR

    威兹威兹 威兹威兹


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

  • 14天前
    2 #

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

    将同时使用两个威兹威兹 一个陈述中的条件.因此,如果任何一个为真,则 employe.service=service.code_serv AND employe.nom LIKE 'A%' 也是如此.内括号不是必需的,但有助于可视化分隔。

    如果没有外部括号,则最后一个子句也将为真。

  • 14天前
    3 #

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

  • c#:FormsAuthentication和webSecurity之间的区别
  • c++:`std :: nullptr_t`模板参数的正确用例是什么?