将条件放在ANSI语法SQL查询中的位置

aw *_*rud 3 sql oracle ansi-sql

这两个查询之间有什么区别?我一直拒绝跳过ANSI语法的潮流,因为我无法解开各种语法歧义.

是1)返回连接的产品,然后过滤掉那些重量> = 500的连接记录?并且2)过滤掉加入之前的那些?

2语法不好吗?我为什么要用它?

1:

SELECT SOMETHING
FROM FOO
INNER JOIN BAR
ON FOO.NAME = BAR.NAME
WHERE BAR.WEIGHT < 500
Run Code Online (Sandbox Code Playgroud)

2:

SELECT SOMETHING
FROM FOO
INNER JOIN BAR
ON FOO.NAME = BAR.NAME AND BAR.WEIGHT < 500
Run Code Online (Sandbox Code Playgroud)

Cha*_*ana 5

" 是1)返回连接的产品,然后过滤掉那些重量> = 500的连接记录?并且2)过滤掉连接之前的那些?"

是的,除了在逻辑上,2)将过滤器作为连接的一部分应用,而不是在连接之前.但是,对于内部联接,此区别对查询的最终结果集没有影响.对于外连接,otoh,这种区别可以改变结果.

注意:使用逻辑上的单词(说这是查询处理器在逻辑上执行这些步骤的顺序)很重要,并且字面意思.进程者使用的实际序列可能符合也可能不符合该逻辑描述.只保证查询结果看起来好像处理器按此顺序执行这些步骤...