SQL中,表之间的左联和右联是什么意思? 最好能用实例解释一下!

2026年09月20日 15:02
有2个网友回答
网友(1):

--关于连接的简单示例
--测试数据
declare
@a
table(ida
int)
insert
@a
select
1
union
all
select
2
declare
@b
table(idb
int)
insert
@b
select
2
union
all
select
3
--内连接
select
*
from
@a
a
join
@b
b
on
a.ida=b.idb
/*--测试结果
只返回两个表中ida与idb相同的记录
ida
idb
-----------
-----------
2
2
(所影响的行数为
1
行)
--*/
--左连接
select
*
from
@a
a
left
join
@b
b
on
a.ida=b.idb
/*--测试结果
返回@a(左边表)所有的记录,及@b的idb与@a的ida对应的记录
没有对应的就用null表示
ida
idb
-----------
-----------
1
NULL
2
2
(所影响的行数为
2
行)
--*/
--右连接
select
*
from
@a
a
right
join
@b
b
on
a.ida=b.idb
/*--测试结果
返回@b(右边表)所有的记录,及@b的idb与@a的ida对应的记录
没有对应的就用null表示
ida
idb
-----------
-----------
2
2
NULL
3
(所影响的行数为
2
行)
--*/
--全连接
select
*
from
@a
a
full
join
@b
b
on
a.ida=b.idb
/*--测试结果
返回@a与@b的所有记录,没有对应的用NULL表示
ida
idb
-----------
-----------
2
2
NULL
3
1
NULL
(所影响的行数为
3
行)
--*/

网友(2):

例表a
aid
adate
1
a1
2
a2
3
a3
表b
bid
bdate
1
b1
2
b2
4
b4
inner
join
两个表a,b相连接,要取出id相同的字段
select
*
from
a
inner
join
b
on
a.aid
=
b.bid这是仅取出匹配的数据.
此时的取出的是:
1
a1
b1
2
a2
b2
那么left
join
指:
select
*
from
a
left
join
b
on
a.aid
=
b.bid
首先取出a表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1
a1
b1
2
a2
b2
3
a3
空字符
同样的也有right
join
指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1
a1
b1
2
a2
b2
4
空字符
b4