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

SQL-这些联接之间的区别?

呼延景同
2023-03-14
问题内容

我可能现在应该知道这一点,但是以下两个语句之间的区别是什么?

嵌套联接:

SELECT
    t1.*
FROM
    table1 t1
    INNER JOIN table2 t2
        LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID
    ON t2.table2_ID = t1.table1_ID

比较传统的联接:

SELECT
    t1.*
FROM
    table1 t1
    INNER JOIN table2 t2 ON t2.table2_ID = t1.table1_ID
    LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID

问题答案:

好吧,这是操作的顺序。

SELECT
    t1.*
FROM
    table1 t1
    INNER JOIN table2 t2
        LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID
    ON t2.table2_ID = t1.table1_ID

可以改写为:

SELECT
    t1.*
FROM
       table1 t1                                                       -- inner join t1
    INNER JOIN 
       (table2 t2 LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID)  -- with this 
    ON t2.table2_ID = t1.table1_ID                                     -- on this condition

因此,基本上,首先根据连接条件:t3将t2与t3左连接,然后在table2_ID = table1_ID上与t2对IN1进行t1内连接。

在第二个示例中,首先将INNER JOIN t1与t2组合在一起,然后在条件table2_ID = table1_ID上与表t3进行左联接。

SELECT
    t1.*
FROM
    table1 t1
    INNER JOIN table2 t2 ON t2.table2_ID = t1.table1_ID
    LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID

可以改写为:

SELECT
    t1.*
FROM
        (table1 t1 INNER JOIN table2 t2 ON t2.table2_ID = t1.table1_ID) -- first inner join
    LEFT JOIN                                                           -- then left join
        table3 t3 ON t3.table3_ID = t2.table2_ID                        -- the result with this

编辑

我道歉。我的第一句话是错误的。这两个查询将产生相同的结果,但是在性能上可能会有所不同,因为在某些情况下(当表1仅包含表2中元素的子集时),第一个查询的执行可能会比第二个查询慢。首先执行-然后才与table1相交。与第二个查询相反,第二个查询允许查询优化器完成其工作。



 类似资料:
  • 问题内容: 我知道SQL Server中的联接。 例如。有两个表Table1,Table2。 它们的表结构如下。 表1的数据如下: 表2数据如下: 如果我执行下面提到的两个SQL语句,则两个输出将是相同的 请在上述SQL语句中说明左右联接之间的区别。 问题答案: Select * from Table1 left join Table2 … 和 确实是完全可以互换的。但是,请尝试(或同一对)进行区

  • 问题内容: 考虑我们有两个表,和。是表中的外键,并且是表中的主键。 这两个SQL查询之间有什么区别? 与 问题答案: 除语法外,对于小片段,它们的工作原理完全相同。但是,如果有可能,请始终使用ANSI-JOIN编写新查询。 至于语义上,逗号用于在两个表之间生成CARTESIAN乘积,这意味着生成表A中的所有记录与表B中的所有记录的矩阵,因此具有4和6条记录的两个表分别生成24个记录。然后,使用WH

  • 问题内容: 这个问题已经在这里有了答案 : INNER JOIN ON vs WHERE子句 (12个答案) 7年前关闭。 我有两个选择连接SQL语句: 显然,它们的结果相同。但是它们之间没有任何区别,例如性能,可移植性。 问题答案: 一个区别是,第一个选项通过在where子句中表达联接条件来隐藏意图。 第二个选项,写出连接条件的条件对于阅读查询的用户来说更加清楚。它显示了查询的确切意图。 至于性

  • 问题内容: 在Go的整个Google App Engine文档中,它们可互换使用库。这是一个例子: 我应该使用哪些库?主要区别是什么? 问题答案: cloud.google.com/go/datastore是Cloud Datastore rest API(可从任何地方使用)的客户端库。 google.golang.org/appengine/datastore是App Engine API的一部

  • 形状为- (442,1)和(442,)? 打印这两个命令会产生相同的输出,但当我检查等式==时,会得到如下2D向量- 有人可以解释其中的区别吗?

  • 本文向大家介绍SQL和PL / SQL之间的区别,包括了SQL和PL / SQL之间的区别的使用技巧和注意事项,需要的朋友参考一下 SQL,结构化查询语言是一种用于创建,维护和检索关系数据库的标准数据库语言,而PL / SQL是SQL的过程语言扩展,它扩展了SQL并提供了过程功能。 以下是SQL与PL / SQL之间的重要区别。 序号 键 的SQL PL / SQL 1 定义 SQL,是数据库的结