06、Oracle从多个表中获取数据

您所在的位置:网站首页 oracle多表关联查询 06、Oracle从多个表中获取数据

06、Oracle从多个表中获取数据

2024-04-05 00:34| 来源: 网络整理| 查看: 265

Oracle从多个表中获取数据 1.1 【表连接】1.2 【笛卡尔积:交叉连接】1.3 【使用表的别名】1.4 【连接的类型】1.5 【等连接】1.5.1 自然连接 1.6 【非等连接】1.7 【外连接】1.7.1 【环境准备】1.7.2 【左外连接】1.7.3 【右外连接】1.7.4 【全外连接】 1.8 【自连接】1.9 【多表关联】【总结】

1.1 【表连接】

需求:查询员工的姓名、部门号、部门名称。

-- 查询员工的姓名、部门号、部门名称。 SCOTT@orcl>select emp.ename,emp.deptno,dept.deptno,dept.dname from emp,dept 2 where emp.deptno=dept.deptno;

注意:同一列名多表使用时,要写上表名做前缀。

SCOTT@orcl>seelct ename,deptno,dname from emp,dept where emp.deptno=dept.deptno;

列定义模糊

1.2 【笛卡尔积:交叉连接】

SCOTT@orcl>select emp.ename,emp.deptno,dept.deptno,dept.dname from emp,dept;

表连接不要忘记写 **where **条件。

1.3 【使用表的别名】

SCOTT@orcl>select e.ename,e.deptno,d.deptno,d.dname from emp e,dept d 2 where e.deptno=d.deptno;

1.4 【连接的类型】

分类标准不同

1.5 【等连接】

传统 **Oracle **连接语法:

SCOTT@orcl>select emp.ename,emp.deptno,dept.deptno,dept.dname from emp,dept 2 where emp.deptno=dept.deptno;

**SQL1999 **语法(标准 SQL)

SCOTT@orcl>select emp.ename,emp.deptno,dept.deptno,dept.dname 2 from emp inner join dept 3 on ( emp.deptno=dept.deptno);

SCOTT@orcl>select emp.ename,emp.deptno,dept.deptno,dept,dname 2 from emp inner join dept 3 using(deptno);

连接列名称相同时,可以使用 using,但列名前不能加修饰

SCOTT@orcl>select emp.ename,deptno,dept.dname 2 from emp inner join dept 3 using(deptno);

1.5.1 自然连接

SCOTT@orcl>select emp.ename,deptno,dept.dname 2 from emp natural join dept; ![](https://cdn.nlark.com/yuque/0/2023/png/300262/1681183720179-df24b1c2-ab56-4525-890c-1a06d1029548.png#averageHue=%23080706&id=ZpDJ7&originHeight=473&originWidth=672&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

1.6 【非等连接】

需求:查询员工的工资以及对应的工资等级

-- 查询员工的工资以及对应的工资等级 SCOTT@orcl>select e.empno,e.ename,e.sal,s.losal,s.grade 2 from emp e,salgrade s 3 where e.sal>=s.losal and e.salselect e.empno,e.ename,e.sal,s.losal,s.hisal,s.grade 2 from emp e,salgrade s 3 where e.sal between s.losal and s.hisal;

SCOTT@orcl>select e.ename,e.sal,s.losal,s.hisal,s.grade from emp e join salgrade s 2 on (e.sal between s.losal and s.hisal) 3 where deptno in(10,20);

1.7 【外连接】

1.7.1 【环境准备】

1.7.2 【左外连接】

需求:列出所有员工及其对应部门信息, 包括没有部门的员工。传统 **Oracle **连接语法:

SCOTT@orcl>select e.empno,e.ename,e.sal,d.deptno,d.dname 2 from emp e,dept d 3 where e.deptno=d.deptno(+);

**SQL:1999 **语法:

SCOTT@orcl>select e.empno,e.ename,e.sal,d.deptno,d.dname 2 from emp e left outer join dept d on(e.deptno=d.deptno);

1.7.3 【右外连接】

需求:列出所有部门及其对应的员工信息, 包括没有员工的部门。传统 **Oracle **连接语法

SCOTT@orcl>select e.empno,e.ename,e.sal,d.deptno,d.dname from emp e,dept d 2 where e.deptno(+)=d.deptno;

**SQL:1999 **语法:

SCOTT@orcl>select e.empno,e.ename,e.sal,d.deptno,d.dname 2 from emp e right outer join dept d on(e.deptno=d.deptno);

1.7.4 【全外连接】

需求:查询员工对应的部门信息, 包括没有部门的员工和没有员工的部门

SCOTT@orcl>select e.empno,e.ename,e.sal,d.deptno,d.dname 2 from emp e full outer join dept d 3 on (e.deptno=d.deptno);

1.8 【自连接】

(表里有从属关系)需求:查询员工的姓名以及其经理的姓名员工的经理号 **= **经理的员工号

SCOTT@orcl>select e.empno,e.ename,e.mgr,m.empno,m.ename 2 from emp e,emp m 3 where e.mgr=m.empno;

SCOTT@orcl>select e.empno,e.ename,e.mgr,m.empno,m.ename 2 from emp e,emp m where e.mgr=m.empno(+);

1.9 【多表关联】

需求:查询员工的姓名、部门名称、工资等级

-- 查询员工的姓名、部门名称、工资等级 SCOTT@orcl>select e.ename,d.dname,s.grade 2 from emp e,dept d,salgrade s 3 where (e.sal between s.losal and s.hisal) and (e.deptno=d.deptno);

SCOTT@orcl>select e.ename,d.dname,s.grade 2 from emp e join dept d on (e.deptno=d.deptno) 3 join salgrade s on (e.sal between s.losal and s.hisal);

【总结】

等值连接、不等值连接、外连接、自连接笛卡尔积:忽略了连接条件左外连接:列出所有员工的部门信息,包括没有部门的员工。

e.deptno=d.deptno(+);

传统 **oracle **连接语法

left outer join dept d on (e.deptno=d.deptno);

**SQL:1999 **连接语法右外连接:列出所有部门的员工信息,包括没有员工的部门。

e.deptno(+)=d.deptno; right outer join dept d on (e.deptno=d.deptno);

全外连接

full outer join dept d on (e.deptno=d.deptno);

注意:同一个外连接查询需求,使用左外连接或者右外连接都可以实现!左外连接是把左边表里数据显示完整,包括不符合连接条件的行;右外连接是把右边表里数据显示完整,包括不符合连接条件的行。如何区分左右:传统 **oracle **连接语法看 **where **子句中比较符,标准 **SQL **看 **from **子句中 join。

【OCP】051-7 join using/join on051-121 表连接 join using / natural join



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3