【问题标题】:the difference between comma and join in sqlsql中逗号和join的区别
【发布时间】:2013-12-09 09:57:18
【问题描述】:

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

比如这两个代码:

SELECT studentId, tutorId FROM student, tutor;


SELECT studentId, tutorId FROM student JOIN tutor;

【问题讨论】:

  • 像这些“逗号连接”是旧代码,不能保证继续得到支持。它的可读性和灵活性也较低。总的来说,只是不建议使用。 WHERE 子句很容易出错,因此得到的行数比预期的多。
  • SQL Ansi 联盟几十年来一直试图摆脱那些隐式连接(逗号)。但是有许多遗留系统和许多遗留程序员,这不太可能发生。使用显式连接,它让代码更清晰。
  • 这能回答你的问题吗? INNER JOIN ON vs WHERE clause

标签: sql join


【解决方案1】:

在执行它们时没有真正的区别,但在工作中存在可读性、一致性和错误缓解问题:

假设您有 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;

后者在表格前面向您展示了它正在加入的确切内容。它提高了可读性,并且更不容易出错,因为忘记放置 ON 子句比在 WHERE 中添加另一个 AND 或完全添加错误条件更难(就像我在上面的查询中所做的那样:)。

另外,如果你在做其他类型的 JOINS,使用显式的写法,你只需要把 INNER 改成别的,代码是一致构造的。

【讨论】:

    【解决方案2】:

    根据你给出的具体代码,完全没有区别。

    但是,使用JOIN 运算符语法,您可以指定连接条件,这在执行LEFT JOINs 或RIGHT JOINs 时非常重要

    【讨论】:

    • 只有一个真正的区别,连接是在条件子句之前评估的。在极少数情况下,外部连接会导致不同的结果。
    猜你喜欢
    • 1970-01-01
    • 2014-02-07
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    相关资源
    最近更新 更多