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