sql中逗号和联接的区别

sql中逗号和联接的区别,sql,join,Sql,Join,在两个不同的表之间使用逗号或联接有什么区别 例如这两个代码: SELECT studentId, tutorId FROM student, tutor; SELECT studentId, tutorId FROM student JOIN tutor; 根据您给出的特定代码,没有任何区别 但是,使用运算符语法,您可以指定连接条件,这在执行左连接s或右连接s时非常重要执行这些条件时没有实际区别,但在工作中存在可读性、一致性和错误缓解问题: 想象一下你有4张桌子 如果使用老式的内部联接方式

在两个不同的表之间使用逗号或联接有什么区别

例如这两个代码:

SELECT studentId, tutorId FROM student, tutor;


SELECT studentId, tutorId FROM student JOIN tutor;

根据您给出的特定代码,没有任何区别


但是,使用运算符语法,您可以指定连接条件,这在执行
左连接
s或
右连接
s时非常重要执行这些条件时没有实际区别,但在工作中存在可读性、一致性和错误缓解问题:

想象一下你有4张桌子 如果使用老式的内部联接方式,则最终会出现以下情况:

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;
后者在桌子的正前方向您展示了它到底与什么连接。它提高了可读性,并且更不容易出错,因为忘记放置ON子句比添加另一个and in WHERE或添加一个错误的条件更难(就像我在上面的查询中所做的那样:)


此外,如果您正在使用显式的编写方式进行其他类型的连接,则只需将内部连接更改为其他类型,并且代码的构造是一致的。

类似于这些的“逗号连接”都是旧代码,不保证继续得到支持。它的可读性和灵活性也较差。总的来说,不建议使用它。很容易使WHERE子句不正确,从而得到比预期多得多的行。SQL Ansi consortium几十年来一直在试图摆脱这些隐式连接(逗号)。但是有很多遗留系统和遗留程序员,这不太可能发生。使用显式连接,可以让代码更加清晰。这是否回答了您的问题?只有一个真正的区别,连接是在条件子句之前计算的。极少数情况下,外部连接将导致不同的结果。