我非常确定这在各种 SQL 实现中都适用。假设我在两个表之间有多对多关系:
Customer: id, name
有很多:
Order: id, description, total_price
这种关系位于联结表中:
Customer_Order: order_date, customer_id, order_id
现在我想编写 SQL 查询将所有这些连接在一起,提及客户姓名、订单描述、总价和订单日期:
SELECT name, description, total_price FROM Customer
JOIN Customer_Order ON Customer_Order.customer_id = Customer.id
JOIN Order = Order.id = Customer_Order.order_id
这一切都很好。如果我们更改顺序,使其变为
FROM Customer_Order JOIN Customer
或将 Order
表放在前面,此查询也将起作用。为什么会这样呢?我在某处读到 JOIN
的工作方式类似于算术运算符(+、* 等),采用 2 个操作数,您可以将运算符链接在一起,这样您就可以得到:例如 2+3+5。按照这个逻辑,首先我们必须计算 2+3,然后将结果加上 5。和 JOIN 一样吗?
在幕后,是否必须先完成第一个 JOIN 才能进行第二个 JOIN?所以基本上,第一个 JOIN 将从其左侧和右侧的 2 个操作数创建一个表。然后,第二个 JOIN 将将该结果表作为其左操作数并执行通常的连接。基本上,我想了解多个 JOIN 在幕后是如何工作的。