数据库的内连接和外连接
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]
相关文章推荐
- ORACLE开启/关闭归档模式
- 深入浅出Redis04使用Redis数据库(lists类型)
- MySQL新建用户,授权,删除用户,修改密码
- Android开发(二十四)——数据存储SharePreference、SQLite、File、ContentProvider
- CentOS 6安装Oracle 11gR2数据库
- 生产环境中正确关闭ORACLE数据库
- MyISAM引擎数据库基本配置优化
- MySQL存储过程修改表存储引擎为InnoDB
- SqlServer 数据库邮件
- ORCLE数据库用户、权限、角色管理
- (7.2.9)SQL Server 跨库复制表数据的解决办法
- Windows Azure 系列-- Azure Redis Cache的配置和使用
- Oracle基本命令符
- DOS命令下使用sqlite3 命令中文乱码的解决办法
- 深入理解Spring Redis的使用 (二)、RedisTemplate事务支持、序列化
- Oracle自定义例外
- MongoDB 学习笔记
- 深入浅出Redis03 使用Redis数据库(hashes类型)
- Oracle实例的理解
- 数据库模式的4个范式