(转)left join,right join,inner 的区别

本文详细解释了SQL中的不同连接类型,包括内连接、左连接、右连接及其应用场景,并通过实例展示了如何正确使用这些连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 通俗的讲:    
  2.   
  3. A   left    join   B   的连接的记录数与A表的记录数同    
  4. A   right   join   B   的连接的记录数与B表的记录数同      
  5. A   left    join   B   等价B   right   join   A       
  6.   
  7. table   A:    
  8. Field_K,   Field_A    
  9. 1                       a    
  10. 3                       b    
  11. 4                       c       
  12.     
  13. table   B:    
  14.   
  15. Field_K,   Field_B    
  16. 1                       x    
  17. 2                       y    
  18. 4                       z       
  19.   
  20. select   a.Field_K,   a.Field_A,   b.Field_K,   b.Field_B    
  21.   from   a   left   join   b   on    a.Field_K = b .Field_K    
  22.      
  23.   Field_K         Field_A         Field_K         Field_B            
  24.   ----------   ----------   ----------   ----------      
  25.   1                     a                     1                     x                      
  26.   3                     b                     NULL               NULL    
  27.   4                     c                     4                     z                      
  28.      
  29.   select   a.Field_K,   a.Field_A,   b.Field_K,   b.Field_B    
  30.   from   a   right   join   b   on    a.Field_K = b .Field_K    
  31.      
  32.   Field_K         Field_A         Field_K         Field_B            
  33.   ----------   ----------   ----------   ----------      
  34.   1                     a                     1                     x                      
  35.   NULL               NULL               2                     y                      
  36.   4                     c                     4                     z       --   
  37.   
  38.   
  39. 举个例子:    
  40.   假设a表和b表的数据是这样的。    
  41.   表a                             
  42. id       name      
  43. 1          a    
  44. 2          b               
  45. 3          c    
  46.   
  47. 表b                   
  48. id       stock    
  49. 1         15    
  50. 2         50    
  51.   select   *   from   a   inner   join   b   on    a.id = b .id    
  52.   这个语法是连接查询中的内连接,它产生的结果是    
  53.   两个表相匹配的记录出现在结果列表中。    
  54.   根据上面的表,出现的结果是这样的    
  55.   a.id     name     b.id     stock    
  56.   1       a             1         15    
  57.   2             b             2         50    
  58.   ----------------------------    
  59.   select   *   from   a,b   where    a.id = b .id    
  60.   这个语法是内连接的另外一种写法,其执行结果与inner   join   一样    
  61.      
  62.   --------------------------------      
  63.      
  64.   select   *   from   a   left/right   join   b   on    a.id = b .id    
  65.   这个是外连接语法中的左外连接或右外连接    
  66.   如果是左外连接的话,它将显示a表的所有记录,    
  67.   select   a.*,b.*   from   a   left   join   b   on    a.id = b .id    
  68.   查询的结果是这样的:    
  69.   a.id     name     b.id     stock    
  70.   1         a         1             15    
  71.   2               b         2             50    
  72.   3               c       null         null     
  73.   --------------------------------------------    
  74.   如果是右外连接的话,它将显示b表的所有记录,    
  75.   select   a.*,b.*   from   a   right   join   b   on    a.id = b .id    
  76.   查询的结果是这样的:    
  77.   a.id     name     b.id     stock    
  78.   1         a         1             15    
  79.   2               b         2             50     
  80. -- select   a.*,b.*   from   a   left   join   b   on    a.k    =    b .k      
  81.   select   a.*,b.*   from   a   left   outer   join   b   on    a.k    = b .k    
  82.   ----------上面两种一样left   join是left   outer   join的简写    
  83.   select   a.*,b.*   from   a   left   inner   join   b   on    a.k    =    b .k      
  84.   没有这种写法,错误的语句.   
  85. -- 在你要使用多个left   join的时候    
  86.   比如说10个    
  87.   我们把10个全都写成left   join的形式    
  88.   然后再SQL让他自动运行一下,它会把最后一次出现的left   join变成left   outer   join    
  89.   所以依此推理,最后一个left   join会以left   outer   join的形式存在    
  90.   当然,不管变不变对结果的显示没有任何影响   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值