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个会运行吗?
只是条件匹配的顺序不同,返回的结果也不同。
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=male
、fur=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 服务器中结合 OR 和 AND [关闭]