orcale 多表查询

多表查询;

什么是多表查询?

笛卡尔积,
例子:
select * from emp,dept

消除笛卡尔积:
例子:
select * from emp,dept 
   where emp.deptno=dept.deptno
注意:这只是显示上的删除,

多表查询性能差,前提,数据量大;

别名 便于查询。

多表查询模版:

确定所需要的额数据表;
确定表的关联字段。

例子:查询自己的工资和经理的工资放在同一行;
select e1.empno,e1.ename,e1.mgr,e2.empno,e2.ename from emp e1,emp e2 where e1.mgr=e2.empno


例子 查询每个雇员的编号,姓名,基本工资,职位 领导的姓名,部门,部门名称,位置
select  e.empno,e.ename,e.sal,e.job,m.ename,d.dname,d.loc
 from emp e,emp m,dept d
WHERE e.mgr=m.empno and e.deptno=d.deptno


例题 :
查询出每一个雇员的编号,姓名,工资,部门名称,
工资所在的公司的工资等级


分析:  一 需要的数据表 emp dept salgrade
二 关联字段 emp.deptno=detp.detpno 
emp.sal<salgrade.hisal and emp.sal >salgrade.lowsal

左右连接;
(+)在等号的右边,表示左连接;
(+)放的等号的左边,表示右连接;
注意:无需刻意去记忆。
 这种符号是Oracle独有的。


sql :1991语法:
产生笛卡尔积;
select * from emp cross join dept


自然连接:自动找匹配的关键字,消除笛卡尔积。
select * from emp natural join dept


join ...using()子句,用户自己指定一个可以消除笛卡尔积的关联字字段join...on() 用户自己定义一个可以消除笛卡尔积的关联条件。

连接方向的改变:

左连接 LEFT OUTER JOIN ...ON
右连接 RIGHT OUTER JOIN ...ON
全连接 full outer jion ...on 表两张表中没有的数据都显示。



















已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页