如何合并MySQL两个表的数据(mysql两表的数据合并)

如何合并MySQL两个表的数据?

当我们需要对两个表进行合并时,MySQL提供了多种方法来实现这一目的。下面是一些常用的合并MySQL两个表的方法。

1.使用UNION操作符

UNION操作符允许将多个SELECT语句的结果集组合在一起。它去除重复行并排序结果。下面是使用UNION操作符合并两个表的语法:

“`sql

SELECT column_name(s) FROM table1

UNION

SELECT column_name(s) FROM table2;


例子:

我们有两张表student和teacher:

```sql
+-------+------+--------+-------------+
| s_id | name | gender | date_of_birth|
+-------+------+--------+-------------+
| 10001 | Tom | M | 2001-01-01 |
| 10002 | Jack | M | 2002-02-02 |
| 10003 | Lucy | F | 2003-03-03 |
+-------+------+--------+-------------+
+--------+--------+--------+--------+
| t_id | name | gender | salary |
+--------+--------+--------+--------+
| 20001 | Alice | F | 5000 |
| 20002 | Bob | M | 6000 |
| 20003 | Cindy | F | 7000 |
+--------+--------+--------+--------+

合并两张表:

“`sql

SELECT s_id AS id, name, gender, date_of_birth, NULL AS salary FROM student

UNION

SELECT t_id, name, gender, NULL, salary FROM teacher;


结果:

```sql
+-------+-------+--------+---------------+--------+
| id | name | gender | date_of_birth | salary |
+-------+-------+--------+---------------+--------+
| 10001 | Tom | M | 2001-01-01 | NULL |
| 10002 | Jack | M | 2002-02-02 | NULL |
| 10003 | Lucy | F | 2003-03-03 | NULL |
| 20001 | Alice | F | NULL | 5000 |
| 20002 | Bob | M | NULL | 6000 |
| 20003 | Cindy | F | NULL | 7000 |
+-------+-------+--------+---------------+--------+

该语句将学生表和教师表合并为一个结果集。请注意,我们必须使用NULL来表示在一个表中不存在的列,以确保列的数量和类型一致。

2.使用JOIN操作符

如果要将两个表的数据合并起来,我们也可以使用JOIN操作符。JOIN操作允许我们从两个或多个表中选择记录,并基于表之间的联系将它们组合在一起。下面是使用INNER JOIN操作符合并两个表的语法:

“`sql

SELECT column_name(s)

FROM table1

INNER JOIN table2

ON table1.column_name = table2.column_name;


例子:

我们有两张表student和score:

```sql
+-------+------+--------+-------------+
| s_id | name | gender | date_of_birth|
+-------+------+--------+-------------+
| 10001 | Tom | M | 2001-01-01 |
| 10002 | Jack | M | 2002-02-02 |
| 10003 | Lucy | F | 2003-03-03 |
+-------+------+--------+-------------+
+--------+--------+--------+--------+
| s_id | course | score | term |
+--------+--------+--------+--------+
| 10001 | Math | 80 | 2018-1 |
| 10001 | Math | 90 | 2018-2 |
| 10001 | English| 75 | 2018-1 |
| 10002 | Math | 85 | 2018-2 |
+--------+--------+--------+--------+

请注意,这两张表之间存在一个外键约束,在表score中,s_id列引用student表中的s_id列。

现在我们想要获取每个学生的所有科目的成绩。我们可以使用INNER JOIN将这两个表合并起来:

“`sql

SELECT student.s_id, student.name, course, score, term

FROM student

INNER JOIN score

ON student.s_id = score.s_id;


结果:

```sql
+-------+------+---------+-------+--------+
| s_id | name | course | score | term |
+-------+------+---------+-------+--------+
| 10001 | Tom | Math | 80 | 2018-1 |
| 10001 | Tom | Math | 90 | 2018-2 |
| 10001 | Tom | English| 75 | 2018-1 |
| 10002 | Jack | Math | 85 | 2018-2 |
+-------+------+---------+-------+--------+

该语句返回每个学生的所有科目的成绩,包括没有成绩的科目,因为我们使用了INNER JOIN操作符,这样我们可以保证只包含在两个表中都存在的学生记录。

3.使用UNION ALL操作符

UNION ALL操作符和UNION操作符有些不同,它允许包括所有重复的行。它还更快,因为它不用排序结果集。下面是使用UNION ALL操作符合并两个表的语法:

“`sql

SELECT column_name(s) FROM table1

UNION ALL

SELECT column_name(s) FROM table2;


例子:

我们同样有两张表student和teacher:

```sql
+-------+------+--------+-------------+
| s_id | name | gender | date_of_birth|
+-------+------+--------+-------------+
| 10001 | Tom | M | 2001-01-01 |
| 10002 | Jack | M | 2002-02-02 |
| 10003 | Lucy | F | 2003-03-03 |
+-------+------+--------+-------------+
+--------+--------+--------+--------+
| t_id | name | gender | salary |
+--------+--------+--------+--------+
| 20001 | Alice | F | 5000 |
| 20002 | Bob | M | 6000 |
| 20003 | Cindy | F | 7000 |
+--------+--------+--------+--------+

现在我们使用UNION ALL操作符合并两个表:

“`sql

SELECT s_id AS id, name, gender, date_of_birth, NULL AS salary FROM student

UNION ALL

SELECT t_id, name, gender, NULL, salary FROM teacher;


结果:

```sql
+-------+-------+--------+---------------+--------+
| id | name | gender | date_of_birth | salary |
+-------+-------+--------+---------------+--------+
| 10001 | Tom | M | 2001-01-01 | NULL |
| 10002 | Jack | M | 2002-02-02 | NULL |
| 10003 | Lucy | F | 2003-03-03 | NULL |
| 20001 | Alice | F | NULL | 5000 |
| 20002 | Bob | M | NULL | 6000 |
| 20003 | Cindy | F | NULL | 7000 |
+-------+-------+--------+---------------+--------+

该语句返回的结果与使用UNION操作符返回的结果相同,但包括重复行。

总结

在MySQL中合并两个表有多种方法,我们可以使用UNION操作符,INNER JOIN操作符或UNION ALL操作符,具体方法取决于我们想要合并的表的属性和需要返回的结果集。无论使用哪种方法,我们都需要确保表之间有相同的列,这样我们才能将它们正确地组合在一起。


数据运维技术 » 如何合并MySQL两个表的数据(mysql两表的数据合并)