我正在学习加入班级的课程,但是我没有完全掌握其中的一些概念。有人可以解释具有多个联接的语句如何工作吗?
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加入时,哪个是左表,哪个是右表?客户也一样。这是我迷路的地方。
执行者将要执行的第一件事是-取得符合条件的第一对表并执行连接。在接下来的步骤中,上一个联接的结果被视为 虚拟关系 ,因此您再次具有类似于的构造... FROM virt_tab LEFT JOIN real_tab ...。此行为基于关系代数中使用的 闭包概念 ,这意味着该关系上的任何操作都会产生关系,即操作可以嵌套。RDBMS代表 Relational DBMS,请看链接的维基百科文章。 __
... FROM virt_tab LEFT JOIN real_tab ...
到目前为止,我发现PostgreSQL的文档在这件事上是最权威的,请看一看。在链接的文章中,提供了有关数据库如何执行联接的一般概述,并提供了一些特定于PostrgeSQL的资料。