1. 转自:http://blog.csdn.net/jetjetlinuxsystem/article/details/6663218
  2.  
  3. Left Join, Inner Join 的相关内容,非常实用,对于理解原理和具体应用都很有帮助!
  4.  
  5. left join left outer join的简写,left join默认是outer属性的。
  6. Inner Join
  7. Inner Join 逻辑运算符返回满足第一个(顶端)输入与第二个(底端)输入联接的每一行。这个和用select查询多表是一样的效果,所以很少用到;
  8. outer join则会返回每个满足第一个(顶端)输入与第二个(底端)输入的联接的行。它还返回任何在第二个输入中没有匹配行的第一个输入中的行。关键就是后面那句,返回的多一些。所以通常意义上的left join就是left outer join
  9.  
  10. 一.先看一些最简单的例子
  11.  
  12. 例子
  13.  
  14. Table A
  15. aid adate
  16. 1 a1
  17. 2 a2
  18. 3 a3
  19.  
  20. TableB
  21.  
  22. bid bdate
  23. 1 b1
  24. 2 b2
  25. 4 b4
  26. 两个表a,b相连接,要取出id相同的字段
  27. select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据.
  28. 此时的取出的是:
  29. 1 a1 b1
  30. 2 a2 b2
  31.  
  32. 那么left join 指:
  33. select * from a left join b on a.aid = b.bid
  34. 首先取出a表中所有数据,然后再加上与a,b匹配的的数据
  35. 此时的取出的是:
  36. 1 a1 b1
  37. 2 a2 b2
  38. 3 a3 空字符
  39.  
  40. 同样的也有right join
  41. 指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据
  42. 此时的取出的是:
  43. 1 a1 b1
  44. 2 a2 b2
  45. 4 空字符 b4
  46.  
  47. LEFT JOIN LEFT OUTER JOIN
  48. 左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值
  49.  
  50. 二. left join/right join/inner join操作演示
  51.  
  52. A记录如下:
  53. aID aNum
  54. 1 a20050111
  55. 2 a20050112
  56. 3 a20050113
  57. 4 a20050114
  58. 5 a20050115
  59.  
  60. B记录如下:
  61. bID bName
  62. 1 2006032401
  63. 2 2006032402
  64. 3 2006032403
  65. 4 2006032404
  66. 8 2006032408
  67.  
  68. 实验如下:
  69. 1. left join
  70. sql语句如下:
  71.  
  72. SELECT * FROM A
  73. LEFT JOIN B
  74. ON A.aID = B.bID
  75.  
  76. 结果如下:
  77. aID aNum bID bName
  78. 1 a20050111 1 2006032401
  79. 2 a20050112 2 2006032402
  80. 3 a20050113 3 2006032403
  81. 4 a20050114 4 2006032404
  82. 5 a20050115 NULL NULL
  83. (所影响的行数为 5 行)
  84.  
  85. 结果说明:
  86. left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
  87. 换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
  88. B表记录不足的地方均为NULL.
  89.  
  90. 2. right join
  91. sql语句如下:
  92.  
  93. SELECT * FROM A
  94. RIGHT JOIN B
  95. ON A.aID = B.bID
  96.  
  97. 结果如下:
  98. aID aNum bID bName
  99. 1 a20050111 1 2006032401
  100. 2 a20050112 2 2006032402
  101. 3 a20050113 3 2006032403
  102. 4 a20050114 4 2006032404
  103. NULL NULL 8 2006032408
  104. (所影响的行数为 5 行)
  105.  
  106. 结果说明:
  107. 仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
  108.  
  109. 3.inner join
  110. sql语句如下:
  111.  
  112. SELECT * FROM A
  113. INNERJOIN B
  114. ON A.aID = B.bID
  115.  
  116. 结果如下:
  117. aID aNum bID bName
  118. 1 a20050111 1 2006032401
  119. 2 a20050112 2 2006032402
  120. 3 a20050113 3 2006032403
  121. 4 a20050114 4 2006032404
  122.  
  123. 结果说明:
  124. 很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.

