【问题标题】:SELECT FROM from multiple tables vs JOIN?从多个表中选择与加入?
【发布时间】:2020-05-21 17:22:19
【问题描述】:

初学者 Q. 学习 SQL,正在做一些在线培训练习,偶然发现了这个解决方案,可以从两个表中创建一个摘要:

SELECT salesman.name AS "Salesman",
customer.cust_name, customer.city 
FROM salesman,customer 
WHERE salesman.city=customer.city;

我觉得这很令人困惑,因为我希望在从两个不同的表中提取时执行 JOIN。我的 Udemy 培训从未同时给出多个表的 FROM 语句示例:)

这是进行基本 JOIN 的另一种方法吗?或者有什么原因 JOIN 做了一些不能做的事情?

谢谢

【问题讨论】:

  • 在 ANSI-92 SQL 标准中,隐式连接被显式连接语法所取代。近 30 年后,ANSI-89 隐式语法仍然奇怪地被使用,并且更奇怪地被教授,但大多数从业者警告不要使用它。有很多很好的讨论here
  • 逗号只是写JOIN的一种古老方式。最好忘记你曾经看过它。
  • 这能回答你的问题吗? INNER JOIN ON vs WHERE clause
  • 逗号是交叉连接,优先级低于关键字连接。 stackoverflow.com/a/25957600/3404097

标签: sql join select


【解决方案1】:

您可以使用join,如下所示,这称为explicit join,您应该始终尝试使用它,因为它在查询中提供了更多的可读性。

SELECT 
  s.name as Salesman,
  c.cust_name, 
  c.city 
FROM salesman s
join customer c
on s.city=c.city;

当您使用带有where 语句的多个表时,它被称为implicit join,就像您在查询中使用的那样。性能方面两者应该相同。

【讨论】:

  • 谢谢!我不熟悉显式与隐式连接的概念。听起来一般来说只坚持显式连接是可以的(而且可能更好的可读性)。
  • @Chris 很高兴它对您有所帮助,如果您喜欢我的回答,请点击对勾接受它。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 2018-08-07
  • 1970-01-01
  • 2021-04-05
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多