sql and和or的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql and和or的问题相关的知识,希望对你有一定的参考价值。

declare @s int
set @s = ?
select * from table_1 where @s=1 and @s=2 or @s=3

这里的3个条件运行顺序是什么样的?
如果@s=1成立, 后面的2个还会运行吗?
如果@s=2成立, 另外的2个会运行吗?
如果@s=3成立, 另外的2个会运行吗?

对于where语句后面的3个条件都会运行,不会因为满足某个条件而摒弃另外2个条件。
只是条件匹配的顺序不同,返回的结果也不同。

and优先级高于or
可参考以下文档的测试,写得比较清楚。http://wenku.baidu.com/view/0692ab27ccbff121dd368332.html
对于你的问题中的sql,你目前的写法返回的结果是满足@s=1 and @s=2的,或者满足@s=3的
如果你想要的是满足@s=1 和 @s=2 或者@s=1 和@s=3的
应该写成@s=1 and ((@s=2 or @s=3)

参考资料:http://zhidao.baidu.com/question/404028489.html?oldq=1

参考技术A 首先,肯定所有or连接的过滤条件都要参与判断,只有一种情况可以省略,就是如果@s=1不成立,那@s=2就无需判断了,但不管遇到什么情况,@s=3都要进行判断。 参考技术B 你这样的写法结果是:select * from table_1 where ( @s=1 and @s=2 ) or @s=3 懂了没

带有 WHERE、AND 和 OR 的 SQL 选择语句

【中文标题】带有 WHERE、AND 和 OR 的 SQL 选择语句【英文标题】:SQL Select Statement with WHERE, AND, OR 【发布时间】:2011-04-04 15:38:26 【问题描述】:

我想使用 MySQL 执行 SELECT 查询。我的目标是在兽医数据库中选择sex=malefur=short 和 (color=black or size=big) 中的所有狗

注意:我想选择黑色或大号的狗。他们不必满足这两个要求。他们只需要满足其中一个。

我已经写了下面的SQL语句,但我不确定我是否正确:

SELECT name, sex, fur, color 
FROM dogs 
WHERE TRUE sex='male' AND fur='short' AND color='black' OR size="big";

如果我的措辞太混乱,请原谅。

【问题讨论】:

【参考方案1】:

您在目标描述中使用括号的方式是正确的。语法是:

SELECT name, sex, fur, color 
    FROM dogs 
    WHERE sex="male" AND fur="short" AND (color="black" OR size="big");

【讨论】:

【参考方案2】:

根据Operator precedence for MySQLAND的优先级高于OR

所以 C1 AND C2 OR C3 将被视为(C1 AND C2) OR C3

要覆盖默认优先级,您需要使用括号:C1 AND (C2 OR C3)

在您的情况下,正确的查询是:

SELECT name, sex, fur, color 
FROM dogs 
WHERE sex='male' AND fur='short' AND (color='black' OR size="big");

【讨论】:

感谢 codaddict。 'WHERE TRUE' 和“sex='name'”之间应该有一个“AND”吗?【参考方案3】:

确保添加括号,以便正确评估 OR 条件。

SELECT name, sex, fur, color 
FROM dogs 
WHERE sex='male' AND fur='short' AND (color='black' OR size='big');

【讨论】:

【参考方案4】:

我已经使用了这个及其工作;

SELECT name, sex, fur, color 
FROM dogs 
WHERE sex="male" AND fur="short" AND (color="black" || size="big");

【讨论】:

【参考方案5】:

从狗中选择姓名、性别、毛皮、颜色,其中性别 ='male' 和 fur ='short' and (color ='black' or size ='big');

【讨论】:

以上是关于sql and和or的问题的主要内容,如果未能解决你的问题,请参考以下文章

sql中同时使用and和or运算符

PHP判断语句,and和or的使用

带有 WHERE、AND 和 OR 的 SQL 选择语句

在子句查询 SQL 服务器中结合 OR 和 AND [关闭]

Laravel 雄辩的 SQL 查询与 OR 和 AND 与 where 子句

SQL:如何在带有“NOT IN”条件的“Where”子句中使用“and”和“or”