SQL UNION 学习笔记
什么是 UNION
UNION操作符用于同时获取两张或多张表中的行并将它们组合成一个结果集。需要注意的是,UNION操作符只会返回唯一的行,重复的行会被自动去除。
UNION操作符有以下几个特点:
- 只能联接 SELECT 语句的结果集。
- 两个 SELECT 语句的列数必须相同,而且相应的列数据类型必须兼容。
- 按查询结果中的第一个 SELECT 语句所选取的列进行排序。
UNION 的语法
sqlCopy CodeSELECT column1, column2, ..., columnN FROM table1
UNION [ALL]
SELECT column1, column2, ..., columnN FROM table2
[UNION [ALL] SELECT column1, column2, ..., columnN FROM table3...];
UNION 操作符可以包含多个 SELECT 语句,每个 SELECT 语句之间使用关键字 UNION 连接,并且对于每个 SELECT 语句,使用相同数量的列和列的数据类型。
如果您希望包含重复的行,则可以使用 UNION ALL。
UNION 的实例
假设我们有两个表,一个是学生表(students),另一个是教师表(teachers)。下面是这两个表的简单结构:
sqlCopy CodeCREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
gender VARCHAR(10)
);
INSERT INTO students (id, name, age, gender) VALUES
(1, 'Li Ming', 18, 'Male'),
(2, 'Tom', 20, 'Male'),
(3, 'Lucy', 19, 'Female');
sqlCopy CodeCREATE TABLE teachers (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
gender VARCHAR(10),
course VARCHAR(50)
);
INSERT INTO teachers (id, name, age, gender, course) VALUES
(1, 'Mr. Zhang', 30, 'Male', 'Math'),
(2, 'Ms. Li', 35, 'Female', 'English'),
(3, 'Mr. Wang', 40, 'Male', 'History');
现在我们想将学生表和教师表合并,得到一个包含所有人员信息的结果集。可以使用以下SQL语句:
sqlCopy CodeSELECT id, name, age, gender, NULL AS course FROM students
UNION
SELECT id, name, age, gender, course FROM teachers;
在这个例子中,第一个 SELECT 语句将从学生表中选择相应的列,并将 course 列设置为 NULL。第二个 SELECT 语句也会选择相应的列,但是会将 course 列设置为实际的值。最终,UNION 操作符将两个 SELECT 语句的结果集合并成一个唯一的结果集。
结论
通过本文的介绍,你已经了解了 SQL UNION 操作符的基本概念和用法,并且学会了如何编写 UNION 操作符的 SQL 语句。在实际应用中,UNION 操作符是非常常见的,可以帮助我们快速地获取多张表中的数据,并且将其组合成一个结果集。