【问题标题】:sql joins - Joining more than one tablesql joins - 连接多个表
【发布时间】:2011-05-03 23:23:38
【问题描述】:

我正在尝试了解连接,但我有点困惑。我知道如何使用

连接表格
=
<=

输入 存在与不存在

我试图尝试了解 INNER JOIN、LEFT OUTER JOIN、USING 等的使用,但它是如此令人困惑。我遇到的主要问题是不同的人使用不同的名称来称呼他们。是否有对不同类型的连接以及它们被称为其他名称的简单解释。例如,在谷歌搜索时,我遇到了以下类型

♦ Simple Join
♦ Equi join
♦ Natural Join
♦ Outer Join
♦ Self Join
♦ Cartesian join
♦ Inner join
♦ Nonequi join
♦ Theta join
♦ Self join 
♦ Cross join
♦ Cross Joins
♦ Natural Joins
♦ Inner Join with USING Clause
♦ Inner Join with ON Clause
♦ Left Outer Join
♦ Right Outer Join
♦ Full OuterJoin

以上大部分都是重复的,即它的连接类型相同但名称不同。我确信以上所有内容都可以使用 (=, !=, not in, in exists 等) 之一重新创建,但我很难理解哪个是哪个以及它们之间的区别。图表可能会有所帮助:)

【问题讨论】:

  • 另外,你的列表有点乱。我认为可以安全地假设 cross joincross joins 指的是相同类型的连接。 natural joinself join 也是如此。
  • 另外,简单连接和内部连接也是一样的 (techonthenet.com/sql/joins.php)

标签: sql oracle join left-join inner-join


【解决方案1】:
【解决方案2】:

对于 Matthew 的帖子中没有解释的一些问题:

简单连接 - 非显式连接,默认为内部连接

a join b on a.id = b.id

自然连接 - 这对所有具有相同名称的列进行内部连接

a natural join b

自连接 - 这是将一个表连接到自身,它可以是任何其他类型的连接(内自连接、外自连接等)

a "a1" join a "a2" on "a1".id = "a2".id

笛卡尔连接 - 这是所有可能的行组合,您总是会得到两个表中行数的乘积。您可以使用内部连接而不指定连接条件

a join b

交叉连接 - 这是笛卡尔连接的同义词

使用 USING 子句进行内连接 - 这是连接条件的另一种语法,如果两个表的列名匹配,则可以使用它

a join b using (id)

带有 ON 子句的内连接 - 这与我展示的简单连接相同,唯一的其他语法是在 where 子句中连接(如下所示)

a join b where a.id = b.id

左外连接 - 与左连接相同 右外连接 - 与右连接相同。这就像一个左连接,但你在第一个表而不是第二个表上得到空值

【讨论】:

  • 感谢大家的回复。是否有资源显示可用于不同类型的不同语法?例如,简单连接与内连接相同,只是语法不同。
  • 我不知道,没有。问题在于它归结为偏好或公司最佳实践,因此来源通常只会显示几种语法中的一种。如果您使用的是 Oracle,您可以说 INNER 和 OUTER 这两个词是可选的。还有“旧”方式,查看此链接以获得简要概述:oracledoug.com/serendipity/index.php?/archives/…
【解决方案3】:

顺便说一下,刚刚阅读了关于 JOIN 的内容。 MySQL 语法有什么变化? Oracle 使用 PLSQL 语法它与其他数据库有点不同..

我这里有以下情况

第一次查询

SELECT * FROM tbl1 LEFT JOIN (tbl2, tbl3, tbl4)
    ON (tbl2.field1=tbl1.field1 AND tbl3.filed2=tbl1.field2 AND tbl4.field3=tbl1.field3)

第二次查询

SELECT * FROM tbl1 LEFT JOIN (tbl2 CROSS JOIN tbl3 CROSS JOIN tbl4)
    ON (tbl2.field1=tbl1.field1 AND tbl3.filed2=tbl1.field2 AND tbl4.field3=tbl1.field3)

第一个查询第二个查询相同。

谢谢大家!

【讨论】:

    【解决方案4】:

    编辑: 刚刚遇到http://www.gplivna.eu/papers/sql_join_types.htm,虽然是技术性的,但它提供了对 sql 连接类型的相当好的概述。值得一看

    这是另一个页面,其中解释了一些连接 (http://blog.noobtech.com/index.php/2009/02/sql-joins-visual-cheat-sheet/)

    我正要发布的页面是@matthew vines 已经发布的页面:)

    【讨论】:

      【解决方案5】:

      Oracle SQL Language Reference 有一个很好的部分介绍什么是连接以及不同的连接类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-09
        • 2020-10-11
        • 1970-01-01
        • 1970-01-01
        • 2016-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多