Sql 简明教程
SQL - UNION vs UNION ALL
UNION 和 UNION ALL 运算符只是代数集合运算符的 SQL 实现。它们都用于从多个表中检索行,并将其作为单个表返回。这两个运算符之间的区别在于 UNION 仅返回不同的行,而 UNION ALL 返回表中存在的所有行。
但是,对于这些运算符在这些表上工作,它们需要遵循以下给定的条件 -
-
要组合的表必须具有相同数据类型的相同数量的列。
-
行数不必相同。
满足这些条件后,UNION 或 UNION ALL 运算符会将来自多个表的行作为结果表返回。
What is UNION?
UNION 是 SQL 中的一种运算符/子句,其工作方式类似于关系代数中的并运算符。它仅合并来自与并兼容的多个表的信息。
只有来自表的不同行被添加到结果表中,因为 UNION 会自动消除所有重复记录。
Example
让我们首先使用具有相同数据类型相同数量的列创建两个表 COURSES_PICKED 和 EXTRA_COURSES_PICKED。
使用以下查询创建表 COURSES_PICKED:
CREATE TABLE COURSES_PICKED(
STUDENT_ID INT NOT NULL,
STUDENT_NAME VARCHAR(30) NOT NULL,
COURSE_NAME VARCHAR(30) NOT NULL
);
使用下面给出的查询向 COURSES_PICKED 表中插入值:
INSERT INTO COURSES_PICKED VALUES
(1, 'JOHN', 'ENGLISH'),
(2, 'ROBERT', 'COMPUTER SCIENCE'),
(3, 'SASHA', 'COMMUNICATIONS'),
(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 -
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”表的查询 -
INSERT INTO EXTRA_COURSES_PICKED VALUES
(1, 'JOHN', 'PHYSICAL EDUCATION'),
(2, 'ROBERT', 'GYM'),
(3, 'SASHA', 'FILM'),
(4, 'JULIAN', 'MATHEMATICS');
表将按如下所示创建 -
STUDENT_ID |
STUDENT_NAME |
COURSES_PICKED |
1 |
JOHN |
PHYSICAL EDUCATION |
2 |
ROBERT |
GYM |
3 |
SASHA |
FILM |
4 |
JULIAN |
MATHEMATICS |
现在,让我们使用以下 UNION 查询合并这两个表 -
SELECT * FROM COURSES_PICKED
UNION
SELECT * FROM EXTRA_COURSES_PICKED;
What is UNION ALL?
UNION ALL 也是 SQL 中的一种运算符/子句,用于将多个表合并为一个表。但是,此运算符还保留结果表中的重复行。
假设有两张表,其中一张表包含一个玩家在国际赛事中参赛的比赛数量,另一张包含一个玩家在国内联赛中出场的比赛数量。
正如我们在上面的表中所看到的,科利在国际比赛中的出场次数为 234 场,在国内赛场中的出场次数也为 234 场。尽管这些列中的数据相同,但它们都是独立的比赛。需要将这两行都包含在显示一个玩家的总比赛场次的最终表中。因此,在这些情况下,我们使用 UNION ALL 运算符。