网站已经改版为Wordpress版本,这里是旧版本的快照,请不要在页面中留言.

[专版] Oracle数据库<五> 复杂查询


  在本章节中将会介绍常用的复杂查询操作,例如内连接、外连接(左外连接,右外连接),并且对于每一种操作都给出了多种方法进行实现。

·内连接

方法①:

格式

select * from  表1 inner join 表2 on 表1.外键=表2.主键

示例

--查询雇员编号,雇员名称,部门名称
select a.empno,a.ename,b.dname from emp a inner join dept b on a.deptno=b.deptno

方法②:

格式

select * from 表1,表2 where 表1.外键=表2.主键


示例

--查询雇员编号,雇员名称,部门名称
select a.empno,a.ename,b.dname from emp a,dept b where a.deptno=b.deptno

select empno,ename,dname,dept.deptno from emp,dept where emp.deptno=dept.deptno


多张表的情况(3张表及以上):

select * from  表1,表2,表3 where 表1.外键=表2.主键 and 表2.外键=表3.主键

·外连接(左外连接,右外连接)

左外链接

方法①:

格式

select * from 表1 left join 表2 on 表1.外键=表2.主键

示例

--列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门
select * from dept b left join emp a on a.deptno=b.deptno


方法②:

格式

select * from  表1,表2 where 表1.外键=表2.主键(+)

示例

--列出部门名称和这些部门的雇员,同时列出那些没有部门的雇员
select * from emp a,dept b where a.deptno=b.deptno(+)

·右外链接

方法①:

格式

select * from 表1 right join 表2 on 表1.外键=表2.主键

示例

--列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门
select * from emp a right join dept b on a.deptno=b.deptno


方法②:

格式

select * from 表1,表2 where 表1.外键(+)=表2.主键

示例

--列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门
select * from emp a,dept b where a.deptno(+)=b.deptno


子查询(同样用于多表查询,可以用于查询内容,也可以用于查询条件)

用于查询内容

--查询所有雇员的名称,以及他的上级名称
select empno,ename,mgr,(select ename from emp b where a.mgr=b.empno) from emp a


--列出所有雇员的姓名、部门名称和薪金
select a.ename,a.sal,(select dname from dept b where a.deptno=b.deptno) from emp a


用于查询条件

--列出薪金(工资)比'SMITH'多的所有雇员信息
select * from emp where sal>
(select sal from emp where ename='SCOTT')


--列出薪金高于公司平均水平的所有雇员信息
select * from emp where sal>(select avg(sal) from emp)


  • 标签:
  • 数据库复杂查询
  • Oracle数据库
网站已经改版为Wordpress版本,这里是旧版本的快照,请不要在页面中留言.