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

Fra*_*kie 3 sql database

我在课堂上学习加入,但我并没有完全掌握一些概念.有人可以解释具有多个连接的语句是如何工作的吗?

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#;
Run Code Online (Sandbox Code Playgroud)

我相信我理解BOOKS表是连接BOOKS和ORDERITEMS的第一个外连接中的左表.即使书中没有ORDERITEM,也会显示所有BOOKS.第一次加入后,我不确定到底发生了什么.

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

vye*_*rov 5

执行程序将执行的第一件事 - 获取有资格加入并执行连接的第一对表.在以下步骤中,先前连接的结果被视为虚拟关系,因此您再次具有类似于的结构... FROM virt_tab LEFT JOIN real_tab ....此行为基于关系代数中使用的闭包概念,这意味着关系上的任何操作都会产生关系,即操作可以嵌套.RDBMS代表关系型 DBMS,请查看链接的维基百科文章.

到目前为止,我发现PostgreSQL的文档在这个问题上是最明确的,看看它们.在链接的文章中,对一些PostrgeSQL特定的东西给出了关于如何通过数据库执行连接的一般概述.