




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、left join 是left outer join的简写,left join默认是outer属性的。Inner JoinInner Join 逻辑运算符返回满足第一个(顶端)输入与第二个(底端)输入联接的每一行。这个和用select查询多表是一样的效果,所以很少用到;outer join则会返回每个满足第一个(顶端)输入与第二个(底端)输入的联接的行。它还返回任何在第二个输入中没有匹配行的第一个输入中的行。关键就是后面那句,返回的多一些。所以通常意义上的left join就是left outer join详情如下:left join 和 left outer join 的区别 通俗的讲:
2、160; A left join B 的连接的记录数与A表的记录数同 A right join B 的连接的记录数与B表的记录数同 A left
3、 join B 等价B right join A table A: Field_K, Field_A 1 &
4、#160; a 3 b
5、0; 4 c table B: Field_K, Field_B 1
6、60; x 2 y
7、 4 z select a.Field_K, a.Field_A, b.Field_K,
8、0; b.Field_B from a left join b on a.Field_K=b.Field_K Field_K Field_A
9、 Field_K Field_B - - - - 1
10、; a 1
11、60; x 3 &
12、#160; b NULL NULL 4
13、60; c 4 &
14、#160; z select a.Field_K, a.Field_A, b.Field_K,
15、 b.Field_B from a right join b on a.Field_K=b.Field_K Field_K Fi
16、eld_A Field_K Field_B - - - - 1
17、 a 1
18、0; x NULL
19、;NULL 2 y
20、; 4 c
21、60; 4 z -举个例子: 假设表和表的数据是这样的。 a
22、0; b id nameid stock 1a
23、 1 15 2 b 2 50
24、0;3 c select * from a inner joi
25、n b on a.id=b.id 这个语法是连接查询中的内连接,它产生的结果是 两个表相匹配的记录出现在结果列表中。 根据上面的表,出现的结果是这样的 a.id name b.id
26、60; stock 1 a 1 15 2
27、0; b 2 50 - select * from a,b where
28、0; a.id=b.id 这个语法是内连接的另外一种写法,其执行结果与inner join 一样 - select * from a lef
29、t/right join b on a.id=b.id 这个是外连接语法中的左外连接或右外连接 如果是左外连接的话,它将显示表的所有记录, select a.*,b.* from a lef
30、t join b on a.id=b.id 查询的结果是这样的: a.id name b.id stock 1
31、60; a 1 15 2 b
32、60; 2 50 3 c null
33、 null - 如果是右外连接的话,它将显示表的所有记录, select a.*,b.* from a right join b on a.id
34、=b.id 查询的结果是这样的: a.id name b.id stock 1 a 1 &
35、#160; 15 2 b 2
36、160; 50 - select a.*,b.* from a left join b on a.k = b.k sele
37、ct a.*,b.* from a left outer join b on a.k =b.k -上面两种一样left join是left out
38、er join的简写 select a.*,b.* from a left inner join b on a.k = b.k
39、0; 没有这种写法,错误的语句.- 在你要使用多个left join的时候 比如说10个 我们把10个全都写成left join的形式 然后再SQL让他自动运行一下,它会把最后一次出现的left join变成left outer join
40、0; 所以依此推理,最后一个left join会以left outer join的形式存在 当然,不管变不变对结果的显示没有任何影响 希望我的实验能对你有所帮助 -使用关系代数合并数据1 关系代数合并数据集合的理论基础是关系代数,它是由E.F.Codd于1970年提出的。在关系代数的形式化语言中:r
41、160; 用表、或者数据集合表示关系或者实体。r 用行表示元组。r 用列表示属性。关系代数包含以下8个关系运算符r 选取返回满足指定条件的行。r 投影从数据集合中返回
42、指定的列。r 笛卡尔积是关系的乘法,它将分别来自两个数据集合中的行以所有可能的方式进行组合。r 并关系的加法和减法,它可以在行的方向上合并两个表中的数据,就像把一个表垒在另一个表之上一样。r 交返回两个数据集合所共有的行。r
43、;差返回只属于一个数据集合的行。r 连接在水平方向上合并两个表,其方法是:将两个表中在共同数据项上相互匹配的那些行合并起来。r 除返回两个数据集之间的精确匹配。此外,作为一种实现现代关系代数运算的方法,SQL还提供了:r 子查询类似于连接,但更灵活;在外部查询中,方式可以使用表达式、列表或者数据集合的地方都可以使用子
44、查询的结果。本章将主要讲述多种类型的连接、简单的和相关的子查询、几种类型的并、关系除以及其他的内容。2 使用连接2.1 连接类型在关系代数中,连接运算是由一个笛卡尔积运算和一个选取运算构成的。首先用笛卡尔积完成对两个数据集合的乘运算,然后对生成的结果集合进行选取运算,确保只把分别来自两个数据集合并且具有重叠部分的行合并在一起。连接的全部意义在于在水平方向上合并两个数据集合(通常是表),并产生一个新的结果集合,其方法是将一个数据源中的行于另一个数据源中和它匹配的行组合成一个新元组。SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时
45、所采用的方法不同。连接类型 定义内连接 只连接匹配的行左外连接 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行右外连接 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左
46、边表中全部匹配的行全外连接 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。(H)(theta)连接 使用等值以外的条件来匹配左、右两个表中的行交叉连接 生成笛卡尔积它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配在INFORMIX中连接表的查询如果FR
47、OM子句指定了多于一个表引用,则查询会连接来自多个表的行。连接条件指定各列之间(每个表至少一列)进行连接的关系。因为正在比较连接条件中的列,所以它们必须具有一致的数据类型。SELECT语句的FROM子句可以指定以下几种类型的连接FROM子句关键字 相应的结果集CROSS JOIN 笛卡尔乘积(所有可能的行对)INNER JOIN &
48、#160; 仅对满足连接条件的CROSS中的列LEFT OUTER JOIN 一个表满足条件的行,和另一个表的所有行RIGHT OUTER JOIN 与LEFT相同,但两个表的角色互换FULL OUTER JOIN LEFT
49、OUTER 和 RIGHT OUTER中所有行的超集2.2 内连接(Inner Join)内连接是最常见的一种连接,它页被称为普通连接,而E.FCodd最早称之为自然连接。下面是ANSI SQL92标准select *from t_institution iinner join t_teller ton i.inst_no = t.inst_nowhere i.inst_no = "5801&q
50、uot;其中inner可以省略。等价于早期的连接语法select *from t_institution i, t_teller twhere i.inst_no = t.inst_noand i.inst_no = "5801"2.3 外连接2.3.1 左外连接(Left Outer Jion)select *from &
51、#160;t_institution ileft outer join t_teller ton i.inst_no = t.inst_no其中outer可以省略。2.3.2 右外连接(Rigt Outer Jion)select *from t_institution iright outer join t_teller
52、;ton i.inst_no = t.inst_no2.3.3 全外连接(Full Outer)全外连接返回参与连接的两个数据集合中的全部数据,无论它们是否具有与之相匹配的行。在功能上,它等价于对这两个数据集合分别进行左外连接和右外连接,然后再使用消去重复行的并操作将上述两个结果集合并为一个结果集。在现实生活中,参照完整性约束可以减少对于全外连接的使用,一般情况下左外连接就足够了。在数据库中没有利用清晰、规范的约束来防范错误数据情况下,全外连接就变得非常有用了,
53、你可以使用它来清理数据库中的数据。select *from t_institution ifull outer join t_teller ton i.inst_no = t.inst_no2.3.4 外连接与条件配合使用当在内连接查询中加入条件是,无论是将它加入到join子句,还是加入到where子句,其效果是完全一样的,但对于外连接情况就不同了。当把条件加入到 join子句时,
54、SQL Server、Informix会返回外连接表的全部行,然后使用指定的条件返回第二个表的行。如果将条件放到where子句中,SQL Server将会首先进行连接操作,然后使用where子句对连接后的行进行筛选。下面的两个查询展示了条件放置位子对执行结果的影响:条件在join子句select *from t_institution ileft outer join t_teller ton i.inst_no = t.inst_noand i.ins
55、t_no = “5801”结果是:inst_no inst_name inst_no teller_no teller_name5801 天河区 &
56、#160; 5801 0001 tom5801 天河区 5801
57、60; 0002 david5802 越秀区5803 白云区条件在where子句select *from t_institution ileft outer join t_teller ton i.inst_no =&
58、#160;t.inst_nowhere i.inst_no = “5801”结果是:inst_no inst_name inst_no teller_no teller_name5801 天河区 &
59、#160; 5801 0001 tom5801 天河区 &
60、#160;5801 0002 david2.4 自身连接自身连接是指同一个表自己与自己进行连接。这种一元连接通常用于从自反关系(也称作递归关系)中抽取数据。例如人力资源数据库中雇员与老板的关系。下面例子是在机构表中查找本机构和上级机构的信息。select s.inst_no superior_inst, s.inst_name sup_inst_name, i.inst_n
61、o, i.inst_namefrom t_institution ijoin t_institution son i.superior_inst = s.inst_no结果是:superior_inst sup_inst_name inst_no inst_name800 &
62、#160; 广州市 5801 天河区800 广州市
63、60; 5802 越秀区800 广州市 5803 白云区2.5 交叉(无限制)
64、60;连接交叉连接用于对两个源表进行纯关系代数的乘运算。它不使用连接条件来限制结果集合,而是将分别来自两个数据源中的行以所有可能的方式进行组合。数据集合中一的每个行都要与数据集合二中的每一个行分别组成一个新的行。例如,如果第一个数据源中有5个行,而第二个数据源中有4个行,那么在它们之间进行交叉连接就会产生20个行。人们将这种类型的结果集称为笛卡尔乘积。大多数交叉连接都是由于错误操作而造成的;但是它们却非常适合向数据库中填充例子数据,或者预先创建一些空行以便为程序执行期间所要填充的数据保留空间。select *from t_institution icr
65、oss join t_teller t在交叉连接中没有on条件子句3 APPENDIX3.1 A 参考资料与资源r Microsoft SQL Server 2000 BilePaul Nielsenr Paul Nielsen的Web站点url/url3.2 注文章所有SQL在I
66、BM Informix Dynamic Server Version 9.40.TC2E1测试通过- 表A记录如下:aID aNum1 a200501112 a200501123
67、60; a200501134 a200501145 a20050115表B记录如下:bID bName1
68、 20060324012 20060324023 20060324034 20060324048
69、0; 2006032408实验如下:1.left joinsql语句如下:select * from Aleft join Bon A.aID = B.bID结果如下:aID aNum
70、60; bID bName1 a20050111 1
71、160; 20060324012 a20050112 2 20060324023
72、 a20050113 3 20060324034
73、60;a20050114 4 20060324045 a20050115 NUL
74、L NULL(所影响的行数为 5 行)结果说明: left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).B表记录不足的地方均为NULL.2.right joinsq
75、l语句如下:select * from Aright join Bon A.aID = B.bID结果如下:aID aNum bID
76、0; bName1 a20050111 1 20060324012 &
77、#160; a20050112 2 20060324023 a20050113 3 20060324034 &
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重庆市物业服务合同范本示例
- 保理合同(日元)
- 房屋使用权合同转租协议样本
- 检测服务合同范本:机构合作篇
- 资产配置基金合同例文
- 度标准私人承包协议合同
- 农产品购销合同经典合同范文
- 房地产项目苗木采购合同书模板
- 家电配件的表面装饰与标识技术考核试卷
- 中介服务行业的人力资源服务标准考核试卷
- DB11 938-2022 绿色建筑设计标准
- 部编版语文八年级下册第六单元名著导读《钢铁是怎样炼成的》问答题 (含答案)
- 2022译林版新教材高一英语必修二单词表及默写表
- 全国青少年机器人技术等级考试:二级培训全套课件
- 九种中医体质辨识概述课件
- (外研版)英语四年级下册配套同步练习 (全书完整版)
- 小学数学计算能力大赛实施方案
- 古诗词诵读《虞美人》课件-统编版高中语文必修上册
- 文物学概论-中国古代青铜器(上)
- 制作拉线课件
- 某物业公司能力素质模型库(参考)
评论
0/150
提交评论