OR括号中使用的运算符与where子句一起返回不同的结果。

时间:2014-06-13 09:14:06

标签: sql sql-server where-clause

以下两个SQL语句之间有什么区别:

SELECT * FROM Customers
WHERE Country='France' OR Country='Mexico'

SELECT * FROM Customers
WHERE (Country='France' OR Country='Mexico')

为什么这两个语句会返回不同的结果?

2 个答案:

答案 0 :(得分:3)

没有区别。

declare @t table (id int identity (1,1), country varchar(20), b int)

insert @t (country, b) values ('france',1),('france',2),('france',3),('mexico',1),('mexico',4), ('brazil',1)

select * from @t where (country = 'france' or country = 'mexico') 
select * from @t where country = 'france' or country = 'mexico'
-- both return rows 1-5

然而,如果你添加另一个子句(例如AND),那么你需要考虑哪些条款具有优先权。

select * from @t 
where (country = 'france' or country = 'mexico') and b = 1

-- returns  rows 1 and 4

select * from @t 
where country = 'france' or country = 'mexico'  and b = 1

-- returns rows 1-4

答案 1 :(得分:0)

此查询没有区别,这两个查询应返回相同的结果 - 我已经对此事件进行了测试。这是肯定的。 clouse根据逻辑规律工作的SQL: http://en.wikipedia.org/wiki/Propositional_logic#Basic_and_derived_argument_forms

所以这种情况下的括号什么都不做。