如何评估SQL中的where子句?

时间:2013-03-01 21:28:25

标签: sql

我已经想到了很多,但从未找到答案。我已经找到了自己的情况,我不知道如何评估SQL查询的where子句中的条件。可以肯定的是,我总是使用括号使其更具可读性,并且易于理解。我认为有时使用括号来增加可读性是好的做法,即使可能不需要它。

考虑以下查询

SELECT * 
FROM mytable 
WHERE name='Anton' 
  AND lastname='Gildebrand' 
   OR age > 18 
  AND country='Sweden'

我想这个查询实际上等于

SELECT * 
FROM mytable 
WHERE name='Anton' 
 AND (lastname='Gildebrand' OR (age > 18 AND country='Sweden'))

这是对的吗?或者如何评估条件? 它与不同的数据库引擎有什么不同吗?

2 个答案:

答案 0 :(得分:8)

SELECT * FROM mytable
WHERE name='Anton' AND lastname='Gildebrand' OR age > 18 AND country='Sweden'

等于:

SELECT * FROM mytable
WHERE (name='Anton' AND lastname='Gildebrand') OR (age > 18 AND country='Sweden')

来源:TSQLMySQLOraclePostgreSQL

答案 1 :(得分:3)

如果您正在谈论andor,那么在没有括号and的情况下,首先会对其进行评估。与数学中的*+相同。

这些规则不依赖于SQL实现。