网站大量收购独家精品文档,联系QQ:2885784924

[原创]多表连接(join)小结.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档