【Oracle_SQL】oracle常用连接2升级版
1、a表有一行记录与b表的两行记录匹配
两表的字段名和数据如下:
test_a表 | test_b表 | |||
字段:no,name | 字段:no,name | |||
1,a | 2,c | |||
2,b | 2,d |
left连接:
select a.no,a.name, b.no,b.name from test_a a left join test_b b on a.no = b.no;
a.no | a.name | b.no | b.name | |
left | 2 | b | 2 | c |
2 | b | 2 | d |
right连接:
select a.no,a.name, b.no,b.name from test_a a right join test_b b on a.no = b.no;
a.no | a.name | b.no | b.name | |
right | 2 | b | 2 | d |
2 | b | 2 | c |
inner连接:
select a.no,a.name, b.no,b.name from test_a a inner join test_b b on a.no = b.no;
a.no | a.name | b.no | b.name | |
inner | 2 | b | 2 | d |
2 | b | 2 | c |
full连接:
select a.no,a.name, b.no,b.name from test_a a full join test_b b on a.no = b.no;
a.no | a.name | b.no | b.name | |
full | 2 | b | 2 | c |
2 | b | 2 | d | |
1 | a | full | full |
2、a表有2行记录与b表的2行记录匹配
两表的字段名和数据如下:
test_a表 | test_b表 | |||
字段:no,name | 字段:no,name | |||
1,a | 2,d | |||
2,b | 2,e | |||
2,c |
left连接:
select a.no,a.name, b.no,b.name from test_a a left join test_b b on a.no = b.no;
a.no | a.name | b.no | b.name | |
left | 2 | c | 2 | d |
2 | b | 2 | d | |
2 | c | 2 | e | |
2 | b | 2 | e | |
1 | a | null | null |
right连接:
select a.no,a.name, b.no,b.name from test_a a right join test_b b on a.no = b.no;
a.no | a.name | b.no | b.name | |
right | 2 | b | 2 | e |
2 | b | 2 | d | |
2 | c | 2 | e | |
2 | c | 2 | d |
inner连接:
select a.no,a.name, b.no,b.name from test_a a inner join test_b b on a.no = b.no;
a.no | a.name | b.no | b.name | |
inner | 2 | b | 2 | e |
2 | b | 2 | d | |
2 | c | 2 | e | |
2 | c | 2 | d |
full连接:
select a.no,a.name, b.no,b.name from test_a a full join test_b b on a.no = b.no;
a.no | a.name | b.no | b.name | |
full | 2 | b | 2 | d |
2 | c | 2 | d | |
2 | b | 2 | e | |
2 | c | 2 | e | |
1 | a | null | null |
总结:
基于以上结果的总结-----
先显示匹配后显示不匹配项,除内连接只显示匹配项;
左连接:匹配项顺序按左表的后往前,如右表有多个匹配项,左表匹配项和右表从上往下的一行为一个循环;
右连接:与左连接相反;
全连接:与左连接一样;
内连接:与左连接相反;