欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

[笔记][SQL] 连接join

程序员文章站 2022-06-28 13:11:57
在学习菜鸟教程里的MySQL教程时,对左右连接的结果有点不解。 其中有如下两个表: 执行右连接语句后: 得到的结果是: 我对这个结果感到很奇怪,右连接是会返回右表的所有行,不管有无匹配,但右表runoob_author明明有Google这个数据,为什么会是NULL。 试着把所有列打印出来: 可以看到 ......

在学习菜鸟教程里的mysql教程时,对左右连接的结果有点不解。

其中有如下两个表:

runoob_tbl:
+-----------+--------------+---------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-----------+--------------+---------------+-----------------+
|         1 | 学习php      | 菜鸟教程      | 2017-04-12      |
|         2 | 学习mysql    | 菜鸟教程      | 2017-04-12      |
|         3 | 学习java     | runoob.com    | 2015-05-01      |
|         4 | 学习python   | runoob.com    | 2016-03-06      |
|         5 | 学习c        | fk            | 2017-03-06      |
+-----------+--------------+---------------+-----------------+

tcount_tbl:
+---------------+--------------+
| runoob_author | runoob_count |
+---------------+--------------+
| 菜鸟教程      |           10 |
| runoob.com    |           20 |
| google        |           22 |
+---------------+--------------+

执行右连接语句后:

select a.runoob_id, a.runoob_author, b.runoob_count 
from runoob_tbl a right join tcount_tbl b 
on a.runoob_author = b.runoob_author;

得到的结果是:

+-----------+---------------+--------------+
| runoob_id | runoob_author | runoob_count |
+-----------+---------------+--------------+
|         1 | 菜鸟教程      |           10 |
|         2 | 菜鸟教程      |           10 |
|         3 | runoob.com    |           20 |
|         4 | runoob.com    |           20 |
|      null | null          |           22 |
+-----------+---------------+--------------+

我对这个结果感到很奇怪,右连接是会返回右表的所有行,不管有无匹配,但右表runoob_author明明有google这个数据,为什么会是null。

试着把所有列打印出来:

+-----------+--------------+---------------+-----------------+---------------+--------------+
| runoob_id | runoob_title | runoob_author | submission_date | runoob_author | runoob_count |
+-----------+--------------+---------------+-----------------+---------------+--------------+
|         1 | 学习php      | 菜鸟教程      | 2017-04-12      | 菜鸟教程      |           10 |
|         2 | 学习mysql    | 菜鸟教程      | 2017-04-12      | 菜鸟教程      |           10 |
|         3 | 学习java     | runoob.com    | 2015-05-01      | runoob.com    |           20 |
|         4 | 学习python   | runoob.com    | 2016-03-06      | runoob.com    |           20 |
|      null | null         | null          | null            | google        |           22 |
+-----------+--------------+---------------+-----------------+---------------+--------------+

可以看到google还是在的。这才明白原来select的是左表的runoob_author,所以打印出来才会是null。只要换成b.runoob_author就可以看到期望的结果了:

+---------------+--------------+
| runoob_author | runoob_count |
+---------------+--------------+
| 菜鸟教程      |           10 |
| runoob.com    |           20 |
| google        |           22 |
+---------------+--------------+