我有以下查询。
SELECT ...
FROM cats
LEFT JOIN mice AS mice ON cats.id = mice.cats_id
WHERE cats.id = 43 AND (((mice.size = 'L') AND (mice.type = 'SP') AND (mice.dying_noise = '')) OR (mice.type IS NULL))
这是什么类型的条款? /这是否有特殊名称?
(((mice.size = 'L') AND (mice.type = 'SP') AND (mice.dying_noise = '')) OR (mice.type IS NULL))
它在MySql中对我有用,所以它可能合法也可能不合法。
答案 0 :(得分:2)
这样的表达式称为完全括号。可以在不知道运算符优先级的情况下正确评估它们,因为顺序完全由括号控制。
当它们强制执行的评估顺序与默认运算符优先级规则建立的评估顺序匹配时,制作此类表达式没有特别的意义。虽然在许多情况下,您可以通过添加不改变优先级规则所暗示的顺序的括号来提高可读性,但是完全用括号表达表达式几乎没有意义。
当通过某种程序或将通过元数据定义的表达式转换为SQL字符串的库自动生成查询条件时,通常会创建完全括号的表达式。