【问题标题】:How do these two queries return the same result but use different joins? (Implicit vs. Explicit Query) [duplicate]这两个查询如何返回相同的结果但使用不同的连接? (隐式与显式查询)[重复]
【发布时间】:2020-09-08 21:04:25
【问题描述】:

我有 2 个表:订单和客户。订单有一个来自客户的外键:

我可以通过两种不同的方式加入他们:

第一种方式

Select *
from [Order] 
join Customer
on [Order].Customer_id = Customer.id;

第二种方式

Select * 
from [Order],Customer
where [Order].Customer_id = Customer.id;

这 2 个查询返回相同的结果集,这导致我提出相关问题:

  1. 这两个查询哪个更好?
  2. 它们之间在时间执行方面有区别吗?
  3. 为什么我搜索连接示例时都使用第一种方式?
  4. 我在大学学过第二种查询——用错了吗?

【问题讨论】:

  • 那么您的第一个查询称为显式联接,而您的第二个查询称为隐式联接。您应该始终使用显式连接以获得最佳实践。
  • use text, not images/links, for text--including tables & ERDs。仅将图像用于无法表达为文本或增强文本的内容。在图片中包含图例/键和说明。
  • 这是一个常见问题解答。在考虑发布之前,请阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,带有和不带有您的特定字符串/名称和站点:stackoverflow.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。
  • 第一个比第二个好。
  • @philipxy 好的,好的,对不起,是的,它对我有很大帮助。

标签: sql join


【解决方案1】:

如果您使用 LEFT OUTER JOIN 或 RIGHT OUTER JOIN,则会出现差异。过滤位置在这里很重要,因为在进行 JOIN 之前应用了 ON 子句中指定的标准。 WHERE 子句中提供的针对 OUTER JOIN 表的条件在进行 JOIN 后应用。这会产生非常不同的结果集。

相比之下,如果在 ON 或 WHERE 子句中提供条件,则 INNER JOIN 无关紧要,结果将是相同的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多