当前位置: 首页 > 面试题库 >

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

杜彦君
2023-03-14
问题内容

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

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,请看链接的维基百科文章。 __

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



 类似资料:
  • 问题内容: 我目前正在制作一份报告,向我显示我们销售团队涵盖的所有邮政编码。 每个团队涵盖100多个邮政编码。我想做的是创建一个报告,将邮政编码内的客户带回去。目前,我的代码如下所示。 我希望的是有一种更快,更轻松的方式来做到这一点。任何建议将不胜感激。有没有一种方法可以为每个销售团队创建变量,例如 只是在钓鱼的想法。干杯 问题答案:

  • 问题内容: 我试图更新一个名为表,并设置为从表。 我在Postgres 9.3中有以下SQL查询,但是当它触发时,出现以下错误: 我更喜欢Active Record,所以我的SQL原始技能严重缺乏。我想知道是否有人可以帮助我向正确的方向指出如何正确执行此查询。 问题答案: 与Postgres中的有效语句相同: 您不能仅将子句中的表别名用作子句中的目标表。要更新的(一个!)表紧跟在关键字之后(如果我

  • 问题内容: 当我的SQL语句中只有一个内部联接时,它可以很好地工作。我尝试加入第二张表,现在出现一个错误,提示存在语法错误(缺少运算符)。这是怎么了 问题答案: 对于多表联接,您必须将多余的联接嵌套在方括号中: 基本上,对于除第一个表之外的所有其他表,都需要在原始“ FROM”表之前加上一个括号,并在匹配的JOIN“ on”子句上使用一个结束括号。

  • 问题内容: 我想一次执行多个查询或作业。像这样的东西: 或多个选择查询。查询将是动态的。 但是我无法做到这一点,以半冒号分隔的多个查询的运行方式是什么? 问题答案: 您可以使用以下示例实现addBatch和executeBatch命令同时执行多个 SQL 命令。 批处理允许您将相关的SQL语句分组为一个批处理,并通过一次调用将其提交给数据库。参考 当您一次将多个SQL语句发送到数据库时,可以减少通

  • 问题内容: 我有一张表格,其中包含有关零售店的信息。我有一个零售链名称的列表(WalMart,Target,Eaton等)。当用户选择一个时,我基本上会运行一个查询来查找与该链有关的任何内容。 例如,如果用户选择“ WalMart”,则查询将返回名称中带有单词“ WalMart”的任何内容(WalMart Scarborough,WalMart Supercenter Toronto,WalMar

  • 以下是一个示例: 是否可以将此链接到一个单独的assertThat语句中 对不起,问题不清楚。我的意思是,是否有一些fluent方法调用将多个assertThat语句链接在一起。下面是我能想到的一个例子: