w3schools.com具有以下SQL语句示例:
SELECT
Product_Orders.OrderID, Persons.LastName, Persons.FirstName
FROM
Persons,
Product_Orders
WHERE
Persons.LastName='Hansen' AND Persons.FirstName='Ola'
我不清楚产品订单表如何与人员表联系。这个SQL是否正确,它对发回的结果集意味着什么?
答案 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的工作原理。从您查询:
在SQL语句中提供的两个表之间完成了交叉产品,您可以从此FROM Persons,Product_Orders中看到这一点。
对于Persons表中的每条记录,都会连接到Product_Orders表中的每条记录。如果两个表都很大,这将为您提供一个巨大的临时表。
然后您的过滤器,即符合条件的条件将应用于此临时表,以便为您提供结果。
我希望这会有所帮助。