UNION和CROSS JOIN之间的区别是什么?

时间:2016-05-10 07:52:36

标签: sql-server join union

我一直在阅读这两种可能性,但我不确定我是否理解它们。 因此UNION使用两个查询数据的并集创建新行:

Table1     Table2
------     ------
  1           3
  2           4

SELECT * FROM TABLE1
UNION
SELECT * FROM TABLE2

Column1 
---------
   1        
   2
   3
   4
...

并且CROSS JOIN生成两个表的笛卡尔积:

SELECT * FROM TABLE1 
CROSS JOIN TABLE 2

Column1 | Column2
-----------------
   1    |    3
   2    |    3     
   1    |    4 
   2    |    4 

那可以吗?

谢谢大家。

3 个答案:

答案 0 :(得分:3)

UNION运算符用于组合两个或多个SELECT语句的结果集。

JOIN关键字在SQL语句中用于根据这些表中某些列之间的关系查询来自两个或多个表的数据。

如果表之间没有关系,则会导致交叉连接。

答案 1 :(得分:1)

其他人已经回答了这个问题,但我只想强调一下CROSS JOIN的例子应该返回4而不是2条记录。

交叉连接将连接左侧的每个记录组合返回到右侧。

示例数据

/* Table variables are a great way of sharing 
 * test data.
 */
DECLARE @T1 TABLE
    (
        Column11    INT
    )
;

DECLARE @T2 TABLE
    (
        Column21    INT
    )
;

INSERT INTO @T1
    (
        Column11
    )
VALUES
    (1),
    (2)
;

INSERT INTO @T2
    (
        Column21
    )
VALUES
    (3),
    (4)
;

UNION查询

/* UNION appends one recordset to the end of another,
 * and then deduplicates the result.
 */
    SELECT
        *
    FROM
        @T1

UNION 

    SELECT 
        * 
    FROM
        @T2
;

返回

Column11
1
2
3
4

CROSS JOIN查询

/* CROSS JOIN returns every combination of table 1
 * and table 2.
 * The second recordset is appended to the right of the first.
 */
SELECT
    *
FROM
    @T1
        CROSS JOIN @T2
;

返回

Column11    Column21
1           3
2           3
1           4
2           4

答案 2 :(得分:0)

值得一提的是,与联接不同,UNION和CROSS-JOIN返回有关两个表的所有信息,并且不消除任何内容。但是联接(内部联接和左/右联接)消除了部分不共享的数据。