数据库表的连接(Left join , Right Join, Inner Join)用法详解

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

转载于:https://www.cnblogs.com/xinruyi/p/11055742.html

发表评论

表情:
评论列表 (有 0 条评论,370人围观)

还没有评论,来说两句吧...

相关阅读