如何合并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操作符,具体方法取决于我们想要合并的表的属性和需要返回的结果集。无论使用哪种方法,我们都需要确保表之间有相同的列,这样我们才能将它们正确地组合在一起。