2012-05-30 41 views
0

嗯,我觉得很简单的问题,但我找不到满意的答案。 这两个查询有区别吗?这两个查询有区别吗?

SELECT * FROM table WHERE column1 = 'x' OR column2 = 'x' 

SELECT * FROM table WHERE (column1 = 'x' OR column2 = 'x') 

在此先感谢

+6

不,没有。 – eggyal

+1

没有,但你应该习惯把OR条件放在圆括号里,因为AND具有比OR->'x和(y或z)更高的优先级。 –

回答

2

现在有没有区别在您的查询。

如果在查询中添加了AND条件,则会有差异。

e.g

SELECT * FROM table WHERE id=1 AND column1 = 'x' OR column2 = 'x' 

SELECT * FROM table WHERE id=1 AND (column1 = 'x' OR column2 = 'x') 

SELECT * FROM table WHERE id=1 AND column1 = 'x' OR column2 = 'x' 

将相当于

SELECT * FROM table WHERE (id=1 AND column1 = 'x') OR column2 = 'x' 

希望你有所作为。

+1

明白了,谢谢! – Crinsane

1

没有,有没有一个单一的差别。

查看更多MySQL语法here

1

号其相同。只要有两个条件大括号没有太大意义。

2

而且我上面的评论,the manual解释说:

一些由MySQL执行的优化遵循:

  • 去除不必要的括号:

     ((a AND b) AND c OR (((a AND b) AND (c AND d)))) 
    -> (a AND b AND c) OR (a AND b AND c AND d)

所以不,没有任何区别。

3

当AND运算符还有一个条件时,括号的作用将是有用的。 否则执行计划除语法外没有区别。

+5

+1,删除了我的副本 – Habib