所有这些SQL连接在逻辑上是否相同?

Ben*_*Ben 5 sql join

我只是想知道以下所有连接是否在逻辑上等效,如果没有,为什么不呢?

SELECT t1.x, t2.y from t1, t2 where t1.a=t2.a and t1.b=t2.b and t1.c = t2.c;

SELECT t1.x, t2.y from t1 join t2 on t1.a=t2.a where t1.b=t2.b and t1.c = t2.c;

SELECT t1.x, t2.y from t1 join t2 on t1.a=t2.a and t1.b=t2.b where t1.c = t2.c;

SELECT t1.x, t2.y from t1 join t2 on t1.a=t2.a and t1.b=t2.b and t1.c = t2.c;
Run Code Online (Sandbox Code Playgroud)

我想我真正的问题是:将"where"与"on"结合起来做一些不同于仅仅具有多个条件的东西与"on"结合在一起?

我与MySQL合作,以防万一.

Ton*_*ews 5

它们在逻辑上是等价的,应该产生相同的结果.但是,最后一个是首选的,因为它更准确地说明了查询的语义 - 即"连接表t1和t2".

WHERE子句应该用于"过滤"连接的结果 - 例如

... WHERE t2.some_col > 10
Run Code Online (Sandbox Code Playgroud)

另外,正如康斯坦丁在另一个答案中所说,如果连接是一个OUTER连接,则4个查询会有所不同.