想知道是否有人会知道为什么我们在这个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在它之前?
答案 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,这是不正确的。