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 多表连接查询的主要内容,如果未能解决你的问题,请参考以下文章

oracle 多表连接查询

oracle多表查询-自连接

Oracle 多表查询

oracle多表查询之内连接,外连接语句总结

oracle 多表连接查询

Oracle(sql)文盲大扫除思维导图系列——多表连接查询子查询