Oracle数据库之多表查询

版权声明: https://blog.csdn.net/hash_Delhi/article/details/80954642

1 多表查询

1. 1 什么是笛卡尔积现象

笛卡尔积现象

1 . 1. 1 范例:查询员工表和部门表

 select *from emp;
 select *from dept;
 select *from emp,dept;

员工表和部门表联合查询

  • 当员工表单独查询时是14条数据,部门表单独查询时是4条数据,联合查询时有56条数据,刚好是员工表数据记录数和部门表数据记录数的乘积,这种现象称其为笛卡尔积现象.
  • 如果多张表进行一起查询而且每张表的数据很大的话笛卡尔积就会变得非常大,对性能造成影响,想要去掉笛卡尔积我们需要关联查询。
  • 在两张表中我们发现有一个共同的字段是 depno, depno 就是两张表的关联的字段,我们可以使用这个字段来做限制条件,两张表的关联查询字段一般是其中一张表的主键,另一张表的外键 .
 select *from emp,dept where emp.deptno =dept.deptno;

这里写图片描述
- 关联之后我们发现数据条数是 14 条,不在是 56 条。
多表查询我们可以为每一张表起一个别名
这里写图片描述

1. 1. 2 范例:查询出雇员的编号,姓名,部门的编号和名称,地址

 --范例:查询出雇员的编号,姓名,部门的编号和名称,地址
 select e.empno ,e.ename ,d.deptno ,d.dname ,d.loc  from emp e ,dept d where e.deptno=d.deptno;

这里写图片描述

1. 1. 3 范例:查询出每个员工的上级领导

  • 分析:分析: emp 表中的 mgr 字段是当前雇员的上级领导的编号,所以该字段对 emp 表产生了自身关
    联,可以使用 mgr 字段和 empno 来关联
 -- 查询出每个员工的上级领导(emp中的mgr是上级领导的编号)
 select e1.empno, e1.ename as 雇员,e2.empno, e2.ename as 上级领导 from emp e1 ,emp e2 where e1.mgr = e2.empno;

这里写图片描述

1. 1. 4 范例:在上一个例子的基础上查询该员工的部门名称

  • 分析:在上一个范例的基础上再加一个表的关联,使用deptno来做关联字段.
 -- 范例:在上一个例子的基础上查询该员工的部门名称
 select e1.empno ,e1.ename ,e2.empno ,e2.ename ,d.dname from emp e1,emp e2 ,dept d where e1.mgr=e2.empno and e1.deptno=d.deptno;

这里写图片描述
- 结果分析:只有13条数据的原因是因为员工表中KING没有领导

猜你喜欢

转载自blog.csdn.net/hash_Delhi/article/details/80954642