oracle 多表连接查询
Posted whc0305
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 多表连接查询相关的知识,希望对你有一定的参考价值。
多表查询
一、笛卡尔积(了解)
-- 查询员工表中 SMITH 所涉及的部门信息
select * from emp, dept
where emp.ename = ‘SMITH‘;
-- ↑ 执行之后,会出现笛卡尔集
-- 笛卡尔积在下列情况下产生:
-- 1)忽略了一个连接条件或者一个连接条件失效。
-- 2)第一张表的所有行和第二张表的所有行连接,产生交集。
-- 解决方案:
-- 为了避免笛卡尔积的产生,通常包含一个有效连接条件的 where 子句。
-- 查询 ename 是 SMITH 的员工的信息,包括部门信息。
-- 在我们做查询的时候,where 子句,一定要指出两张表一一对应的信息,如果只是单方的话就会出现笛卡尔集。
二、内连接(等值连接)
--1. 简写的内连接查询
select *
from emp, dept
where emp.deptno = dept.deptno
and emp.ename = ‘SMITH‘;
--2. 使用别名,简化一点点
select *
from emp e, dept d
where e.deptno = d.deptno
and e.ename = ‘SMITH‘;
-- 3. 如果只是想展示某些列的数据
-- 员工表展示部分信息,部门表展示全部信息
select e.empno 员工编号, e.ename, e.sal, d.*
from emp e, dept d
where e.deptno = d.deptno
and e.ename = ‘SMITH‘;
--4. 标准的内连接查询(了解)
select e.empno, e.ename, e.sal, d.*
from emp e inner join dept d
on e.deptno = d.deptno
and e.ename = ‘SMITH‘;
三、外连接(外连接)
/*
用于查询一张表在另一张表中没有关联数据的信息
外连接分为三种:
左外连接(LEFT OUTER JOIN)常用的
右外连接(RIGHT OUTER JOIN)
全外连接(FULL OUTER JOIN)
*/
-- 使用左外连接,左边所有数据都要显示,所以 + 在右边,右边符合的数据显示
select *
from emp e,dept d
where e.deptno = d.deptno(+);
-- 使用右外链接,右边所有数据都要显示,所以 + 在左边,左边符合的数据显示
select *
from emp e,dept d
where e.deptno(+) = d.deptno;
-- 左外的标准写法:left outer join
select *
from emp e left outer join dept d
on e.deptno = d.deptno;
-- 右外的标准写法:right outer join
select *
from emp e right outer join dept d
on e.deptno = d.deptno;
-- 全外连接,表数据全部显示,且不会出现笛卡尔积错误
select *
from emp e full outer join dept d
on e.deptno = d.deptno;
四、自连接
只需要查询一个表,但是会重复,反复的用到这张表,便可以使用自连接
--将指定员工的名字和上司的名字都找出来
select e1.empno, e1.ename, e1.mgr, e2.ename
from emp e1, emp e2
where e1.mgr = e2.empno;
and e1.ename = ‘SMITH‘
--将每一名员工的名字和上司的名字都找出来
select e1.empno, e1.ename, e1.mgr, e2.ename
from emp e1, emp e2
where e1.mgr = e2.empno;
以上是关于oracle 多表连接查询的主要内容,如果未能解决你的问题,请参考以下文章