oracle-多表查询

范例:使用别名;

select * from emp e,dept d where e.deptno = d.deptno;

oracle-多表查询

范例:要求查询出每个雇员的编号、姓名、职位、工资、部门名称、部分位置

         |- 确定使用的数据表:

  1. emp表:雇员的编号,姓名,职位,工资
  2. dept表:部门名称,部门位置

|- 确立已知的关联条件

  1. 雇员和部门:emp.deptno = dept.deptno;

select empno,ename,job,sal,dname,loc from emp e,dept d where e.deptno = d.deptno;

oracle-多表查询

范例:查询出每个雇员的编号、姓名、工资、职位、雇用日期、工资等级

         |- 确定使用的数据表:

  1. emp表:雇员的编号,姓名,工资,职位,雇佣日期
  2. salgrade表:工资等级

|- 确立已知的关联条件:

         雇员与工资等级:emp.sal between salgrade.losal and salgrade.hisal;

select empno,ename,job,sal,hiredate,grade from emp e,salgrade s where e.sal between s.losal and s.hisal;

oracle-多表查询

范例:查询每一个雇员的编号、姓名、职位、雇用日期、工资、工资等级、所在部门及位置

         |- 确定要使用的数据表:

  1. emp表:雇员的编号,姓名,职位,雇佣日期,工资
  2. salgrade表:工资等级
  3. dept表:部门名称及位置

|- 确立已知的关联条件:只要是消除笛卡尔积的条件之间都是用AND连接操作

  1. 雇员和工资等级:emp.sal between salgrade.losal and salgrade.hisal;
  2. 雇员和部门:emp.deptno = dept.deptno;

select empno,ename,job,hiredate,sal,grade,dname,loc from emp e,dept d,salgrade s where e.sal between s.losal and s.hisal and e.deptno = d.deptno;

oracle-多表查询

右外连接

select * from emp e,dept d where e.deptno(+)=d.deptno;   --右外连接加号在左边

oracle-多表查询

左外连接

select * from emp e,dept d where e.deptno=d.deptno(+);   --左外连接加号在右边

oracle-多表查询

范例:查询每个雇员的编号、姓名、职位、领导姓名

  1. 查询emp表
  2. 查询领导姓名
  3. 查询领导姓名è内连接,等值连接,有null的不显示

select e.empno,e.ename,e.job,m.ename from emp e,emp m where e.mgr=m.empno(+);

--此处需要注意的是因为是用的同一个表格,所以必须加.区分表格e和表格m

oracle-多表查询

4、

select * from emp cross join dept;   --产生笛卡尔积 15*5

select * from emp natural join dept;   --自然连接,消除笛卡尔积

oracle-多表查询

select * from emp join dept using(deptno);   --用户指定关联字段

oracle-多表查询

select * from emp e join dept d on(e.deptno=d.deptno);  --使用on子句,用户设置关联条件

oracle-多表查询

5、

外连接

select * from emp e left outer join dept d on(e.deptno=d.deptno);   --左外连接

oracle-多表查询

select * from emp e right outer join dept d on(e.deptno=d.deptno);   --右外连接

oracle-多表查询

select * from emp e full outer join dept d on(e.deptno=d.deptno);    --全外连接

oracle-多表查询

6、

select * from emp where empno=10 union select * from emp;  ---union操作,不显示重复记录

oracle-多表查询

select * from emp where deptno=10 union all select * from emp;   --union all显示重复记录

oracle-多表查询

select * from emp where deptno=10 intersect select * from emp;   --intersect表示交集操作

oracle-多表查询

select * from emp minus select * from emp where deptno=10;   --minus表示差集操作

oracle-多表查询