

下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、. 经典表关联与多表查询目的:1. 掌握从多个表查询数据的根本知识2. 了解和学习外连接(out join)3. 掌握内连接授课内容:1. 对多于一个表的数据查询1.1 现实情况中,在数据库应用中,数据存在于多个相关联的表中。根本上没有数据只存在于一个表中的情况。小的应用系统一般也有十几个表,大型系统一般有上千个表。1.2 你经常要作的就是在多个表中进展数据查询。1.3 Oracle对多表查询使用表连接的技术table join1.4 表连接的根本条件:(1) 2个表必须有公共字段同名字段或不同名字段(2) 在一个表中,这个公共字段必须是主键PK1.5 二个表中的公共字段,在一个表中是主键,在
2、另外一个表中就是外键(FK)。1.6 二表关联中,公共字段是主键的表称为父表主表。是外键的表称为子表详细表。1.7 研究一下scott下的emp和dept表的关系。1.8 研究一下oe下的表:CATEGORIES_TABCUSTOMERSINVENTORIESORDERSORDER_ITEMSPRODUCT_DESCRIPTIONSPRODUCT_INFORMATION1.9 多表查询的语法select 子句from 表1 别名,表2 别名,视图 别名,select 子句别名where 连接语句 and 其他条件语句oupy by 分类工程having 子句order by 子句1.10 任务
3、:查询每个员工的编号,部门名称,部门位置select empno,ename, dname,locfromemp a,dept bwhere a.DEPTNO=b.DEPTNO1.11 多表查询的原那么:对N个表连接,至少要有N-1个相等的条件。而且每个表的公共字段必须出现一次。1.12 多表关联中,如果没有指定关联等式,将产生无效的结果,它将每个关联的表的记录跟其他表的所有记录组合,产生笛卡尔积的数据。测试:select empno,ename, dname,locfromemp a,dept b1.13 对OE用户的测试 查询公司库存信息,显示仓库名称,产品名称,库存数量,库存金额sele
4、ct c.WAREHOUSE_NAME, b.PRODUCT_NAME, a.QUANTITY_ON_HAND,a.QUANTITY_ON_HAND*b.LIST_PRICEfromINVENTORIESa,PRODUCT_INFORMATION b,WAREHOUSES cwhere a.WAREHOUSE_ID=c.WAREHOUSE_ID and a.PRODUCT_ID =b.PRODUCT_ID2. 内连接 (self join)1. 当多表关联使用一个表进展数据进展数据查询,这种连接叫自连接。2. 自连接的主要功能是查询表中除了主键外,是否有重复的记录。3. 任务: 查询员工表中,
5、有同名,职位一样的员工信息编号,工程,职位,工资select a.empno, a.ename, a.jobfrom emp a, emp bwhere a.empno<>b.empno and a.deptno=b.deptno and a.job=b.job4. 日常生活中在数据录入时产生的错误(1) 由于工作失误,一个数据录入到系统2次或屡次。(2) 一般在进展自动的数据导入时,产生大量的重复记录。5. 子连接的要求:自连接至少要2个或2个以上的等式条件,一个用于关联,其他用于表示重复的数据。3. 外连接(out join): 1.1 内连接是关联的表的公共字段值必须一样,所
6、有不同的值的记录都没有了。1.2 外连接是值一个表的中的公共字段的值可以不与另一个表的公共字段值一样。一般时它是null.1.3 任务:查询员工表,显示员工的工程,部门名称,部门位置,要求显示所有的员工,即使员工没有部门。select a.ename,b.dname,b.locfromemp a left outer join dept bon a.deptno=b.deptno注:此任务无法使用正常的内连接。因为有一个员工没有部门,它的部门编号为空。 常见的任务如:信息系统中的文档,申请审批,当刚创立时,所有审批信息为null. 但有的审批已经完成。 如果与审批人表关联的话,要显示所有的申请
7、,就必须使用外连接。 1.4 外连接语法:1左连接:取出左边的表的所有记录select 子句from 表1 left outer join 表2 on 表1.公共字段表2.公共字段2 右连接: 取出右边表的所有记录select 子句from 表1 right outer join 表2 on 表1.公共字段表2.公共字段3 全连接左右连接:左右两边的表的记录都取。select 子句from 表1 full outer join 表2 on 表1.公共字段表2.公共字段select a.empno,a.deptno,b.deptno,b.dnamefromemp a left outer joi
8、n dept bon a.deptno=b.deptnoselect a.empno,a.deptno,b.deptno,b.dnamefromemp a right outer join dept bon a.deptno=b.deptnoselect a.ename,b.dname,b.locfromemp a full outer join dept bon a.deptno=b.deptnoselect a.dname, b.enamefromdept a full outer join emp bon a.deptno=b.deptno一般情况下,不使用上述的语法,而使用如下的语法:
9、select a.dname, b.enamefromdept a,emp bwhere a.deptno(+)=b.deptnoß- 一般情况情况下,(+)放在关联表的主键的一侧,才有实际的意义。没有(+)的表的取所有的记录,关联的表如果有记录对应就显示关联的值,没有关联的值显示null.但使用(+)的情况下,无法实现全连接。 因为无法在where 的左右同时使用(+).select a.ename,b.dnamefromemp a,dept bwhere a.deptno=b.deptno(+)以下的语句是无法通过的:select a.ename,b.dnamefromemp a
10、,dept bwhere a.deptno(+)=b.deptno(+)1.5 任务:4. 自关联(self-join)4.1 有些情况下,需要关联一个表,这种关联叫自关联。4.2 自关联经常使用的一般是查看表中的记录是否重复。在信息管理系统中,有时出现数据录入的错误。同一个数据,被输入了2次以上,除了主键不一样,其他字段根本上一样。即查询重复的记录。4.3 数据录入错误的发生可能的情况:(1) 数据的自动导入,新建系统从老系统中批量导入数据,导致大量的重复记录。(2) 用户输入错误的数据,将一个数据输入的2次。4.4 如SCOTT的员工表EMP, MGR字段是员工的经理的员工号。要查询每个员
11、工的经理的XX。就需要使用自关联。select a.ename, b.enamefrom emp a, emp bwhere a.mgr=b.empno4.5 查询emp表中可能同名的员工的记录。select a.empno,a.enamefromemp a,emp bwhere a.empno<>b.empno and a.ename=b.ename4.6 查询员工表emp的重复记录:select a.empno,a.enamefromemp a,emp bwhere a.empno<>b.empno and a.ename=b.ename and a.job=b.j
12、ob and a.sal=b.sal4.7 子连接会导致对表的大量的操作,需要很大的内存。其他用户对自连接的表的操作会等待很长的时间。一般情况下最好不要使用自关联。4.8 表的自关联的与内关联不同,自关联至少要2个或2个以上的等式条件。5. 查询结果的联合UNIONUNION ALL- 将多个查询结果联合在一起:- UNION将多个结果集联合在一起,去除重复的记录- UNION ALL将多个结果联合在一起,不去除重复的记录Table 7-1: Set Operators OperatorDescriptionUNION ALL Returns all the rows retrieved by
13、 the queries, including duplicate rows.UNION Returns 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.- unio
14、n语法:selectunionselectunionselect例子1:select empno,enamefrom empwhere deptno=10unionselect deptno,dnamefrom dept例子2:select*from emp where deptno=10unionselect*from emp where job='CLERK' - union all 语法selectunion allselectunion allselect例子1:select*from emp where deptno=10unionallselect*from emp
15、 where job='CLERK'6. 查询结果的交集INTERSECT:- 将多个查询结果集联合在一起,只保存一样的记录。摘除不同的记录- 语法:select 语句intersectselectintersectselect例子:select*from emp where deptno=10intersectselect*from emp where job='CLERK'7. 查询结果的差集MINUS:- 将多个结果集联合在一起,保存它们差异的记录,将包含第2个结果集的记录减去。- 语法:select minusselectminusselect例子:se
16、lect*from emp where deptno=10minusselect*from emp where job='CLERK'注:1. Oracle在合并2个结果集时,Oracle并不关心合并运算符的任何一边的列名,合并的结果集以第一个结果集的列名为新的列名。2. select语句必须有一样的列,如果被查询的结果集有不同的列,可使用Oracle的内置表达式合成为一样的列数。3. select的相对应的列必须为一样的类型。长度可以不同。4. 在对输出进展排序时,Oracle使用第1个select语句的列名给出查询结果,因为,只有第1个select的列作为查询结果,因此只有
17、第一个select的列名出现在order by 子句中。8. Oracle9i实现SQL Server 2000 中的select top n 的SQL语句:在Oracle9i中没有类似的select top n 的语句。但是它提供了ROWNUM内置函数。可以实现top n的查询语句。Select From Where rownum<=nROWNUM是Oracle在做查询时自动计算的。它会随着记录集的变化而动态变化。ROWNUM返回第一次从表中选择时返回行的序列号。第1行的ROWNUM为1。如果想返回一个复杂查询的结果集的top n, 要把此结果集作为中间结果集放在from中,再使用ro
18、wnum函数。如下例子:select*from(select deptno, sum(sal)from empgroupby deptno)whererownum<=2课前提问:1. 查询采购金额多于5000元的客户清单,以及每个客户的采购金额,并按总采购金额排序 客户名称, 采购金额select a.CUST_FIRST_NAME|' '| CUST_LAST_NAME, sum(c.UNIT_PRICE*C.QUANTITY)as totalRMBfromCUSTOMERS a,ORDERS b,ORDER_ITEMS cwhere a.customer_ID=b.Customer_ID
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CAZG 012-2022动物园兽医院设置通则
- T/CAQI 214-2021空气消毒机
- T/CAQI 126-2020家用和类似用途母婴净水机
- 洪涝灾害高考试题及答案
- 管理情境面试题及答案
- 船长英语面试题及答案
- 分析类型面试题及答案
- 2025年秋季上学期小学一年级教师个人工作总结模版
- 工程合同主体变更协议书
- 加入养殖园区意向协议书
- 尾矿库安全规程
- 互联网+时代电商助农模式的优化策略:以S县为例9000字(论文)
- 《医疗器械监督管理条例》知识竞赛考试题库300题(含答案)
- 高压旋喷桩施工技术交底
- DL-T5024-2020电力工程地基处理技术规程
- 2024年上海市普通高中学业水平等级性考试化学试卷(含答案)
- 树立正确就业观课件
- 《在马克思墓前的讲话》课件+2023-2024学年统编版高中语文必修下册
- 第24届世界奥林匹克数学竞赛WMO省级测评五年级试卷【含答案】
- 2024Web网站渗透测试报告模板
- 2023年-2024年新《管理学原理》考试题库(含答案)
评论
0/150
提交评论