码迷,mamicode.com
首页 > 数据库 > 详细

oracle 多表连接查询

时间:2018-12-19 20:54:52      阅读:319      评论:0      收藏:0      [点我收藏+]

标签:enter   条件   outer   ora   nbsp   忽略   表数据   image   方案   

多表查询

 

一、笛卡尔积(了解)

-- 查询员工表中 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 多表连接查询

标签:enter   条件   outer   ora   nbsp   忽略   表数据   image   方案   

原文地址:https://www.cnblogs.com/whc0305/p/10145445.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!