- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[原创]多表连接(join)小结
[原创]多表连接(join)小结参考:《sql查询初学者指南》第二版,机械工业出版社基础内链接就是对表A和表B以元组为单位做一个笛卡尔积,记为表C,然后在C中挑选出满足符合on 语句后边的限制条件的条目。左连接就是在内连接的基础上,将A中有但C中没有的元组也加上。由于C的列数比A的列数多,所以这新增的元组左边照搬a,右边为null。右链接就是在内连接的基础上,将B中有但C中没有的元组也加上。由于C的列数比B的列数多,所以这新增的元组右边照搬B,左边为null。所谓的full join ,就是在join的结果d后边先加上left join 要加的项,再加上right join 要加的项所谓的交叉连接(select * from tableName1 cross join tableName2)和select * from tableName1, tableName2是一样的,都是得到笛卡尔积。可以用select * from table1,table2 where....模拟join操作。所谓的自身连接是指同一个表自己与自己进行连接。这种一元连接通常用于从自反关系(也称作递归关系)中抽取数据。例如人力资源数据库中雇员与老板的关系。直接写join就是内连接,相当于inner join, inner可省写left join或者right join就是外连接,outer可省?例子有两表A和BAB下面是一些select操作select * from A cross join Aselect * from A join B on A.name = B.name就是对笛卡尔积,也即上边的cross join的结果进行进一步筛选,选出满足A.name=B.name的行。只有两行符合条件在上衣select语句的基础上增加了一行select * from A left join B on A.name = B.name同上select * from A right join B on A.name = B.nameselect * from A full join B on A.name = B.name进阶重要理论依据:在可以指定一个表名的任何地方,都可以指定一个括号括起来的join子句。在两个表的一个完整join语句出现的任何一个地方,我们都可以只用一个表名来代替它。?所谓“两个表的一个完整join语句”也即“join子句”,就是指如“A join B on A.a= B.b”这样一个完整的句子比如:欲连接ABCDE五个表可以这样:Select * from A inner join(((B inner join C on B.b = C.c)inner join D on B.b = D.d)inner join E on D.d = E.e)onA.a = E.e也可以这样:select * from (((A inner join B on A.a = B.b)inner join C on C.c = A.a)inner join D on D.d = C.c)inner join EonE.e = D.d也可以这样:select * fromA inner join B on A.a = B.binner join C on C.c = A.ainner join D on D.d = C.cinner join E on E.e = D.d我们可以先把A和B连接起来,然后将结果与C连接,当然,如果C只和B相关而不和A相关的话,我们也可以先把B和C连接起来,结果再与A连接,只要保持关系是正确的,你可以以任意方式来定义嵌套的join。然而大多数数据库系统会分析整个from子句,然后尝试确定组合连接表的最有效方式,也就是说数据库不不一定会从最里边的括号开始执行查询。这很可能打乱你的逻辑设计,得到意外的结果。另外,一些数据库系统中的优化器对于join定义的顺序很敏感。如果你发现使用很多join的查询在一个较大的数据库上执行花很长时间,通过改变sql语句中的join顺序很可能能够使它运行的更快。注意:有时候,你只需要A和C表中的一部分数据,但A和C只有通过B才能发生关系,那么你依然要先将A和B连接,然后再连接C一个比较全面的例子:selectRCFiltered.ClassName, R.RecipeTitlefrom(selectRecipeClassId,RecipeClassDescription as ClassNameFrom Recipe_Classes as RCwhereRC.ClassName = Salads or RC.ClassName = Soup or Rc.ClassName = Main Course)asR
您可能关注的文档
- 高一月考(董事长班).docx
- 最实用的面试英语对话.doc
- 2012伦敦奥运会开幕式全解析.doc
- 日常口语中英对照.doc
- 英语口语考试四人剧本之interview 面试.docx
- 巧用词缀背单词效率高 详解词缀记忆法的奥秘.doc
- 小鼠淋巴结分布示意图.doc
- 内部与外部招聘的分析(英语).docx
- 系统解剖学练习题(消化系统).docx
- 2013年6月四级考试真题(第一套).doc
- 人教版英语5年级下册全册教学课件.pptx
- 部编人教版2年级上册语文全册教学课件含单元及专项复习.pptx
- 人教版8年级上册英语全册教学课件(2021年8月修订).pptx
- 教科版(2017版)6年级上册科学全册课件+课时练.pptx
- 人教版PEP版6年级英语下册全册教学课件(2022年12月修订).pptx
- 部编人教版2年级下册语文全册课件(2021年春修订).pptx
- 人教版数学6年级下册全册教学课件(2023年教材).pptx
- 湘少版5年级下册英语全册教学课件(2021年春修订).pptx
- 人教PEP4年级下册英语全册教学课件 [2}.pptx
- 人教版6年级上册英语全册教学课件.pptx
文档评论(0)