左连接、右连接和内链接(自然连接)
左连接、右连接和内链接(自然连接)
前两天面试时被问到数据库左连接,原题是:A、B表中各有4条数据,A表左连接B表时会显示多少条数据?当时易做图的说了句:16条!唉~悲催的。。。一下子提现了自己在数据库方面的弱项,回来之后补习了一下,在此记录一下个人学习之后的总结:
1、左连接
左连接基本格式为A left join B on A.key=B.key,比如以下语句:
select * from A left join B on A.id=B.id;
如果A、B表的数据结构为:
A: B:
id, name
id, name
1, xiaolu
1, xiaolu
2, yaoyao
3, yaoyao
,这时执行上述语句会得出如下结果:
A.id
A.name
B.id
B.name
1
Xiaolu
1
Xiaolu
2
yaoyao
null
null
由上述结果可以看出,左连接是以左表为坐标,首先将A表中所有的数据列出来,然后根据on的匹配条件查出B表中的数据并将数据列在A表数据后面,如果在B表中没有与A表中匹配的数据,则显示为null,查询出的总数据数为A表中的数据条目个数。
2、右连接
右连接基本格式为A right join B on A.key=B.key,比如以下语句:
select * from A right join B on A.id=B.id;
如果A、B表的数据结构为:
A: B:
id, name
id, name
1, xiaolu
1, xiaolu
2, yaoyao
3, yaoyao
,这时执行上述语句会得出如下结果:
B.id
B.name
A.id
A.name
1
xiaolu
1
xiaolu
null
null
3
yaoyao
由上述结果可以看出,左连接是以左表为坐标,首先将B表中所有的数据列出来,然后根据on的匹配条件查出A表中的数据并将A表的数据列在B表的前面,如果在A表中没有与B表中匹配的数据,则显示为null,查询出的总数据数为B表中的数据条目个数。
3、内链接
内连接基本格式为A inner join B on A.key=B.key,比如以下语句:
select * from A inner join B on A.id=B.id;
如果A、B表的数据结构为:
A: B:
id, name
id, name
1, xiaolu
1, xiaolu
2, yaoyao
3, yaoyao
,这时执行上述语句会得出如下结果:
A.id
A.name
B.id
B.name
1
xiaolu
1
xiaolu
由上述结果可以看出,内链接是只显示匹配的数据