您的位置:首页 > 数据库

数据库的内连接和外连接

2015-07-12 15:46 363 查看

数据库中常常涉及到两个表之间的数据传递,通常使用连接的方法来实现,连接分为内连接、外连接和全连接:

本文使用的表为Oracle 11g自带的表.




1、内连接:
指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件,如上图的 C 区域。要连接的两个表处于同等的地位,它是先算出两个表的笛卡尔积在进行筛选,效率低。

1、在连接条件中使用(=)运算符比较被连接列的列值,其查询结果中列出被连接的表中的所有列,包括其中的重复列。
例:select * from emp, dept where emp.deptno = dept.deptno;




查到14条数据,而 select * from emp, dept;会查出64条数据,因为emp表中有16条数据,dept表中有4条数据。
2、使用[inner] join on 语句进行连接: 子表 join 主表 on 条件 (子表放左边,主表放右边)
例:select * from emp e join dept d on e.deptno = d.deptno;
同样得到上边那14条数据,但是这种格式效率不高,将主表加到子表上效率高些。
select * from dept d join emp e on e.deptno = d.deptno;
scott 在哪里上班

select e.ename, d.loc from emp e join dept d on e.ename = 'SCOTT' and e.deptno = d.deptno; --在筛选时过滤,效率更高;

2、外连接:
返回在查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接或左连接)、右表(右外连接或右连接)或两个连接表(全外连接)中的所有数据行。

1、含有(+)的形式,在从表后加(+)
[b]--查询没有人的部门

[/b]
select * from emp e, dept d where d.deptno = e.deptno(+) [b]and e.empno is NULL
; --左外连接[/b]
select d.* from emp e, dept d where e.deptno(+) = d.deptno and e.empno is NULL ; --右外连接

2、使用 left(right)...join...on
--查询没有人的部门

select d.* from dept d left join emp e on e.deptno = d.deptno where e.empno is NULL ;[b]--左外连接
[/b]
select d.* from emp e right join dept d on e.deptno = d.deptno where e.empno is NULL ;[b]--右外连接[/b]




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: