结构化查询语言中的连接目的

时间:2015-08-22 08:21:20

标签: sql database select join

如果我们可以通过

从多个表中收集数据,那么联接的目的是什么?
SELECT ,table1.a  , table2.b  , FROM table1,table2 ...

4 个答案:

答案 0 :(得分:4)

您显示的语法实际上是一个连接。它被称为隐式连接join语法称为显式连接,具有相同的效果,但有一些优点:

  1. 它是标准的,ANSI的做事方式
  2. 顾名思义,明确 - 更容易理解联接的位置,并将连接条件分开(在on子句中)从逻辑条件。
  3. 指定不同类型的连接(内部/外部/交叉)更容易,某些数据库可能不允许以隐式形式,至少不使用标准语法。

答案 1 :(得分:1)

JOIN允许您将多个表中的所有或选定数据返回到单个临时表中。每个表使用单个SELECT命令将为您留下多个数据集而不是单个源。

答案 2 :(得分:0)

联接对于根据数据库关系从不同表中汇总数据非常有用。

尝试使用此链接了解有关此主题的更多信息http://www.codeproject.com/Articles/435694/Understanding-Table-Joins-using-SQL

答案 3 :(得分:0)

逗号来自显式JOIN语法之前。它是两个表的交叉连接:每个表的行的所有可能组合。 WHERE只保留符合其条件的行。给定逗号和WHERE以及嵌套的SELECTS,不需要替代拼写CROSS JOIN和JOIN在ON中的另一个条件。

然而,OUTER JOINs ON条件导致从逗号加上类似WHERE的restiriction到满足条件的行加上左表(LEFT JOIN),右表(RIGHT JOIN)或两者中的不匹配行的行(FULL JOIN)扩展了另一个表中的列的一行NULL。这需要指定一个匹配条件(确定不匹配的行,其中NULL被添加到逗号将给出的交叉连接),与后来通过WHERE的限制分开。

但只要为OUTER JOIN添加ON条件,就可以允许它进行内部连接。它给出了与外连接ON相同的结果,该条件返回的任何不匹配的行少。这与根据条件进行交叉连接(如WHERE)限制相同。所以(INNER)JOIN是一个逗号,它有自己的条件来自ON,而CROSS JOIN是逗号而没有ON。 (CROSS JOIN就像(INNER)JOIN ON 1 = 1.)(另外逗号的优先级低于显式的非逗号连接。)

TL; DR 逗号为低优先级JOIN;我们不需要明确的INNER JOIN或ON; OUTER JOIN需要与WHERE不同;我们不妨在语法中添加明确的内部JOIN ON。

相关问题