数据库里左连接右连接和全连接的区别

数据库里左连接右连接和全连接的区别,第1张

举个简单的例子吧,从结果来理解比较具体些。

a表

name sex

张三 男

李四

b表

name age

李四 30

王五 23

1\全外连接

select aname,asex,bname,bage

from a full outer join b on aname=bname

结果如下,

name sex name age

张三 男 NULL NULL

李四 女 李四 30

NULL NULL 王五 23

关联字段name,左表有而右表没有的,如张三,bname,bage都为NULL,加上左右两边都有的就是左连接的结果;而右表有而左表表没有的,如王五,aname,asex都为NULL,加上左右两边都有的就是右连接的结果;左右两边都有的如,李四,这就是内连接。相见如下

2\左

select aname,asex,bname,bage

from a left outer join b on aname=bname

结果如下

name sex name age

张三 男 NULL NULL

李四 女 李四 30

2\右

select aname,asex,bname,bage

from a right outer join b on aname=bname

结果如下

name sex name age

李四 女 李四 30

NULL NULL 王五 23

3\内联

select aname,asex,bname,bage

from a inner join b on aname=bname

结果如下

name sex name age

李四 女 李四 30

4\交叉

select aname,asex,bname,bage

from a cross join b on aname=bname

结果如下

name sex name age

张三 男 李四 30

李四 女 王五 23

张三 男 王五 23

李四 女 李四 30 望采纳

INNER JOIN 产生的结果是AB的交集

SELECT FROM TableA INNER JOIN TableB ON TableAname = TableBname

2LEFT [OUTER] JOIN 产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。

SELECT FROM TableA LEFT OUTER JOIN TableB ON TableAname = TableBname

3RIGHT [OUTER] JOIN 产生表B的完全集,而A表中匹配的则有值,没有匹配的则以null值取代。

SELECT FROM TableA RIGHT OUTER JOIN TableB ON TableAname = TableBname

图标如left join类似。

4FULL [OUTER] JOIN 产生A和B的并集。对于没有匹配的记录,则会以null做为值。

SELECT FROM TableA FULL OUTER JOIN TableB ON TableAname = TableBname

你可以通过is NULL将没有匹配的值找出来:

SELECT FROM TableA FULL OUTER JOIN TableB ON TableAname = TableBname

WHERE TableAid IS null OR TableBid IS null

5 CROSS JOIN 把表A和表B的数据进行一个NM的组合,即笛卡尔积。如本例会产生44=16条记录,在开发过程中我们肯定是要过滤数据,所以这种很少用。

SELECT FROM TableA CROSS JOIN TableB

相信大家对inner join、outer join和cross join的区别一目了然了。

假设a表有两个字段,Aid、name, b 表也有两字段 Bid,nameid

其中 nameid是Aid在b 表中的外键。

a表有数据如下:

Aid name

1 a

2 b

3 c

b表有数据如下:

Bid nameid

1 1

2 1

3 1

4 2

5 2

用左连接,就是以左边那个表为标准,左边那表(表a)的所有记录必须得全部出现,例如:

select from a left join b on aAid=bnameid

结果应应该为:

Aid name Bid nameid

1 a 1 1

1 a 2 1

1 a 3 1

2 b 4 2

2 b 5 2

3 c NULL NULL

表a 的 Aid为1的出现了三次,Aid为2的出现了两次,Aid为3的出现了一次,全部都出现了。但因为在表b中没有以Aid为3对应的记录,所以用null来填充。

同样道理,用右连接,就是以右边那个表为标准,

例如:select from a right join b on aAid=bnameid

结果应该为:

Aid name Bid nameid

1 a 1 1

1 a 2 1

1 a 3 1

2 b 4 2

2 b 5 2

表b的记录必须全部出现,但没有出现 a表中Aid为3的记录,是因为b表中没有以之对应的记录,而且此时是以b表为标准的。

以上就是关于数据库里左连接右连接和全连接的区别全部的内容,包括:数据库里左连接右连接和全连接的区别、什么是数据库左连接和右连接有什么作用、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9367157.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存