细说MySQL连接查询:内连、左连和右连

安稳与你 提交于 2020-11-06 23:59:31

简介:
MySQL 的连接查询,通常都是将来自两个或多个表的行结合起来,基于这些表之间的共同字段,进行数据的拼接。首先,要确定一个主表作为结果集,然后将其他表的行有选择 性的连接到选定的主表结果集上。使用较多的连接查询包括:内连接、左连接和右连接。

准备两张表做演示,这两张表必须要有相同的字段内容可匹配,这两张表是 id 和 bianhao 列

mysql> select * from a_player;
+----+----------+-------+
| id | name     | score |
+----+----------+-------+
|  1 | zhangsan |    88 |
|  2 | lisi     |    89 |
|  3 | wangwu   |    67 |
|  4 | zhaoliu  |    90 |
|  5 | xuli     |    80 |
|  6 | keke     |    75 |
+----+----------+-------+
6 rows in set (0.00 sec)

mysql> select * from b_table;
+---------+-------+
| bianhao | sushe |
+---------+-------+
|       1 |   301 |
|       2 |   303 |
|       3 |   308 |
|       7 |   301 |
|       8 |   305 |
|       9 |   304 |
|      10 |   308 |
+---------+-------+
7 rows in set (0.00 sec)

一、内连接定义和实例

简而言之:找两个表中的公共部分。

■ 两张或多张表中同时符合某种条件的数据记录组合
■ FROM子句中使用INNER JOIN关键字连接多张表,并使用ON设置连接条件
■ 是系统默认的表连接方式,可以省略INNER关键字
■ 多表支持连续使用INNER JOIN,建议不超过三个表
■ 语法结构
■ 实现原理,下图所示:




在这里插入图片描述

内连语句:inner join

验证:得到的结果是两个表相同字段的公共部分

mysql> select * from a_player inner join b_table on a_player.id=b_table.bianhao;
+----+----------+-------+---------+-------+
| id | name     | score | bianhao | sushe |
+----+----------+-------+---------+-------+
|  1 | zhangsan |    88 |       1 |   301 |
|  2 | lisi     |    89 |       2 |   303 |
|  3 | wangwu   |    67 |       3 |   308 |
+----+----------+-------+---------+-------+
3 rows in set (0.01 sec)

二、外连接:左连接定义和实例

简而言之:以左表为准,去匹配右表,左表有多少条数据,结果就是多少条数据。左表有的数据正常显示,右表没有的数据就用NULL显示。

■ 也被称为左外连接
■ 在FROM子句中使用LEFT JOIN关键字来表示
■ 匹配左表中所有及右表中符合条件的行
■ 实现原理,下图所示:


在这里插入图片描述

左连接语句:left join

验证:得到的是以a_player(左表)为准的所有数据显示,再显示b_table中与其匹配的项,未匹配到的用NULL。

mysql> select * from a_player left join b_table on a_player.id=b_table.bianhao;
+----+----------+-------+---------+-------+
| id | name     | score | bianhao | sushe |
+----+----------+-------+---------+-------+
|  1 | zhangsan |    88 |       1 |   301 |
|  2 | lisi     |    89 |       2 |   303 |
|  3 | wangwu   |    67 |       3 |   308 |
|  4 | zhaoliu  |    90 |    NULL |  NULL |
|  5 | xuli     |    80 |    NULL |  NULL |
|  6 | keke     |    75 |    NULL |  NULL |
+----+----------+-------+---------+-------+
6 rows in set (0.00 sec)

二、外连接:右连接定义和实例

简而言之:与左外连接反之,以右表为准,去匹配左表,右表有多少条数据,结果就是多少条数据。右表的数据正常显示,左表没有的数据就用NULL显示。
■ 也被称为右外连接
■ 在FROM子句中使用RIGHT JOIN 关键字来表示
■ 匹配右表中所有行及左表中符合条件的行
■ 实现原理,下图所示



在这里插入图片描述

右连接语句:right join

验证:得到的是以b_table(右表)为准的所有数据显示,再显示a_player中与其匹配的项,未匹配到的用NULL。

mysql> select * from a_player right join b_table on a_player.id=b_table.bianhao;
+------+----------+-------+---------+-------+
| id   | name     | score | bianhao | sushe |
+------+----------+-------+---------+-------+
|    1 | zhangsan |    88 |       1 |   301 |
|    2 | lisi     |    89 |       2 |   303 |
|    3 | wangwu   |    67 |       3 |   308 |
| NULL | NULL     |  NULL |       7 |   301 |
| NULL | NULL     |  NULL |       8 |   305 |
| NULL | NULL     |  NULL |       9 |   304 |
| NULL | NULL     |  NULL |      10 |   308 |
+------+----------+-------+---------+-------+
7 rows in set (0.00 sec)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!