MySQL 如何在一个查询中合并两个表
MySQL作为开源的关系型数据库管理系统,逐渐成为了Web应用系统的首选,如何使用MySQL对于广大开发者来说都是一个必备技能。今天我们来看一下MySQL中如何在一个查询中合并两个表。
阅读更多:MySQL 教程
什么是合并两个表?
在MySQL中,合并两个表可以理解为对两个表进行连接操作,生成新的结果集。合并操作在查询中非常常见,经常用到的联接有:内连接、左连接、右连接、全连接等。
假设我们有两个表,一个是“students”,一个是“scores”,如下所示:
students表
id | name | age |
---|---|---|
1 | Tom | 18 |
2 | Jack | 19 |
3 | Lily | 20 |
scores表:
id | subject | score |
---|---|---|
1 | Math | 80 |
2 | English | 90 |
3 | Chinese | 85 |
我们可以使用以下SQL语句将两个表进行合并:
内连接
内连接(INNER JOIN)是连接操作中最常用的一种,表示只连接两张表中相互匹配的部分。
例如,我们可以使用以下SQL语句将“students”表和“scores”表进行连接:
执行以上SQL语句后,生成的结果集如下:
id | name | age | id | subject | score |
---|---|---|---|---|---|
1 | Tom | 18 | 1 | Math | 80 |
2 | Jack | 19 | 2 | English | 90 |
3 | Lily | 20 | 3 | Chinese | 85 |
我们可以看到,生成的结果集包含两张表中id列匹配的部分,并将这些匹配的行连接起来。此时,生成的结果集中包含了两张表中匹配的行,而不包含不匹配的行。
左连接
左连接(LEFT JOIN)将两张表中的所有数据都保留下来,并且将匹配的数据连接到一起,对于左表中没有匹配上的数据,用NULL值填充。在使用左连接时,首先指定要连接的表,然后在关键字LEFT JOIN之后指定要连接的表.
例如,我们可以使用以下SQL语句在“students”表中查找每个学生的分数,包括那些没有分数的学生:
执行以上SQL语句后,生成的结果集如下:
id | name | age | id | subject | score |
---|---|---|---|---|---|
1 | Tom | 18 | 1 | Math | 80 |
2 | Jack | 19 | 2 | English | 90 |
3 | Lily | 20 | 3 |Chinese | 85 | |
4 | Lucy | 21 | NULL | NULL | NULL |
我们可以看到,由于“scores”表中没有Lucy的信息,左连接操作保留了“students”表中Lucy的信息,并用NULL值填充了“scores”中对应部分。
右连接
右连接(RIGHT JOIN)和左连接操作类似,只不过右连接会保留右表中没有匹配到的部分。在使用右连接时,首先指定要右连接的表,然后在关键字RIGHT JOIN之后指定要连接的表。
例如,我们可以使用以下SQL语句在“scores”表中查找成绩,并列出所有的科目,包括没有学生的科目:
执行以上SQL语句后,生成的结果集如下:
id | name | age | id | subject | score |
---|---|---|---|---|---|
1 | Tom | 18 | 1 | Math | 80 |
2 | Jack | 19 | 2 | English | 90 |
3 | Lily | 20 | 3 |Chinese | 85 | |
NULL | NULL | NULL | 4 | Biology | 70 |
我们可以看到,由于“students”表中没有Biology这门科目的信息,右连接操作保留了“scores”表中Biology这门科目的信息,并用NULL值填充了“students”中对应部分。
全连接
全连接(FULL OUTER JOIN)操作会保留左表和右表中所有的数据,并将匹配的数据连接在一起。在使用全连接时,首先指定要连接的表,然后在关键字FULL OUTER JOIN之后指定要连接的表。
例如,我们可以使用以下SQL语句将“students”表和“scores”表进行全连接:
执行以上SQL语句后,生成的结果集如下:
id | name | age | id | subject | score |
---|---|---|---|---|---|
1 | Tom | 18 | 1 | Math | 80 |
2 | Jack | 19 | 2 | English | 90 |
3 | Lily | 20 | 3 |Chinese | 85 | |
4 | Lucy | 21 | NULL | NULL | NULL |
NULL | NULL | NULL | 4 | Biology | 70 |
我们可以看到,全连接操作保留了“students”表和“scores”表中所有的信息,并将匹配的信息连接在一起。对于没有匹配的部分,会用NULL值填充。
总结
在MySQL中,合并两个表可以理解为连接操作,主要包括内连接、左连接、右连接、全连接等。其中内连接是最常用的连接操作,表示只连接两张表中相互匹配的部分;左连接和右连接分别将两张表中的所有数据都保留下来,并将匹配的数据连接到一起;全连接保留了左表和右表中所有的数据,并将匹配的数据连接在一起。在实际工作中,需要根据具体需求选择不同类型的连接操作,来进行高度灵活的数据处理。