SQL UNION 和 UNION ALL的区别

SQL UNION 和 UNION ALL的区别

UNIONUNION ALL 运算符只是SQL中代数集合运算符的实现方法。它们都用于从多个表中检索行并将它们作为一个单一表返回。这两个运算符的区别在于,UNION只返回不同的行,而UNION ALL返回表中所有的行。

然而,为了在这些表上使用这些运算符,它们需要遵循以下条件−

  • 要组合的表必须具有相同数量和相同数据类型的列。
  • 行数不需要相同。

一旦满足了这些条件,UNION或UNION ALL运算符将从多个表中返回行作为结果表。

注意 −第一个表的列名将成为结果表的列名,并且第二个表的内容将与相同数据类型的结果列合并。

什么是UNION

UNION是一种SQL中的运算符/子句,它与关系代数中的并运算符类似。它仅仅是将来自多个具有并集兼容性的表的信息组合在一起。

只有来自这些表的不同行被添加到结果表中,因为UNION会自动消除所有重复记录。

语法

以下是SQL中UNION运算符的语法−

SELECT * FROM table1
UNION
SELECT * FROM table2;

示例

首先,我们创建两个表“COURSES_PICKED”和“EXTRA_COURSES_PICKED”,这两个表具有相同数量的列和相同的数据类型。

使用以下查询创建表COURSES_PICKED−

SQL> CREATE TABLE COURSES_PICKED(
   STUDENT_ID INT NOT NULL, 
   STUDENT_NAME VARCHAR(30) NOT NULL, 
   COURSE_NAME VARCHAR(30) NOT NULL
);

使用下面的查询向COURSES_PICKED表中插入值:

SQL> INSERT INTO COURSES_PICKED VALUES(1, 'JOHN', 'ENGLISH');
INSERT INTO COURSES_PICKED VALUES(2, 'ROBERT', 'COMPUTER SCIENCE');
INSERT INTO COURSES_PICKED VALUES(3, 'SASHA', 'COMMUNICATIONS');
INSERT INTO COURSES_PICKED VALUES(4, 'JULIAN', 'MATHEMATICS');

这个表格将被显示为 −

+------------+--------------+------------------+
| STUDENT_ID | STUDENT_NAME | COURSE_NAME      |
+------------+--------------+------------------+
|          1 | JOHN         | ENGLISH          |
|          2 | ROBERT       | COMPUTER SCIENCE |
|          3 | SASHA        | COMMUNICATIONS   |
|          4 | JULIAN       | MATHEMATICS      |
+------------+--------------+------------------+

使用以下查询创建表EXTRA_COURSES_PICKED –

SQL> CREATE TABLE EXTRA_COURSES_PICKED(
   STUDENT_ID INT NOT NULL, 
   STUDENT_NAME VARCHAR(30) NOT NULL, 
   EXTRA_COURSE_NAME VARCHAR(30) NOT NULL
);

以下是将值插入到EXTRA_COURSES_PICKED表的查询语句 –

SQL> INSERT INTO EXTRA_COURSES_PICKED VALUES(1, 'JOHN', 'PHYSICAL EDUCATION');
INSERT INTO EXTRA_COURSES_PICKED VALUES(2, 'ROBERT', 'GYM');
INSERT INTO EXTRA_COURSES_PICKED VALUES(3, 'SASHA', 'FILM');
INSERT INTO EXTRA_COURSES_PICKED VALUES(4, 'JULIAN', 'MATHEMATICS');

表格将按如下所示创建-

+------------+--------------+--------------------+
| STUDENT_ID | STUDENT_NAME | COURSES_PICKED     |
+------------+--------------+--------------------+
|          1 | JOHN         | PHYSICAL EDUCATION |
|          2 | ROBERT       | GYM                |
|          3 | SASHA        | FILM               |
|          4 | JULIAN       | MATHEMATICS        |
+------------+--------------+--------------------+

现在,让我们尝试使用UNION查询将这两个表合并如下 –

SQL> SELECT * FROM COURSES_PICKED
UNION
SELECT * FROM EXTRA_COURSES_PICKED;

输出

执行 UNION 操作后获得的结果表是:

+------------+--------------+--------------------+
| STUDENT_ID | STUDENT_NAME | COURSE_NAME        |
+------------+--------------+--------------------+
|          1 | JOHN         | ENGLISH            |
|          1 | JOHN         | PHYSICAL EDUCATION |
|          2 | ROBERT       | COMPUTER SCIENCE   |
|          2 | ROBERT       | GYM                |
|          3 | SASHA        | COMMUNICATIONS     |
|          3 | SASHA        | FILM               |
|          4 | JULIAN       | MATHEMATICS        |
+------------+--------------+--------------------+

什么是UNION ALL

UNION ALL也是SQL中的一个操作符/子句,用于将多个表合并为一个。然而,这个操作符也会保留结果表中的重复行。

假设有两个表,一个表包含球员在国际比赛中参赛的次数,另一个表包含球员在国内比赛中参赛的次数。

SQL UNION 和 UNION ALL的区别

正如我们在上面的表格中所看到的,科里在国际比赛中出战了234场比赛,在国内比赛中也出战了234场比赛。尽管这些列中的数据是相同的,但它们都是不同的比赛。在结果表中显示一名球员总共出战的比赛时,需要包括这两行数据。因此,在这种情况下,我们使用 UNION ALL 运算符。

SQL UNION 和 UNION ALL的区别

语法

UNION ALL运算符在SQL中的语法如下:

SQL> SELECT * FROM table1
UNION ALL
SELECT * FROM table2;

示例

在下面的示例中,让我们尝试在上面给出的相同样本表” COURSES_PICKED”和” EXTRA_COURSES_PICKED”上执行UNION ALL操作,使用以下给定的查询−

SQL> SELECT * FROM COURSES_PICKED
UNION ALL
SELECT * FROM EXTRA_COURSES_PICKED;

输出

结果表如下所示:

+------------+--------------+--------------------+
| STUDENT_ID | STUDENT_NAME | COURSE_NAME        |
+------------+--------------+--------------------+
|          1 | JOHN         | ENGLISH            |
|          2 | ROBERT       | COMPUTER SCIENCE   |
|          3 | SASHA        | COMMUNICATIONS     |
|          4 | JULIAN       | MATHEMATICS        |
|          1 | JOHN         | PHYSICAL EDUCATION |
|          2 | ROBERT       | GYM                |
|          3 | SASHA        | FILM               |
|          4 | JULIAN       | MATHEMATICS        |
+------------+--------------+--------------------+

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程