1.栏位合并
left join、right join、inner join、full join
left join(左联接): 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接): 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接): 只返回两个表中联结字段相等的行
FULL JOIN :关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。
例子一:人员表和订单表的关联
create table Persons(
Id_P varchar2(10),
LastName varchar2(20),
FirstName varchar2(20),
Address varchar2(50),
City varchar2(50)) ;
create table Orders(
Id_O varchar2(10),
OrderNo varchar2(10),
Id_P varchar2(10));
select * from Persons for update;
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
select * from Orders for update;
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65
--left join 返回左Persons表中的所有记录和右表orders中联结字段相等的记录连接
select a.*,b.* from Persons a
left join orders b on a.id_p=b.id_p;
--inner join 返回两个表中联结字段相等的行
select a.*,b.* from Persons a
inner join orders b on a.id_p=b.id_p;
--等价于
select a.*,b.* from Persons a,orders b where a.id_p=b.id_p;
--right join 返回包括右表orders中的所有记录和左表Persons中联结字段相等的记录
select a.*,b.* from Persons a
right join orders b on a.id_p=b.id_p;
---full join 如果 "Persons" 中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配,这些行同样会列出。
--也就是当两个表ID相同时合并为一笔,ID不同时,也同样显示。
select a.*,b.* from Persons a
full join orders b on a.id_p=b.id_p;
--join等价于inner join
select a.*,b.* from Persons a
join orders b on a.id_p=b.id_p;
例子二;稽核与影像数据匹配的统计结果
select * from (
select data_month,count(deal_state) 完全匹配 from
source_image_data_list
where deal_state=1
group by data_month) a
join
(
select data_month,count(deal_state) 部分匹配 from
source_image_data_list
where deal_state=2
group by data_month)b
on a.data_month=b.data_month
order by a.data_month;