一尘不染

包含多个联接的SQL语句如何工作?

sql

我正在学习加入班级的课程,但是我没有完全掌握其中的一些概念。有人可以解释具有多个联接的语句如何工作吗?

SELECT B.TITLE, O.ORDER#, C.STATE FROM BOOKS B
   LEFT OUTER JOIN ORDERITEMS OI ON B.ISBN = OI.ISBN
   LEFT OUTER JOIN ORDERS O ON O.ORDER# = OI.ORDER#
   LEFT OUTER JOIN CUSTOMERS C ON C.CUSTOMER# = O.CUSTOMER#;

我相信我知道BOOKS表是连接BOOKS和ORDERITEMS的第一个外部联接中的左表。即使没有书的ORDERITEM,也会显示所有的BOOKS。第一次加入后,我不确定真正发生了什么。

当ORDERS加入时,哪个是左表,哪个是右表?客户也一样。这是我迷路的地方。


阅读 152

收藏
2021-03-08

共1个答案

一尘不染

执行者将要执行的第一件事是-取得符合条件的第一对表并执行连接。在接下来的步骤中,上一个联接的结果被视为 虚拟关系 ,因此您再次具有类似于的构造... FROM virt_tab LEFT JOIN real_tab ...。此行为基于关系代数中使用的
闭包概念

,这意味着该关系上的任何操作都会产生关系,即操作可以嵌套。RDBMS代表 Relational
DBMS,请看链接的维基百科文章。 __

到目前为止,我发现PostgreSQL的文档在这件事上是最权威的,请看一看。在链接的文章中,提供了有关数据库如何执行联接的一般概述,并提供了一些特定于PostrgeSQL的资料。

2021-03-08