举个简单的例子吧,从结果来理解比较具体些。
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表为标准的。
以上就是关于数据库里左连接右连接和全连接的区别全部的内容,包括:数据库里左连接右连接和全连接的区别、什么是数据库左连接和右连接有什么作用、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)