SQL和隐式连接

时间:2012-08-24 02:08:25

标签: sql join

w3schools.com具有以下SQL语句示例:

SELECT 
     Product_Orders.OrderID, Persons.LastName, Persons.FirstName
FROM 
  Persons,
  Product_Orders
WHERE 
  Persons.LastName='Hansen' AND Persons.FirstName='Ola'

我不清楚产品订单表如何与人员表联系。这个SQL是否正确,它对发回的结果集意味着什么?

2 个答案:

答案 0 :(得分:2)

这在技术上是正确的,但我会避免使用这种类型的语法有几个原因,我不会在这里说。

该语法通俗地称为“旧样式”连接语法,相当于:

SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName 
FROM Persons
CROSS JOIN Product_Orders 
WHERE Persons.LastName='Hansen' AND Persons.FirstName='Ola'

他们如何“加入”在一起的答案是他们没有。查询的结果是整个Product_Orders表与Persons表中的“Ola Hanson”行的叉积。在我能想到的大部分用例中都没有多大意义,对你说实话。

您将获得的结果真正奇怪的是,Product_Orders表中的OrderID不一定与订单中的人员对齐。它看起来是页面上遗漏的错误 - 尽管公平地说这个例子打算演示别名,而不是连接。

W3Schools doesn't have a good reputation在这附近。

答案 1 :(得分:1)

你必须了解Joins的工作原理。从您查询:

  1. 在SQL语句中提供的两个表之间完成了交叉产品,您可以从此FROM Persons,Product_Orders中看到这一点。

  2. 对于Persons表中的每条记录,都会连接到Product_Orders表中的每条记录。如果两个表都很大,这将为您提供一个巨大的临时表。

  3. 然后您的过滤器,即符合条件的条件将应用于此临时表,以便为您提供结果。

  4. 我希望这会有所帮助。