SQL中逗号和连接的区别

8

在两个不同的表之间使用逗号和join有什么区别呢?

例如这两个代码:

SELECT studentId, tutorId FROM student, tutor;


SELECT studentId, tutorId FROM student JOIN tutor;

像这样的“逗号连接”是旧代码,不能保证继续支持。它也不够可读和灵活。总的来说,不建议使用。很容易出现WHERE子句错误,从而获得比预期更多的行。 - Tobberoth
1
SQL Ansi联盟试图摆脱几十年来的隐式连接(逗号)。但是有许多遗留系统和许多遗留程序员,这不太可能发生。使用显式连接,它可以使代码更加清晰。 - jean
1
这个回答解决了你的问题吗?INNER JOIN ON vs WHERE clause - philipxy
2个回答

7

虽然执行时没有实质性的区别,但可读性、一致性和错误缓解是存在的问题:

想象一下你有4个表,如果你使用传统的INNER JOIN方法,你最终会得到:

SELECT col1, col2
FROM tab1, tab2, tab3,tab4
WHERE tab1.id=tab2.tab1_id
AND tab4.id = tab2.tab3_id
AND tab4.id = tab3.tab4_id;

使用显式内部连接的语法,如下所示:
SELECT col1, col2
FROM tab1
INNER JOIN tab2 ON tab1.id = tab2.tab1_id
INNER JOIN tab3 ON tab3.id = tab2.tab3_id
INNER JOIN tab4 ON tab4.id = tab3.tab4_id;

后者会在表格前直接显示与其JOIN相关的内容,具有更好的可读性和更少的错误风险,因为更难忘记放置ON子句,而不是在WHERE中加入另一个AND或完全添加错误条件(如上面的查询中所做的一样:)。

此外,如果您正在执行其他类型的JOIN操作,并使用显式的编写方式,您只需要将INNER更改为其他内容,代码就会被一致地构建。


2
根据您提供的具体代码,完全没有任何区别
然而,使用JOIN运算符语法,您可以指定连接条件,在进行LEFT JOINRIGHT JOIN时非常重要。

只有一个真正的区别,连接在条件子句之前进行评估。很少有情况下,外连接会导致不同的结果。 - jean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接