在学习菜鸟教程里的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 |
+---------------+--------------+

[笔记][SQL] 连接join的更多相关文章

  1. SQL 连接 JOIN 例解。(左连接,右连接,全连接,内连接,交叉连接,自连接)

    SQL 连接 JOIN 例解.(左连接,右连接,全连接,内连接,交叉连接,自连接) 最近公司在招人,同事问了几个自认为数据库可以的应聘者关于库连接的问题,回答不尽理想-现在在这写写关于它们的作用假设有 ...

  2. SQL 连接(JOIN)

    SQL 连接(JOIN) SQL join 用于把来自两个或多个表的行结合起来. SQL JOIN SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. 最常见的 JO ...

  3. 【转】图解SQL的各种连接join

    原帖地址:http://www.nowamagic.net/librarys/veda/detail/936 图解SQL的各种连接join 让你对SQL的连接一目了然 在 2011年12月22日 那天 ...

  4. SQL内连接-外连接join,left join,right join,full join

    1.创建测试表test1及test2 SQL)); 表已创建. SQL)); 表已创建. ,'name1'); ,'name2'); ,'name3'); ,'name4'); ,'name5'); ...

  5. SQL的各种连接Join详解

    SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. 最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN).SQL LEFT JOIN.SQL  ...

  6. sql连接查询(inner join、full join、left join、 right join)

    sql连接查询(inner join.full join.left join. right join) 一.内连接(inner join) 首先我这有两张表 1.顾客信息表customer 2.消费订 ...

  7. [No00008C]图解SQL的各种连接join让你对SQL的连接一目了然

    对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...

  8. 图解SQL的各种连接join[转]

    对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...

  9. 图解SQL的各种连接join

    对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...

随机推荐

  1. (WCF) 多线程 (Multi-threading) 和 并发性 (Concurency)

    问题:WCF 有个Server端,还有个Client端,他们之间是如何进行并发,多线程通信的呢?多个Client端同时访问Server,如何保证Server端的操作线程安全呢? 在理解WCF Conc ...

  2. Python power spectral 功率谱

    You can also use scipy.signal.welch to estimate the power spectral density using Welch’s method. Her ...

  3. WinAPI: WinExec - 运行外部程序

    原文:http://www.cnblogs.com/del/archive/2008/02/13/1067871.html //声明 WinExec(   lpCmdLine: LPCSTR; {文件 ...

  4. PRINCE2的优势有哪些?

    PRINCE2之所以迅速发展的原因之一是许多企业认识到建立适合自己企业的项目管理标准是一项耗时耗财的工作. 他们至少要花费6-12个月.成千上万个工时来建立一套方法,而这只是最初的成本. 之后他们必须 ...

  5. c# 设计模式 之:工厂模式之---工厂模式

    1.uml类图: 实现和依赖关系: 实现: SportFactory.JeepFactory.HatchbackFactory 实现 IFactory 接口 SportCar.JeepCar.Hatc ...

  6. plsql连接12cR2 PDB报错ORA-28040/ORA-01017

    http://hbxztc.blog.51cto.com/1587495/1907533 PS: 在数据库服务器上的oracle/network/admin/sqlnet.ora文件添加一行SQLNE ...

  7. 5、Python,enumerate用法

    1.enumerate()是python的内置函数 2.对于一个可迭代(iterable)/可遍历的对象(如列表,字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值 3.多用 ...

  8. Spark SQL on Yarn-Cluster

    Spark SQL 或者Hive SQL在yarn-client模式下运行正常,但是在yarn-cluster模式下总是报 status failed错误, 需要把$SPARK_HOME/lib/sp ...

  9. URAL-1018 Binary Apple Tree---树形DP

    题目链接: https://cn.vjudge.net/problem/URAL-1018 题目大意: 给你一棵树,每条边有一个边权,求以1为根节点,q条边的子数(q+1个点),边权和至最大. 解题思 ...

  10. caanimationgroup与CATransaction的区别

    动画的组合: caanimationgroup:同一个layer: CATransaction:不同layer: In Core Animation, transactions are a way t ...