首页 > 技术文章 > sql所有连接解释

xiaohaizhuimeng 2017-05-27 17:30 原文

--内连接是左边匹配右边表,有对应的则显示
--左连接是已左边表作为基准匹配右边表,如果右边表没有对应的则为null
--右连接是已右边表作为基准匹配左边表,如果左边表没有对应的则为null
--完全连接是左边表匹配右边表,如果有则显示没有则显示为null
--交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉连接也称作笛卡尔积。

--1)内连接
select a.*,b.* from ATABLE a inner join BTABLE b on a.id=b.parent_id ;


--2)左连接
select a.*,b.* from ATABLE a left join BTABLE b on a.id=b.parent_id;


--3) 右连接
select a.*,b.* from ATABLE a right join BTABLE b on a.id=b.parent_id;


--4)完全连接
select a.*,b.* from ATABLE a full join BTABLE b on a.id=b.parent_id;


--交叉联接
SELECT a.*,b.* FROM ATABLE a CROSS JOIN BTABLE b ;


--自联接
SELECT a.*,b.* FROM ATABLE a,BTABLE b WHERE a.id=b.parent_id;


--2)左外连接
select a.*,b.* from ATABLE a left OUTER join BTABLE b on a.id=b.parent_id;


--3) 右外连接
select a.*,b.* from ATABLE a right OUTER join BTABLE b on a.id=b.parent_id;


--4)完全外连接
select a.*,b.* from ATABLE a full OUTER join BTABLE b on a.id=b.parent_id;


a表 id name

b表 id job parent_id


a.id同parent_id 存在关系

===============================================================================================

SQL脚本:

===============================================================================================
create table ATABLE
(
id VARCHAR2(10),
name VARCHAR2(100)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);


commit;
insert into A (id, name)
values ('1', 'qq');
insert into A (id, name)
values ('2', 'bb');
commit;

===========================================================================


create table BTABLE
(
id VARCHAR2(10),
job VARCHAR2(100),
parent_id VARCHAR2(100)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);

insert into B (id, job, parent_id)
values ('1', '工作一', '1');
insert into B (id, job, parent_id)
values ('2', '工作二', '1');
commit;

 

推荐阅读