外连接说明
外连接
外连接分为三种:左外连接、右外连接、完全外连
1、 左外连接 (left join - on)(如果左侧的表完全显示我们就说是左外连接)
基本语法:
select 列名1,列名2,.. from 表1 left join 表2 on 条件;
或者
select列名1,列名2,.. from 表1,表2 where 条件1=条件2(+);
2、 右外连接 (right join - on)(如果右侧的表完全显示我们就说是右外连接)
基本语法:
select 列名1,列名2,.. from 表1 right join 表2 on 条件;
或者
select列名1,列名2,.. from 表1,表2 where 条件1(+)=条件2;
3、完全外连 (full outer join - on)(完全显示两个表,没有匹配的记录置为空)
基本语法:
select 列名1,列2,.. from 表1 full outer join 表2 on 条件;
创建两张表做测试使用stu/exam表
create table stu (id number,name varchar2(32));
insert into stu values(1,'jack');
insert into stu values(2,'tom');
insert into stu values(3,'kity');
insert into stu values(4,'nono');
create table exam (id number,grade number);
insert into exam values(1,56);
insert into exam values(2,76);
insert into exam values(11,8);
外连接
1、内连接案例(显示两表ID匹配的)
基本语法:select 字段1,字段2... 表名1 inner join 表名2 on 条件;
2、左连接(显示所有人的成绩,如果没有成绩,也要显示该人的姓名和id号,成绩显示为空)
SQL>select s.id,s.name,e.grade from stu s left join exam e on s.id=e.id;
SQL>select s.id,s.name,e.grade from stu s,exam e where s.id=e.id(+);
3、右外连接(显示所有成绩,如果没有名字匹配,显示空)
SQL>select s.id,s.name,e.grade from stu s right join exam e on s.id=e.id;
SQL>select s.id,s.name,e.grade from stu s,exam e where s.id(+)=e.id;
小结:实际上左外连接和右外连接是可以互为转换的。
4、完全外连接(显示所有成绩和所有人的名字,如果没有相应的匹配值,则显示空)
SQL>select s.id,s.name,e.grade from stu s full outer join exam e on s.id=e.id;