2022年数据库外联、内联参照 .pdf

上传人:H****o 文档编号:32433448 上传时间:2022-08-09 格式:PDF 页数:7 大小:53KB
返回 下载 相关 举报
2022年数据库外联、内联参照 .pdf_第1页
第1页 / 共7页
2022年数据库外联、内联参照 .pdf_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《2022年数据库外联、内联参照 .pdf》由会员分享,可在线阅读,更多相关《2022年数据库外联、内联参照 .pdf(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、先说自联: 自联数据的来源不是多个表,而是一个表中两个字段的关系。自联中一个表被虚拟成 2 个表例子:对员工信息表进行查询, 取得员工和管理者的关系, 并显示“员工 work for 管理者”这样的字符串select worker.name | work for | manager.name from employees worker,employess manager where worker.manager_id = manager.employee_id 使用关系代数合并数据1 关系代数合并数据集合的理论基础是关系代数,它是由E.F.Codd于 1970 年提出的。在关系代数的形式化语言

2、中:r 用表、或者数据集合表示关系或者实体。r 用行表示元组。r 用列表示属性。关系代数包含以下8 个关系运算符r 选取返回满足指定条件的行。r 投影从数据集合中返回指定的列。r 笛卡尔积是关系的乘法, 它将分别来自两个数据集合中的行以所有可能的方式进行组合。r 并关系的加法和减法,它可以在行的方向上合并两个表中的数据,就像把一个表垒在另一个表之上一样。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - r 交返回两个数据集合所共有

3、的行。r 差返回只属于一个数据集合的行。r 连接在水平方向上合并两个表,其方法是: 将两个表中在共同数据项上相互匹配的那些行合并起来。r 除返回两个数据集之间的精确匹配。此外,作为一种实现现代关系代数运算的方法,SQL 还提供了:r 子查询类似于连接,但更灵活;在外部查询中,方式可以使用表达式、列表或者数据集合的地方都可以使用子查询的结果。本章将主要讲述多种类型的连接、简单的和相关的子查询、 几种类型的并、 关系除以及其他的内容。2 使用连接2.1 连接类型在关系代数中, 连接运算是由一个笛卡尔积运算和一个选取运算构成的。首先用笛卡尔积完成对两个数据集合的乘运算,然后对生成的结果集合进行选取运

4、算,确保 只把分别来自两个数据集合并且具有重叠部分的行合并在一起。连接的全部意义在于在水平方向上合并两个数据集合(通常是表),并产生一个新的结果集合,其方法是将一个数据源中的行于另一个数据源中和它匹配的行组合成一个新元组。SQL 提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同。连接类型定义内连接 只连接匹配的行左外连接包含左边表的全部行 (不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行右外连接包含右边表的全部行 (不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行全外连接包含左、右两个表的全部行,不管另

5、外一边的表中是否存在与它们匹配的行。(H)(theta)连接 使用等值以外的条件来匹配左、右两个表中的行名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - 交叉连接生成笛卡尔积它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配在 INFORMIX 中连接表的查询如果 FROM 子句指定了多于一个表引用,则查询会连接来自多个表的行。连接条件指定各列之间 (每个表至少一列) 进行连接的关系。 因

6、为正在比较连接条件中的列,所以它们必须具有一致的数据类型。SELECT 语句的 FROM 子句可以指定以下几种类型的连接FROM 子句关键字相应的结果集CROSS JOIN 笛卡尔乘积(所有可能的行对)INNER JOIN 仅对满足连接条件的CROSS中的列LEFT OUTER JOIN 一个表满足条件的行,和另一个表的所有行RIGHT OUTER JOIN 与 LEFT 相同,但两个表的角色互换FULL OUTER JOIN LEFT OUTER 和 RIGHT OUTER 中所有行的超集2.2 内连接( Inner Join)内连接是最常见的一种连接, 它页被称为普通连接, 而 E.FCo

7、dd最早称之为自然连接。下面是 ANSI SQL92 标准select * from t_institution i inner join t_teller t on i.inst_no = t.inst_no where i.inst_no = 5801 其中 inner 可以省略。等价于早期的连接语法select * from t_institution i, t_teller t where i.inst_no = t.inst_no and i.inst_no = 5801 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - -

8、 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - 2.3 外连接2.3.1 左外连接 (Left Outer Jion) select * from t_institution i left outer join t_teller t on i.inst_no = t.inst_no 其中 outer可以省略。2.3.2 右外连接 (Rigt Outer Jion) select * from t_institution i right outer join t_teller t on i.inst_no = t.inst_no 2.3.3

9、 全外连接 (Full Outer) 全外连接返回参与连接的两个数据集合中的全部数据,无论它们是否具有与之相匹配的行。在功能上,它等价于对这两个数据集合分别进行左外连接和右外连接,然后再使用消去重复行的并操作将上述两个结果集合并为一个结果集。在现实生活中, 参照完整性约束可以减少对于全外连接的使用,一般情况下左外连接就足够了。在数据库中没有利用清晰、规范的约束来防范错误数据情况下,全外连接就变得非常有用了,你可以使用它来清理数据库中的数据。select * from t_institution i full outer join t_teller t on i.inst_no = t.inst

10、_no 2.3.4 外连接与条件配合使用当在内连接 查询中加入条件是,无论是将它加入到join 子句,还是加入到 where子句,其效果是完全一样的 ,但对于 外连接 情况就不同了。 当把条件加入到join子句时, SQL Server、Informix 会返回外连接表的全部行,然后使用指定的条件名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - 返回第二个表的行。 如果将条件放到 where子句中,SQL Server将会首先进行

11、连接操作,然后使用 where子句对连接后的行进行筛选。下面的两个查询展示了条件放置位子对执行结果的影响:条件在 join 子句select * from t_institution i left outer join t_teller t on i.inst_no = t.inst_no and i.inst_no = “5801” 结果是:inst_no inst_name inst_no teller_no teller_name 5801 天河区 5801 0001 tom 5801 天河区 5801 0002 david 5802 越秀区5803 白云区条件在 where子句sele

12、ct * from t_institution i left outer join t_teller t on i.inst_no = t.inst_no where i.inst_no = “5801” 结果是:inst_no inst_name inst_no teller_no teller_name 5801 天河区 5801 0001 tom 5801 天河区 5801 0002 david 2.4 自身连接自身连接是指同一个表自己与自己进行连接。这种一元连接通常用于从自反关系(也称作递归关系)中抽取数据。例如人力资源数据库中雇员与老板的关系。名师资料总结 - - -精品资料欢迎下载

13、 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - 下面例子是在机构表中查找本机构和上级机构的信息。select s.inst_no superior_inst, s.inst_name sup_inst_name, i.inst_no, i.inst_name from t_institution i join t_institution s on i.superior_inst = s.inst_no 结果是:superior_inst sup_inst_name i

14、nst_no inst_name 800 广州市 5801 天河区800 广州市 5802 越秀区800 广州市 5803 白云区2.5 交叉 (无限制 ) 连接交叉连接用于对两个源表进行纯关系代数的乘运算。它不使用连接条件来限制结果集合,而是将分别来自两个数据源中的行以所有可能的方式进行组合。数据集合中 一的每个行都要与数据集合二中的每一个行分别组成一个新的行。例如,如果第一个数据源中有5 个行,而第二个数据源中有4 个行,那么在它们之间进行交叉连接就会产生 20 个行。人们将这种类型的结果集称为笛卡尔乘积 。大多数交叉连接都是由于错误操作而造成的;但是它们 却非常适合向数据库中填充例子数据

15、 , 或者预先创建一些空行以便为程序执行期间所要填充的数据保留空间。select * from t_institution i cross join t_teller t 在交叉连接中没有on 条件子句3 APPENDIX 3.1 A 参考资料与资源r Microsoft SQL Server 2000 BilePaul Nielsen 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - r Paul Nielsen的 Web站点

16、3.2 注文章所有 SQL 在 IBM Informix Dynamic Server Version 9.40.TC2E1 测试通过补充:一直以为内联外联是不是就多了一个outer,昨天特地去查了一下, 资料有点少,但还是找到了,可能很多人都知道left join,right join,full join,left outer join,right outer join,full outer join,inner join,join; 这样列出来是不是有点晕,开始我也有点晕;我想说的是left join 和 left outer join 其实就是一样, 只是有达形式不一样了, 这样明白了吧

17、,相同的join,inner join 是同一回事;顺便也把左右联也说一下,最简单的表达是,当左联时,左表有的,联表没有,左表统一加个 NULL 值给他 ,右联相同道理, inner呢,就是交集才显示出来;随便骂骂这些的所谓技术人员,很多事情很简单的事情, 都复杂化了, 一个简单的东西,非得写十几页纸的东西, 岂不知读者的时间很珍贵, 或许更多的写书的人站 在搞费的角度想这件事吧,写多几页显示理解深,但是总是看不到深的一面,总是看到是他们在说费话,如果把这些费话搞成几个实例也许更好;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com