jiake0504 发表于 2013-2-4 19:50:09

join、left join、right join、left outer join 小结

通俗的讲: A   left    join   B   的连接的记录数与A表的记录数同 A   right   join   B   的连接的记录数与B表的记录数同   A   left    join   B   等价B   right   join   A    table   A: Field_K,   Field_A 1                     a 3                     b 4                     c   table   B: Field_K,   Field_B 1                     x 2                     y 4                     z    select   a.Field_K,   a.Field_A,   b.Field_K,   b.Field_B   from   a   left   join   b   on   a.Field_K=b.Field_K   Field_K         Field_A         Field_K         Field_B         ----------   ----------   ----------   ----------   1                     a                     1                     x                     3                     b                     NULL               NULL   4                     c                     4                     z                     select   a.Field_K,   a.Field_A,   b.Field_K,   b.Field_B   from   a   right   join   b   on   a.Field_K=b.Field_K   Field_K         Field_A         Field_K         Field_B         ----------   ----------   ----------   ----------   1                     a                     1                     x                     NULL               NULL               2                     y                     4                     c                     4                     z       --举个例子:   假设a表和b表的数据是这样的。   表a                        id       name   1          a 2          b            3          c 表b              id       stock 1         15 2         50   select   *   from   a   inner   join   b   on   a.id=b.id   这个语法是连接查询中的内连接,它产生的结果是   两个表相匹配的记录出现在结果列表中。   根据上面的表,出现的结果是这样的   a.id   name   b.id   stock   1     a             1         15   2             b             2         50   ----------------------------   select   *   from   a,b   where   a.id=b.id   这个语法是内连接的另外一种写法,其执行结果与inner   join   一样   --------------------------------       select   *   from   a   left/right   join   b   on   a.id=b.id   这个是外连接语法中的左外连接或右外连接   如果是左外连接的话,它将显示a表的所有记录,   select   a.*,b.*   from   a   left   join   b   on   a.id=b.id   查询的结果是这样的:   a.id   name   b.id   stock   1         a         1             15   2               b         2             50   3               c       null         null    --------------------------------------------   如果是右外连接的话,它将显示b表的所有记录,   select   a.*,b.*   from   a   right   join   b   on   a.id=b.id   查询的结果是这样的:   a.id   name   b.id   stock   1         a         1             15   2               b         2             50-- select   a.*,b.*   from   a   left   join   b   on   a.k   =   b.k   select   a.*,b.*   from   a   left   outer   join   b   on   a.k   =b.k   ----------上面两种一样left   join是left   outer   join的简写   select   a.*,b.*   from   a   left   inner   join   b   on   a.k   =   b.k   没有这种写法,错误的语句.-- 在你要使用多个left   join的时候   比如说10个   我们把10个全都写成left   join的形式   然后再SQL让他自动运行一下,它会把最后一次出现的left   join变成left   outer   join   所以依此推理,最后一个left   join会以left   outer   join的形式存在   当然,不管变不变对结果的显示没有任何影响   希望我的实验能对你有所帮助
页: [1]
查看完整版本: join、left join、right join、left outer join 小结