zoukankan      html  css  js  c++  java
  • sql之left join、right join、inner join的区别

     1 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
     2 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
     3 inner join(等值连接) 只返回两个表中联结字段相等的行
     4 
     5 举例如下: 
     6 --------------------------------------------
     7 表A记录如下:
     8 aID     aNum
     9 1     a20050111
    10 2     a20050112
    11 3     a20050113
    12 4     a20050114
    13 5     a20050115
    14 
    15 表B记录如下:
    16 bID     bName
    17 1     2006032401
    18 2     2006032402
    19 3     2006032403
    20 4     2006032404
    21 8     2006032408
    22 
    23 --------------------------------------------
    24 1.left join
    25 sql语句如下: 
    26 select * from A
    27 left join B 
    28 on A.aID = B.bID
    29 
    30 结果如下:
    31 aID     aNum     bID     bName
    32 1     a20050111    1     2006032401
    33 2     a20050112    2     2006032402
    34 3     a20050113    3     2006032403
    35 4     a20050114    4     2006032404
    36 5     a20050115    NULL     NULL
    37 
    38 (所影响的行数为 5 行)
    39 结果说明:
    40 left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
    41 换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
    42 B表记录不足的地方均为NULL.
    43 --------------------------------------------
    44 2.right join
    45 sql语句如下: 
    46 select * from A
    47 right join B 
    48 on A.aID = B.bID
    49 
    50 结果如下:
    51 aID     aNum     bID     bName
    52 1     a20050111    1     2006032401
    53 2     a20050112    2     2006032402
    54 3     a20050113    3     2006032403
    55 4     a20050114    4     2006032404
    56 NULL     NULL     8     2006032408
    57 
    58 (所影响的行数为 5 行)
    59 结果说明:
    60 仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
    61 --------------------------------------------
    62 3.inner join
    63 sql语句如下: 
    64 select * from A
    65 innerjoin B 
    66 on A.aID = B.bID
    67 
    68 结果如下:
    69 aID     aNum     bID     bName
    70 1     a20050111    1     2006032401
    71 2     a20050112    2     2006032402
    72 3     a20050113    3     2006032403
    73 4     a20050114    4     2006032404
    74 
    75 结果说明:
    76 很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
    77 --------------------------------------------
    78 注: 
    79 LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。 
    80 
    81 语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2 
    82 
    83 说明:table1, table2参数用于指定要将记录组合的表的名称。
    84 field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。
    85 compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。
    86 如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误. 
    87 
    88  
    89 
    90 
    91  
  • 相关阅读:
    Java 简单算法--打印乘法口诀(只使用一次循环)
    Java简单算法--求100以内素数
    ubuntu 16.04 chrome flash player 过期
    java 网络API访问 web 站点
    java scoket (UDP通信模型)简易聊天室
    leetcode1105 Filling Bookcase Shelves
    leetcode1140 Stone Game II
    leetcode1186 Maximum Subarray Sum with One Deletion
    leetcode31 Next Permutation
    leetcode834 Sum of Distances in Tree
  • 原文地址:https://www.cnblogs.com/summers/p/3054891.html
Copyright © 2011-2022 走看看