数据库表的连接(Left join , Right Join, Inner Join)用法详解的更多相关文章

  1. MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解

    本篇文章是对MySQL数据库INSERT.UPDATE.DELETE以及REPLACE语句的用法进行了详细的分析介绍,需要的朋友参考下   MySQL数据库insert和update语句引:用于操作数 ...

  2. 转载:MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解

    转自:http://www.jb51.net/article/39199.htm 本篇文章是对MySQL数据库INSERT.UPDATE.DELETE以及REPLACE语句的用法进行了详细的分析介绍, ...

  3. Oracle数据库中序列(SEQUENCE)的用法详解

    Oracle数据库中序列(SEQUENCE)的用法详解   在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了 ...

  4. oracle数据库定时任务dbms_job的用法详解

    本文来源:Ruthless <oracle数据库定时任务dbms_job的用法详解> 一.dbms_job涉及到的知识点   1.创建job: variable jobno number; ...

  5. mysql(2)—— 由笛卡尔积现象分析数据库表的连接

    首先,先简单解释一下笛卡尔积. 现在,我们有两个集合A和B. A = {0,1}     B = {2,3,4} 集合 A×B 和 B×A的结果集就可以分别表示为以下这种形式: A×B = {(0,2 ...

  6. Mysql Join语法解析与性能分析详解

    一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1 ...

  7. SQL学习笔记之SQL中INNER、LEFT、RIGHT JOIN的区别和用法详解

    0x00 建表准备 相信很多人在刚开始使用数据库的INNER JOIN.LEFT JOIN和RIGHT JOIN时,都不太能明确区分和正确使用这三种JOIN操作,本文通过一个简单的例子通俗易懂的讲解这 ...

  8. WordPress 数据库操作WPDB对象($wpdb)用法详解【转载】

    使用wordpress的时候,如果想直接使用WP里封装的数据库操作的类(wp-db.php),将wp-blog-header.php包含到代码中就可以使用了. define(‘PATH’, dirna ...

  9. 【Linux 运维】查看网络连接状态信息之netstat和ss命令详解

    一.netstat 常用命令详解 通过man netstat可以查看netstat的帮助信息: netstat 命令:用于显示各种网络相关信息,如网络连接,路由表,接口状态,无效连接,组播成员 等等. ...

随机推荐

  1. oracle刚開始学习的人经常使用操作100问

    oracle刚開始学习的人经常使用操作100问 1. Oracle安装完毕后的初始口令?   internal/oracle sys/change_on_install system/manager ...

  2. Linux文件系统(七)---系统调用之open操作(一)

    (内核2.4.37) 一. 当我们打开一个文件的时候.须要获得文件的文件描写叙述符(前面已经说过事实上就是文件数组下标).通常是通过函数open来完毕.这个系统调用在<unistd.h>头 ...

  3. ASP.NET form method "post" and "get"

    https://forums.asp.net/t/1796310.aspx?ASP+NET+form+method+post+and+get+ GET:  1) Data is appended to ...

  4. ES API 备忘

    本文所列的所有API在ElasticSearch文档是有详尽的说明,但它的结构组织的不太好. 这篇文章把ElasticSearch API用表格的形式供大家参考. https://www.iteblo ...

  5. [JZOJ 4307] [NOIP2015模拟11.3晚] 喝喝喝 解题报告

    题目链接: http://172.16.0.132/senior/#main/show/4307 题目: 解题报告: 题目询问我们没出现坏对的连续区间个数 我们考虑从左到有枚举右端点$r$,判断$a[ ...

  6. [雅礼NOIP2018集训] day6

    打满暴力好像是一种挑战,已经连续几天考试最后一个小时自闭了,因为自以为打完了暴力,然而,结果往往差强人意 大概是考试的策略有些问题 T1: 我们设$g[x]$为在x时取小于等于m个物品的最大价值,下面 ...

  7. requireJS实现原理分析

    下面requireJS实现的基本思路  项目地址https://github.com/WangMaoling/require var require = (function(){ //框架版本基本信息 ...

  8. bower 代理

    bower 设置: 修改 .bowerrc 文件(如无则新增): { "proxy": "http://proxy.mysite.com:8080", &quo ...

  9. 关于PageRank的总结

    好久不用CSDN,最近想给带的本科生实验课开个期末习题专题页,发现CSDN的博客忽然要绑定之类.只好弃用回博客园写学习总结了.塞翁失马焉知非福. *************************** ...

  10. dl learn task

    https://deeplearning4j.org/cn/word2vec Task 1 分类http://blog.csdn.net/czs1130/article/details/7071734 ...