select语句的where子句中的条件

Posted

技术标签:

【中文标题】select语句的where子句中的条件【英文标题】:Condition in where clause of a select statement 【发布时间】:2014-03-13 13:47:46 【问题描述】:

假设我有一个 select 语句:

SELECT * FROM TABLE WHERE a=a or b=b and c=c

条件是否评估如下:

1->a=a 2->b=b 3->b=b and c=c 4->a=a or b=b and c=c

我有些困惑。

【问题讨论】:

为什么要添加供应商特定标签?这件事肯定与供应商无关,所以sql 标签就足够了。 【参考方案1】:

and has higher precedence。是一样的

SELECT * FROM TABLE 
WHERE a=a or (b=b and c=c)

查询返回任一

的所有记录
a=a

b=b AND c=c

【讨论】:

你能列出没有括号的步骤吗? SELECT * FROM TABLE WHERE a=a or b=b and c=c ,你能告诉我答案吗?即没有括号 同不带括号。 and 绑定的数量超过 or【参考方案2】:

首先它计算 AND 然后 OR。因此,如果 a=a 则不管其余的。

这意味着 AND 具有更高的优先级。当a=a or b=b and c=c 条件被计算实际上第一部分(a = a)被检查,如果它是真的,不管休息的价值是什么 true or (any value) = true

你不能在需要的地方添加括号吗?

【讨论】:

请扩展您的答案。拥有超过 1000 个答案,您肯定可以做得更好。

以上是关于select语句的where子句中的条件的主要内容,如果未能解决你的问题,请参考以下文章

简述SELECT语句中的FROM、WHERE以及ORDER BY子句的作用。SQL Server

在mysql select语句中使用条件where子句

MySQL中的常见子查询语句

SQL语句中,子句不能使用列别名问题

[MySQL] 过滤数据

where条件放在子SQL语句中是否查询速度更快?