SQL中left join, right join有什么区别?

来源:互联网 发布:明朝朝鲜知乎 编辑:程序博客网 时间:2024/05/18 15:03

left join是以左表为准的.
左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
PS:right join表理解相同
官方的解释下:
inner join(等值连接):只返回两个表中联结字段相等的行;
left join(左联接):返回包括左表中的所有记录和右表中联结字段相等的记录;
right join(右联接):返回包括右表中的所有记录和左表中联结字段相等的记录。
比如我们有xs、cj两个表
xs表                                 cj表
---------------                  ----------------------
id     name                     id      score
1      张三                      1       96
2      李四                      2       80
                                    3       86
 
Sql代码
SELECT * FROM `xs` INNER JOIN `cj` ON xs.id = cj.id    
SELECT * FROM `xs` INNER JOIN `cj` ON xs.id = cj.id 
返回
------------------------
id   name   id   score
1   张三   1   96
2   李四   2   80
-----------------------
 
Sql代码
SELECT * FROM `xs` LEFT JOIN `cj` ON xs.id = cj.id   
SELECT * FROM `xs` LEFT JOIN `cj` ON xs.id = cj.id 
返回
------------------------
id   name   id   score
1   张三   1   96
2   李四   2   80
-----------------------
 
Sql代码
SELECT * FROM `xs` RIGHT JOIN `cj` ON xs.id = cj.id   
SELECT * FROM `xs` RIGHT JOIN `cj` ON xs.id = cj.id 
 
返回
id       name    id    score
1       张三      1      96
2       李四      2      80
NULL    NULL  3      86
追问:
left,right 代码输入完成之后结果没有什么不同么?我看你这三个代码输入之后表格结果都是一样的。从表格中看不代码之间的区别?
回答:
你看这个,上面首先说了,如果左表有多余的项的化右表就会用NULL表示
表A记录如下:
aID     aNum
1     a20050111
2     a20050112
3     a20050113
4     a20050114
5     a20050115

表B记录如下:
bID     bName
1     2006032401
2     2006032402
3     2006032403
4     2006032404
8     2006032408

--------------------------------------------

1.left join
sql语句如下:
select * from A
left join B
on A.aID = B.bID

结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
5     a20050115    NULL     NULL
right 的结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
NULL     NULL     8     2006032408

0 0