我正在学习加入我的班级,但我没有完全掌握一些概念。有人能解释一下一个带有多个连接的语句是如何工作的吗?

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。在第一次加入之后,我不确定到底发生了什么。
当订单合并时,哪个是左表,哪个是右表?对顾客也是一样。这就是我迷路的地方。

最佳答案

executor将执行的第一件事-获取第一对有资格被联接的表并执行联接。在下面的步骤中,前一个连接的结果被视为一个虚拟关系,因此您再次拥有一个类似于... FROM virt_tab LEFT JOIN real_tab ...的构造。此行为基于closure concept中使用的Relational Algebra,这意味着关系上的任何操作都会产生关系,即操作可以嵌套。RDBMS代表关系数据库管理系统,看看链接的维基百科文章。
到目前为止,我发现postgresql的文档在这件事上是最权威的,take a look at them。在链接的文章中,对数据库如何执行连接进行了一般性的概述,并给出了一些postrgesql特有的东西,这是预期的。

08-06 23:58