ImageVerifierCode 换一换
格式:DOC , 页数:8 ,大小:65.50KB ,
资源ID:4217031      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-4217031.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(经典表关联与多表查询.doc)为本站会员(11****ws)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

经典表关联与多表查询.doc

1、 1 / 8 经典表关联与多表查询 目的: 1. 掌握从多个表查询数据的基本知识 2. 了解和学习外连接(out join) 3. 掌握内连接 授课内容: 1. 对多于一个表的数据查询 1.1 现实情况中,在数据库应用中,数据存在于多个相关联的表中。基本上没有数据 只存在于一个表中的情况。小的应用系统一般也有十几个表,大型系统一般有上 千个表。 1.2 你经常要作的就是在多个表中进行数据查询。 1.3 Oracle 对多表查询使用表连接的技术(table join) 1.4 表连接的基本条件: (1)2 个表必须有公共字段(同名字段或不同名字段) (2)在一个表中,这个公共字段必须是主键(PK

2、) 1.5 二个表中的公共字段,在一个表中是主键,在另外一个表中就是外键(FK)。 1.6 二表关联中,公共字段是主键的表称为父表(主表) 。是外键的表称为子表(详细 表) 。 1.7 研究一下 scott 下的 emp 和 dept 表的关系。 1.8 研究一下 oe 下的表: CATEGORIES_TAB CUSTOMERS INVENTORIES ORDERS ORDER_ITEMS PRODUCT_DESCRIPTIONS PRODUCT_INFORMATION 1.9 多表查询的语法 select 子句 from 表 1 别名,表 2 别名,视图 别名, (select 子句)别名

3、where 连接语句 and 其他条件语句 oupy by 分类项目 having 子句 order by 子句 1.10 任务:查询每个员工的编号,姓名,部门名称,部门位置 select empno,ename, dname,loc from emp a, dept b where a.DEPTNO=b.DEPTNO 2 / 8 1.11 多表查询的原则:对 N 个表连接,至少要有 N-1 个相等的条件。而且每个表的公 共字段必须出现一次。 1.12 多表关联中,如果没有指定关联等式,将产生无效的结果,它将每个关联的表的 记录跟其他表的所有记录组合,产生笛卡尔积的数据。 测试: select

4、 empno,ename, dname,loc from emp a, dept b 1.13 对 OE 用户的测试 查询公司库存信息,显示仓库名称,产品名称,库存数量,库存金额 select c.WAREHOUSE_NAME, b.PRODUCT_NAME, a.QUANTITY_ON_HAND,a.QUANTITY_ON_HAND*b.LIST_PRICE from INVENTORIES a, PRODUCT_INFORMATION b, WAREHOUSES c where a.WAREHOUSE_ID=c.WAREHOUSE_ID and a.PRODUCT_ID =b.PRODUC

5、T_ID 2. 内连接 (self join) 1. 当多表关联使用一个表进行数据进行数据查询,这种连接叫自连接。 2. 自连接的主要功能是查询表中除了主键外,是否有重复的记录。 3. 任务: 查询员工表中,有同名,职位相同的员工信息(编号,项目,职位,工 资) select a.empno, a.ename, a.job from emp a, emp b where a.empnob.empno and a.deptno=b.deptno and a.job=b.job 4. 日常生活中在数据录入时产生的错误 (1)由于工作失误,一个数据录入到系统 2 次或多次。 (2)一般在进行自动的数

6、据导入时,产生大量的重复记录。 5. 子连接的要求: 自连接至少要 2 个或 2 个以上的等式条件,一个用于关联,其他用于表示重复 的数据。 3. 外连接(out join): 1.1 内连接是关联的表的公共字段值必须相同,所有不同的值的记录都没有了。 1.2 外连接是值一个表的中的公共字段的值可以不与另一个表的公共字段值相同。一 般时它是 null. 1.3 任务:查询员工表,显示员工的项目,部门名称,部门位置,要求显示所有的员 工,即使员工没有部门。 select a.ename,b.dname,b.loc from emp a left outer join dept b 3 / 8 o

7、n a.deptno=b.deptno 注:此任务无法使用正常的内连接。因为有一个员工没有部门,它的部门编号为空。 常见的任务如:信息系统中的文档,申请审批,当刚创建时,所有审批信息为 null 但有的审批已经完成。 如果与审批人表关联的话,要显示所有的申请,就必须使用 外连接。 1.4 外连接语法: (1)左连接:取出左边的表的所有记录 select 子句 from 表 1 left outer join 表 2 on 表 1.公共字段表 2.公共字段 (2) 右连接: 取出右边表的所有记录 select 子句 from 表 1 right outer join 表 2 on 表 1.公共字

8、段表 2.公共字段 (3) 全连接(左右连接):左右两边的表的记录都取。 select 子句 from 表 1 full outer join 表 2 on 表 1.公共字段表 2.公共字段 select a.empno,a.deptno,b.deptno,b.dname from emp a left outer join dept b on a.deptno=b.deptno select a.empno,a.deptno,b.deptno,b.dname from emp a right outer join dept b on a.deptno=b.deptno select a.en

