为什么选择多个表而不加入

时间:2013-07-12 15:02:15

标签: sql

当连接表时,传统上可以使用SQL89的加入方式,如

SELECT * FROM t1, t2 WHERE t1.id = t2.t1_id;

但是自SQL92标准以来,我们现在可以使用JOIN语法

加入
SELECT * FROM t1 JOIN t2 on t1.id=t2.t1_id;

为什么有人会在没有加入的情况下从多个表中SELECT? 现在,我知道人们使用UNION连接数据,但这不是我所说的。

我们之所以在FROM子句中添加带逗号的表是为了向后兼容吗?或者是否有任何使用旧语法的现实场景只能通过连接来实现?

2 个答案:

答案 0 :(得分:7)

如果由于某种原因需要完整的笛卡尔产品,它可能会有用。例如,如果您有汽车模型表和汽车颜色表,并且想要枚举所有选项,则不需要连接。 话虽如此,我认为这是一个边缘案例。

答案 1 :(得分:3)

我承认肌肉记忆会开始,有时我会在思考前使用89方式。但我更喜欢92方法,因为它使WHERE子句更清晰。 WHERE子句中唯一的条件是与您的业务案例相关的条件,而仅仅用于定义关系的条件在JOIN子句中是整齐的。