Oracle多表联查总结笔记

1.内链接(查询两表共有的数据)

(以两表为例)
语法:

select 别称1.列名1,…别称2.列名N
from 表1 别称1 inner join 表2.别称2
on 别称1.公共列=别称2.公共列
where 查询语句;

例如:查询员工编号,姓名,部门编号以及部门名称

  • select e.empNo,e.eName,d.deptNo,d.dName from emp e inner join dept d on e.deptNo=d.deptNo;
    显示结果如下:
    Oracle多表联查总结笔记
    还可以这样写(结果与上面的语句一样):select e.empNo,e.eName,d.deptNo,d.dName from emp e,dept d where e.deptNo=d.deptNo;

2.外链接(分为左外链接,右外链接,完全外连接)

(以两表为例)
左外链接语法:

select 别称1.列名1,…别称2.列名N
from 表1 别称1 left outer join 表2 别称2
on 别称1.公共列=别称2.公共列2
where 查询语句;

例如:查询员工编号,员工姓名,部门编号,部门名称

  • select e.empNo,e.eName,d.deptNo,d.dName from emp e left outer join dept d on e.deptNo=d.deptNo;

显示结果如下:
Oracle多表联查总结笔记
显示左边表的全部信息,张飞没有部门则补null值。

另一种写法:select e.empNo,e.eName,d.deptNo,d.dName from emp e,dept d where e.deptNo=d.deptNo(+);

右外链接语法:

select 别称1.列名1,…别称2.列名N
from 表1 别称1 right outer join 表2 别称2
on 别称1.公共列=别称2.公共列2
where 查询语句;

例如:查询员工编号,员工姓名,部门编号,部门名称

  • select e.empNo,e.eName,d.deptNo,d.dName from emp e right outer join dept d on e.deptNo=d.deptNo;

显示结果如下:
Oracle多表联查总结笔记
显示右边表的全部信息,40号部门没有员工则补null值。

另一种写法:select e.empNo,e.eName,d.deptNo,d.dName from emp e,dept d where e.deptNo=d.deptNo;

完全外链接语法:

select 别称1.列名1,…别称2.列名N
from 表1 别称1 full outer join 表2 别称2
on 别称1.公共列=别称2.公共列
where 查询条件;

例如:查询员工编号,员工姓名,部门编号,部门名称

  • select e.empNo,e.eName,d.deptNo,d.dName from emp full outer join dept d on e.deptNo=d.deptNo;

显示结果如下:
Oracle多表联查总结笔记
显示的是两表所有的员工信息,没有部门的员工补null,没有员工的部门补null。

3.自链接

例如:查询员工表显示员工编号,员工姓名,领导编号;

  • select e.empNo,e.eName,e.mgr from emp;

显示结果如下:
Oracle多表联查总结笔记
其中员工与领导都属于emp表,如果要查看每个员工的上级编号以及姓名,则需要使用自链接,语句如下(语法可以采用简单方式,也可以用内链接语法来写):

  • select e.empNo empNo,e.eName empNo,e.mgr mgrNo,m.eName mgrName from emp e,dept d where m.empNo=e.mgr;
    显示结果如下:
    Oracle多表联查总结笔记
    可以依照上面的图检验是否对应正确。

4.不等值链接

举例:

  • select * from salgrade;
    显示结果:

Oracle多表联查总结笔记
查询每个员工的工资等级,显示员工编号,姓名,工资,工资等级:
(可以采用内链接的方式,使用 between and 关键字将薪资等级的划分范围与薪资联立起来)

  • select e.empNo,e.eName,e.sal,g.grade from emp e inner join salgrade g on e.sal between g.losal and g.hisal;

Oracle多表联查总结笔记
5.三表联立查询

举例:
查询显示员工姓名,工资,部门名称,工资等级

  • select e.eName,e.sal,d.dName,g.grade from emp e inner join dept d on e.deptNo=d.deptNo inner join salgrade g on e.sal between g.losal and g.hisal;
    在两表联立的情况下,在联立条件后面使用inner join关键字将第三个表联立,在on关键字后面写联立条件,这样就可以实现三表联立。

显示结果:
Oracle多表联查总结笔记

刚刚接触学习,做了一个简单的总结笔记,很多用语不当的地方望见谅,如果有需要改正的地方希望指点。