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  
  • 相关阅读:
    用mapreduce 处理气象数据集
    熟悉常用的HBase操作
    爬虫大作业
    熟悉常用的HDFS操作
    数据结构化与保存
    获取全部校园新闻
    爬取校园新闻首页的新闻的详情,使用正则表达式,函数抽离
    NPOI的excel导出1
    DbHelperSQL帮助类
    C# mvc导出excel
  • 原文地址:https://www.cnblogs.com/summers/p/3054891.html
Copyright © 2011-2022 走看看