sql之left join、right join、inner join full join,union,union all的差异

sql之left join、right join、inner join full join,union,union all的区别left join(左联接) 返回包括左表

sql之left join、right join、inner join full join,union,union all的区别
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
full join 返回两张表中的行 left join+right join
UNION在进行表链接后会筛选掉重复的记录
UNION ALL操作只是简单的将两个结果合并后就返回

create table test(
sid number primary key not null,
sname varchar2(200),
scode varchar2(200)
);
commit;

create table test_bak(
sid number primary key not null,
sname varchar2(200),
scode varchar2(200)
);
commit;

BEGIN
  FOR I IN 1 .. 4 LOOP
    INSERT INTO test VALUES (I,'jason','1000'+i);
  END LOOP;
END;

BEGIN
  FOR I IN 3 .. 5 LOOP
    INSERT INTO test_bak VALUES (I,'jason','1000'+i);
  END LOOP;
END;

select * from test;
sid sname scode
11jason1001
22jason1002
33jason1003
44jason1004
select * from test_bak;
sid sname scode
13jason1003
24jason1004
35jason1005
select * from test union    select * from test_bak;--UNION在进行表链接后会筛选掉重复的记录
sid sname scode
11jason1001
22jason1002
33jason1003
44jason1004
55jason1005

select * from test union  all  select * from test_bak;--UNION ALL操作只是简单的将两个结果合并后就返回
sid sname scode
11jason1001
22jason1002
33jason1003
44jason1004
53jason1003
64jason1004
75jason1005

select test.*,test_bak.* from test  inner join test_bak on test.sid = test_bak.sid  ;--只返回两个表中联结字段相等的行
13jason10033jason1003
24jason10044jason1004

select test.*,test_bak.* from test left join test_bak on test.sid = test_bak.sid  ;--返回包括左表中的所有记录和右表中联结字段相等的记录
11jason1001null null null
22jason1002null null null
33jason10033jason1003
44jason10044jason1004

select test.*,test_bak.* from test right join test_bak on test.sid = test_bak.sid  ;--返回包括右表中的所有记录和左表中联结字段相等的记录

13jason10033jason1003
24jason10044jason1004
3null null null 5jason1005

select test.*,test_bak.* from test full join test_bak on test.sid = test_bak.sid  ;--返回左右两表中的所有记录,相同的记录会同行显示

11jason1001null null null
22jason1002null null null
33jason10033jason1003
44jason10044jason1004
5null null null 5jason1005