在两个不同的表之间使用逗号或联接有什么区别?
例如以下两个代码:
SELECT studentId, tutorId FROM student, tutor; SELECT studentId, tutorId FROM student JOIN tutor;
执行它们时并没有真正的区别,但是在工作中存在可读性,一致性和减轻错误的问题:
想象一下,如果您有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;
使用显式的INNER JOINS它将是:
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;
后者显示了您在桌子前面的确切位置。它具有更高的可读性,并且更容易出错,因为与在WHERE中添加另一个AND或完全添加错误的条件(就像我在上面的查询中所做的一样)相比,忘记ON子句更容易忘了。
另外,如果您正在执行其他类型的JOINS,则使用显式的编写方式,您只需将INNER更改为其他名称,并且代码将被一致地构造。