SQL left joinright join和inner join的区别以及where的搭配使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL left joinright join和inner join的区别以及where的搭配使用相关的知识,希望对你有一定的参考价值。

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

举例如下: 
--------------------------------------------
表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

(所影响的行数为 5 行)
结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
--------------------------------------------
2.right join
sql语句如下: 
select * from A
right 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
NULL     NULL     8     2006032408

(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
--------------------------------------------
3.inner join
sql语句如下: 
select * from A
innerjoin 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

结果说明:

很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.

搭配where语句时:


用LEFT JOIN时,

条件直接放ON后面,是先筛选后连接,




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

结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112          NULL     NULL
3     a20050113          NULL     NULL
4     a20050114          NULL     NULL
5     a20050115    NULL     NULL


条件放WHERE后面,是先连接后筛选,


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

where B.bID=1

结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401

其他连接查询同理






以上是关于SQL left joinright join和inner join的区别以及where的搭配使用的主要内容,如果未能解决你的问题,请参考以下文章

sql之left joinright joininner join的区别

sql之left joinright joininner join的区别

sql中left joinright join与inner join的区别

SQL left joinright join和inner join的区别以及where的搭配使用

sql之left joinright joininner join的区别

sql之left joinright joininner join的区别