Mysql 简明教程
MySQL - UNION vs UNION ALL
MySQL 中的 UNION 和 UNION ALL 运算符用于在多个表中检索行,并将它们返回为单个表。
但是,对于这些运算符在这些表上工作,它们需要遵循以下给定的条件 -
-
要组合的表必须具有相同数据类型的相同数量的列。
-
行数不必相同。
MySQL UNION Operator
MySQL 中的 UNION 运算符类似于关系代数中的并集运算符。该运算符将来自多个表的兼容并集的信息合并起来。但是,只有来自表的不同行会被添加到结果表中,因为 UNION 会自动消除所有重复记录。
MySQL UNION VS MySQL UNION ALL
Example
首先,我们需要创建两个表,列数相同,数据类型也相同。以下查询创建一个名为 “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');
COURSES_PICKED 表中的内容如下:
现在,让我们创建另一个名为 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');
EXTRA_COURSES_PICKED 表中的内容如下:
Combining tables using UNION Operator
现在,让我们使用 UNION 查询合并这两个表,如下所示:
SELECT * FROM COURSES_PICKED
UNION
SELECT * FROM EXTRA_COURSES_PICKED;
Output
以下是所获得的输出 −
在此,“Julian” 和 “Shasha” 挑选的额外课程和课程相同,因此 COURSES_PICKED 和 EXTRA_COURSES_PICKED 中的最后两条记录是相同的。当我们使用 UNION 运算符合并两个表时,它会排除相同记录,只返回不同的记录。