1,简介, Left Join = LEFT OUTER JOIN,right join = RIGHT OUT JOIN , full join = FULLOUTER JOIN简单地来说,这组SQL适用于A,B关联查询时,相匹配的关联字段在两表中不能完全匹配时,可以避免少统计主表记录。2,示例,建一个物料基表 p, 建一个物料使用的表 s ,在s中一般只记录物料的pid,为在报表显示物料名称,需双表联查,但因物料表中可能某些记录被删除,但该物料有使用记录,则在使用双表联查时,p中不存在物料无法显示,如不考虑使用Vector查询的方式(即将所有物料pid和名称pname均加载至内存,报表显示逐行index查询),此种情况下使用leftjoin也可以很简单处理这种情况:create table p ( sysid serial, pidvarchar(20)primarykey, pnamevarchar(50))
insert into p (pid, pname) values('P001', '不锈钢F201'),('P002', '不锈钢F202'),('P004', '不锈钢F202') ;
create table s (sysid serial,thedate varchar(10),pid varchar(20),thequantity integer)
insert into s (thedate,pid,thequantity)values('2012/08/01', 'P001', 100),('2012/08/02', 'P002', 200),('2012/08/03', 'P003', 300) ;
准备工作完成,使用left join, right join , full join 查询select s.thedate,s.pid,p.pname,s.thequantity from sLEFT JOIN p on s.pid = p.pid;结果:2012/08/01 P001 不锈钢SF201 202012/08/03 P003 null 402012/08/04 P004 不锈钢SF204 50
select s.thedate,s.pid,p.pname,s.thequantity from sRIGHT JOIN p on s.pid = p.pid;结果:2012/08/01 P001 不锈钢SF201 202012/08/04 P004 不锈钢SF204 50null null 不锈钢SF202null
select s.thedate,s.pid,p.pname,s.thequantity from sFULL JOIN p on s.pid = p.pid;结果:2012/08/01 P001 不锈钢SF201 202012/08/03 P003 null 402012/08/04 P004 不锈钢SF204 50null null 不锈钢SF202null
