oracle-关联查询(外连接,内连接,自连接)

--连接查询
create table boys(
       id varchar2(20),
       name varchar2(20),
       gf_id varchar2(20)
);
create table girls(
       id varchar2(20),
       name varchar2(20),
       salary number,
       type char
);
create table family(
       name varchar2(20),
       mother varchar2(20),
       father varchar2(20)
);
insert into family values ('fzq', 'flc', 'zjq');
insert into family values ('flc', 'few', 'wsb');
insert into family values ('zjq', 'zxy', 'td');
insert into boys values ('b_1', 'lzw', 'g_1');
insert into boys values ('b_2', 'fzq', 'g_2');
insert into boys values ('b_3', 'fkw', 'g_3');
insert into girls values ('g_1', '张雨绮', '10000', '1');
insert into girls values ('g_2', '迪丽热巴', '30000', '1');
insert into girls values ('g_4', '心乱如麻', '20000', '0');
insert into girls values ('g_5', '沉鱼落雁', '5000', '0');
insert into girls values ('g_6', '闭月羞花', '3000', '0');
--普通关联查询
--两边的连接表都连接上的数据才展现出来
select a.*, b.* from boys a, girls b where a.gf_id = b.id;
--除了两边的连接表都连接上的数据,没有(+)的表为主表,即使它对应的数据在从表不存在,主表数据也可以展示出来,不过对应的从表的数据是null
--很明显没法把两边没有满足条件的数据全部展示出来
select a.*, b.* from boys a, girls b where a.gf_id = b.id(+);
select a.*, b.* from boys a, girls b where a.gf_id(+) = b.id;
--内连接
--(关联查询另一种展示形式),也是可以加(+)来实现不同的效果,和普通的关联查询一样
select a.*, b.* from boys a join girls b on a.gf_id = b.id;
--外连接
--左外连接,左侧表为主表
select a.*, b.* from boys a left outer join girls b on a.gf_id = b.id;
--右外连接,右侧表为主表
select a.*, b.* from boys a right outer join girls b on a.gf_id = b.id;
--全外连接,特殊效果,所有数据都展示出来boys3条,girls3条,两条匹配,可能全外就是4条了
select a.*, b.* from boys a full outer join girls b on a.gf_id = b.id;
--自连接
--也是可以加(+)来实现不同的效果,和普通的关联查询一样
select a.*, b.* from family a, family b where a.mother = b.name; 

猜你喜欢

转载自blog.csdn.net/blossomfzq/article/details/82892891
今日推荐