笛卡尔积+表的连接操作+案例

笛卡尔积

含义:用第一张表的每一行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(+);  //左外连接


 

 

 

 

 

 

 

 

 

 

 

 

 

全部评论

相关推荐

想去夏威夷的小哥哥在度假:5和6才是重点
点赞 评论 收藏
分享
ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
昨天 22:34
已编辑
重庆邮电大学 Java
快手 客户端开发 (n+5)k*16 公积金12
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务