笛卡尔积

含义:用第一张表的每一行0与第二张表的每一行进行连接

消除笛卡尔积(等值条件)

(1)确定所需的数据表

(2)确定已知的关联字段


【案例1】查询每个雇员编号、姓名、职位、基本工资、部门名称、部门位置信息

select e.empno,e.ename,e.job,e.sal,

d.dname,d.loc

from emp  e ,dept  d   //这里的e、d是别名

where e.deptno=d.deptno


【案例2】查询出每个雇员编号、姓名、雇佣日期、基本工资、工资等级

select e.empno,e.name,e.hiredate,e.sal,s.grade

from emp e ,salgrade s

where e.sal between s.losal and s.hisal;

【案例3】现要求清楚显示工资等级信息,按如下格式进行替换(这里使用decode函数)

5.E等级工资  4.D等级工资   3.C等级工资  2.B等级工资  1.A等级工资

select  e.empno,e.ename,e.hiredate,e.sal

decode(s.grade,1,'E级工资',2,'D级工资',3,'C级工资',4,'B级工资',5,'A级工资',)

from emp e,salgrade s

where  e.sal between s.losal and s.hisal;


表的连接操作

内连接:等值连接

SQL:1999语法

select 字段列表

from table1 join table 2

on 连接条件

 

【案例4】使用内连接等值连接emp和dept两个表,查询雇员部门为ACCOUNTING的信息

select *

from emp e,dept d

where e.deptno=d.deptno

and d.name='ACCOUNTING';

------------------------------------------------------------------

使用1999语法

select  *

from emp  e  join  dept  d

on   e.deptno  =  d.deptno

where   d.dname = 'ACCOUNTING' ;

------------------------------------------------------------------

自然连接检索多个表时,oracle将第一张表和第二张表中字段名数据类型相同的列进行自动连接,不用指明需要连接的列,使用natural join


外连接
左外连接 left join   | 左关系属性=右关系属性(+)

右外连接 right join |左关系属性(+)=右关系属性

全外连接 full join    |不支持(+)

自连接 :自己连接自己


【案例5】查询出每个雇员的编号、姓名、及上级领导的编号姓名

select e.empno,e.ename,m.empno,m.ename
from emp e,emp m
where e.mgr=m.empno(+);  //左外连接