9、ame,b.dname,b.loc from emp a full outer join dept b on a.deptno=b.deptno select a.dname, b.ename from dept a full outer join emp b on a.deptno=b.deptno 一般情况下,不使用上述的语法,而使用如下的语法: select a.dname, b.ename from dept a, emp b where a.deptno(+)=b.deptno - 一般情况情况下,(+)放在关联表的主键的一侧,才有实际的意义。 没有(+)的表的取所有的记录,关联的表

10、如果有记录对应就显示关联的值,没有关联的 值显示 null. 4 / 8 但使用(+)的情况下,无法实现全连接。 因为无法在 where 的左右同时使用(+). select a.ename,b.dname from emp a, dept b where a.deptno=b.deptno(+) 下列的语句是无法通过的: select a.ename,b.dname from emp a, dept b where a.deptno(+)=b.deptno(+) 1.5 任务: 4. 自关联(self-join) 4.1 有些情况下,需要关联一个表,这种关联叫自关联。 4.2 自关联经常使用

11、的一般是查看表中的记录是否重复。在信息管理系统中,有时出 现数据录入的错误。同一个数据,被输入了 2 次以上,除了主键不一样,其他字 段基本上一样。即查询重复的记录。 4.3 数据录入错误的发生可能的情况: (1)数据的自动导入,新建系统从老系统中批量导入数据,导致大量的重复记 录。 (2)用户输入错误的数据,将一个数据输入的 2 次。 (3) 4.4 如 SCOTT 的员工表 EMP, MGR 字段是员工的经理的员工号。要查询每个员工的经理 的姓名。就需要使用自关联。 select a.ename, b.ename from emp a, emp b where a.mgr=b.empno

12、4.5 查询 emp 表中可能同名的员工的记录。 select a.empno,a.ename from emp a, emp b where a.empnob.empno and a.ename=b.ename 4.6 查询员工表 emp 的重复记录: select a.empno,a.ename from emp a, emp b where a.empnob.empno and a.ename=b.ename and a.job=b.job and a.sal=b.sal 4.7 子连接会导致对表的大量的操作,需要很大的内存。其他用户对自连接的表的操 作会等待很长的时间。一般情况下最好不

13、要使用自关联。 4.8 表的自关联的与内关联不同,自关联至少要 2 个或 2 个以上的等式条件。 5. 查询结果的联合(UNION) (UNION ALL) - 将多个查询结果联合在一起: 5 / 8 - UNION 将多个结果集联合在一起,去除重复的记录 - UNION ALL 将多个结果联合在一起,不去除重复的记录 Table 7-1: Set Operators Operator Description UNION ALL Returns all the rows retrieved by the queries, including duplicate rows. UNION Retu

14、rns all non-duplicate rows retrieved by the queries. INTERSECT Returns rows that are retrieved by both queries. MINUS Returns the remaining rows when the rows retrieved by the second query are subtracted from the rows retrieved by the first query. - union 语法: select union select union select 例子 1: s

15、elect empno,ename from emp where deptno=10 union select deptno,dname from dept 例子 2: select * from emp where deptno=10 union select * from emp where job=CLERK - union all 语法 select union all select union all select 例子 1: select * from emp where deptno=10 union all select * from emp where job=CLERK 6

16、 / 8 6. 查询结果的交集(INTERSECT): - 将多个查询结果集联合在一起,只保留相同的记录。摘除不同的记录 - 语法: select 语句 intersect select intersect select 例子: select * from emp where deptno=10 intersect select * from emp where job=CLERK 7. 查询结果的差集(MINUS): - 将多个结果集联合在一起,保留它们差异的记录,将包含第 2 个结果集的记录减去。 - 语法: select minus select minus select 例子: sel

17、ect * from emp where deptno=10 minus select * from emp where job=CLERK 注: 1. Oracle 在合并 2 个结果集时,Oracle 并不关心合并运算符的任何一边的列名,合 并的结果集以第一个结果集的列名为新的列名。 2. select 语句必须有相同的列,如果被查询的结果集有不同的列,可使用 Oracle 的 内置表达式合成为相同的列数。 3. select 的相对应的列必须为相同的类型。长度可以不同。 4. 在对输出进行排序时,Oracle 使用第 1 个 select 语句的列名给出查询结果,因为, 只有第 1 个

18、select 的列作为查询结果,因此只有第一个 select 的列名出现在 order by 子句中。 8. Oracle9i 实现 SQL Server 2000 中的 select top n 的 SQL 语句: 在 Oracle9i 中没有类似的 select top n 的语句。但是它提供了 ROWNUM 内置函数。 可以实现 top n 的查询语句。 Select From 7 / 8 Where rownum5000 order by totalRMB desc 课后作业: 1. 查询工作地点在NEWYORK的员工的编号,姓名,职位,部门名称。 2. 查询每个部门的名称,地点,汇总工资,平均公司。 3. 查询订单号为 2354 的定单的明细信息(产品名称,销售数量,销售金额) 4. 查询订单金额大于 1000 的订单信息(显示订单号,客户名称,订单日期,销售金 额) 5. 查询公司 1999 年每个月的订单数量,订单金额,最大的订单金额,最小的订单金 额 二次作业 8 / 8

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。