--建立一個user信息表
create table user_info(
id number(2) primary key,
name varchar2(10) unique
);
--插入數據
insert into user_info(id,name)values(1,'曹操');
insert into user_info(id,name)values(2,'劉備');
insert into user_info(id,name)values(3,'周瑜');
insert into user_info(id,name)values(4,'關羽');
insert into user_info(id,name)values(5,'張飛');
insert into user_info(id,name)values(6,'趙雲');
select * from user_info;
--建立地址表
create table address(
id number(2) primary key,
user_id number(2),
info varchar2(16)
);
--添加數據
insert into address(id,user_id,info)values(1,1,'河北唐山');
insert into address(id,user_id,info)values(2,2,'北京海淀');
insert into address(id,user_id,info)values(3,1,'河北邯鄲');
insert into address(id,user_id,info)values(4,2,'河北保定');
insert into address(id,user_id,info)values(5,3,'河南鄭州');
insert into address(id,user_id,info)values(6,5,'山西太原');
insert into address(id,user_id,info)values(7,4,'安徽合肥');
insert into address(id,user_id,info)values(8,2,'山東青島');
insert into address(id,user_id,info)values(9,9,'山東青島');
select * from address;
commit;
--隱式左/右外連接,outer能夠不寫
select u.*,a.* from user_info u left join address a on u.id=a.user_id;
select u.*,a.* from user_info u right join address a on u.id=a.user_id order by a.id;
--顯式左/右外連接
select u.*,a.* from user_info u left outer join address a on u.id = a.user_id;
select u.*,a.* from user_info u right outer join address a on u.id = a.user_id;
--隱式內鏈接,inner能夠省略,將on改成where
select u.*,a.* from user_info u,address a where u.id=a.user_id;
--顯式內鏈接,不分左右,不帶left或right,只顯示重合的數據,也就是取交集
select u.*,a.* from user_info u inner join address a on u.id=a.user_id;
--外連接的其餘寫法,+號和完整表位置相反
select u.*,a.* from user_info u,address a where u.id=a.user_id(+);--左外連接,+號在=號右面
select u.*,a.* from user_info u,address a where u.id(+)=a.user_id;--右外連接,+號在=號左面
--全鏈接,顯示兩個表中全部信息
select u.*,a.* from user_info u full join address a on u.id = a.user_id;
--交叉鏈接,取笛卡爾積
select u.*,a.* from user_info u cross join address a;
select u.*,a.* from user_info u, address a;