0

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

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

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

4

2 回答 2

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在这附近的名声并不好

于 2012-08-24T02:11:54.163 回答
1

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

  1. 在 SQL 语句中提供的两个表之间进行了叉积,您可以从这个 FROM Persons Product_Orders 中看到这一点。

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

  3. 然后你的过滤器,即限定条件将应用于这个临时表,给你你的结果。

我希望这有帮助。

于 2012-08-24T02:18:03.167 回答