一、简介:
多表连接查询通过表之间的关联字段,一次查询多表数据。
下面将依次介绍 多表连接中的如下方法:
1、from a,b
2、inner join
3、left outer join
4、right outer join
二、例子:
以下采用oracle的scott用户中的两张表dept和emp举例,
两个表的deptno字段关联。
表结构如下:
(1)、dept(部门表)
![a66a1bbfbe46ed6c30336b27c81b149f.png](https://i-blog.csdnimg.cn/blog_migrate/4eb8c78a5da3e31f9d42b93275eeac69.jpeg)
(2)、emp(雇员表)
![6101d443580942419db0e6791cf3f026.png](https://i-blog.csdnimg.cn/blog_migrate/e342414604a2ffd95babe61d49d03bf5.jpeg)
1、from 表1,表2
语法:select a.x,b.y from a,b where a.id=b.id;
实例:
返回所有满足where条件的行
select a.empno as 员工编号, a.ename as 员工名称, b.dname as 部门 from scott.emp a, scott.dept b where a.deptno = b.deptno;
结果:
![d5820f460a6ac84fb56b0618b0d23eba.png](https://i-blog.csdnimg.cn/blog_migrate/f47bf0f91bbc6097a3c9bce98fe94e60.jpeg)
2、inner join
语法:select a.x from a inner join b on a.id=b.id;
inner 可以省略.
实例:
select a.empno as 员工编号, a.ename as 员工名称, b.dname as 部门 from scott.emp a join scott.dept b on a.deptno = b.deptno ;
结果同上。
3、left outer join
查询结果除了返回包含连接条件的行,还包含左表(a)中不满足连接条件的行,
其中不满足连接条件的行中b表的字段值将被置为空。
语法:select a.x from a inner left outer join b on a.id=b.id;
outer 可以省略.
实例:
select a.empno as 员工编号, a.ename as 员工名称, b.dname as 部门 from scott.emp a left outer join scott.dept b on a.deptno = b.deptno
结果:
![396cc099da492bab5fba61675d9f8fbd.png](https://i-blog.csdnimg.cn/blog_migrate/e9ca51ff1cc0393c99ecb39f04495579.jpeg)
当查询中出现过滤条件时:
1)当连接条件后面有where条件时:
select a.empno as 员工编号, a.ename as 员工名称, b.dname as 部门 from scott.emp a left outer join scott.dept b on a.deptno = b.deptno where b.dname like 'SALES'
解释:先根据连接条件a.deptno = b.deptno查询,再对查询结果按过滤条件查询。
结果:
![53143b70f6ae5d2501921649337f82e4.png](https://i-blog.csdnimg.cn/blog_migrate/8eb4bd0be87292e9e6f354de0b892127.jpeg)
2)当连接条件后面有and条件时:
select a.empno as 员工编号, a.ename as 员工名称, b.dname as 部门 from scott.emp a left outer join scott.dept b on (a.deptno = b.deptno and b.dname like 'SALES')
解释:先对b表按过滤条件查询,再对结果执行左连接查询。
结果:
![8886b085dc6a733fb5205f6d4a5e1275.png](https://i-blog.csdnimg.cn/blog_migrate/eb6363500af36e64872981ce6c62094a.jpeg)
4 、right outer join
查询结果除了返回包含连接条件的行,还包含右表(b)中不满足连接条件的行,
其中不满足连接条件的行中a表的字段值将被置为空。
语法:select a.x from a inner right outer join b on a.id=b.id;
outer 可以省略.
实例和结果略。