SQL两张表数据合并成一张表
在SQL中,通常我们会有多张表存储不同类型的数据。有时候我们需要把多张表的数据合并成一张表以便进行分析或者数据处理。在这篇文章中,我们将详细介绍如何使用SQL语句将两张表的数据合并成一张表。
准备工作
在开始之前,我们先创建两个示例表 table1
和 table2
,并插入一些数据。这里我们以一个学生表和一个成绩表为例,学生表包含学生的基本信息,成绩表包含学生的考试成绩。
-- 创建学生表
CREATE TABLE table1 (
id INT,
name VARCHAR(50),
age INT
);
-- 插入学生数据
INSERT INTO table1 (id, name, age) VALUES
(1, '张三', 20),
(2, '李四', 22),
(3, '王五', 21);
-- 创建成绩表
CREATE TABLE table2 (
id INT,
subject VARCHAR(50),
score INT
);
-- 插入成绩数据
INSERT INTO table2 (id, subject, score) VALUES
(1, 'Math', 80),
(2, 'English', 75),
(3, 'Science', 90);
上面的SQL语句创建了两张表 table1
和 table2
,并插入了一些数据用于后续的示例。现在我们已经准备好了数据,接下来我们将介绍如何将这两张表的数据合并成一张表。
INNER JOIN合并两张表
INNER JOIN是最常用的一种合并两张表的方式,它会根据两张表中的共同字段进行匹配,然后将符合条件的数据合并在一起。下面是一个使用INNER JOIN将 table1
和 table2
合并成一张表的示例:
SELECT t1.id, t1.name, t1.age, t2.subject, t2.score
FROM table1 t1
INNER JOIN table2 t2
ON t1.id = t2.id;
运行以上SQL语句,我们将获得以下合并后的结果:
id | name | age | subject | score |
---|---|---|---|---|
1 | 张三 | 20 | Math | 80 |
2 | 李四 | 22 | English | 75 |
3 | 王五 | 21 | Science | 90 |
通过INNER JOIN,我们成功将 table1
和 table2
的数据合并成一张表,并且根据学生的id字段进行了匹配。
LEFT JOIN合并两张表
除了INNER JOIN,还有一种常用的合并方式是LEFT JOIN。LEFT JOIN 会将左边表的所有数据都包括在结果中,并且根据左边表的字段进行匹配。如果右边表中没有匹配的数据,对应字段的结果将为NULL。下面是一个使用LEFT JOIN 合并 table1
和 table2
的示例:
SELECT t1.id, t1.name, t1.age, t2.subject, t2.score
FROM table1 t1
LEFT JOIN table2 t2
ON t1.id = t2.id;
运行以上SQL语句,我们将获得以下合并后的结果:
id | name | age | subject | score |
---|---|---|---|---|
1 | 张三 | 20 | Math | 80 |
2 | 李四 | 22 | English | 75 |
3 | 王五 | 21 | Science | 90 |
通过LEFT JOIN,我们同样成功将 table1
和 table2
的数据合并成一张表,并且保留了左边表的所有数据,即使右边表中没有匹配的数据也不影响结果的显示。
UNION合并两张表
除了使用JOIN操作,我们还可以使用UNION操作合并两张表。UNION操作可以将两张表的数据合并成一张表,并去除重复的行,但是要求两张表的列数和数据类型必须相同。下面是一个使用UNION合并 table1
和 table2
的示例:
SELECT id, name, age
FROM table1
UNION
SELECT id, subject AS name, score AS age
FROM table2;
运行以上SQL语句,我们将获得以下合并后的结果:
id | name | age |
---|---|---|
1 | 张三 | 20 |
2 | 李四 | 22 |
3 | 王五 | 21 |
1 | Math | 80 |
2 | English | 75 |
3 | Science | 90 |
通过UNION操作,我们成功将 table1
和 table2
的数据合并成一张表,并且去除了重复的行,合并后的表中共有6行数据。
总结
在SQL中,我们可以使用多种方式将两张表的数据合并成一张表,其中INNER JOIN、LEFT JOIN 和 UNION 是常用的合并方式。不同的场景需要选择合适的合并方式来实现我们的需求。