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

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

ID:37976572

大小:127.46 KB

页数:4页

时间:2019-06-04

[原创]多表连接(join)小结_第1页
[原创]多表连接(join)小结_第2页
[原创]多表连接(join)小结_第3页
[原创]多表连接(join)小结_第4页
资源描述:

《[原创]多表连接(join)小结》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、[原创]多表连接(join)小结参考:《sql查询初学者指南》第二版,机械工业出版社基础内链接就是对表A和表B以元组为单位做一个笛卡尔积,记为表C,然后在C中挑选出满足符合on语句后边的限制条件的条目。左连接就是在内连接的基础上,将A中有但C中没有的元组也加上。由于C的列数比A的列数多,所以这新增的元组左边照搬a,右边为null。右链接就是在内连接的基础上,将B中有但C中没有的元组也加上。由于C的列数比B的列数多,所以这新增的元组右边照搬B,左边为null。所谓的fulljoin,就是在join的结果d后边先加上lef

2、tjoin要加的项,再加上rightjoin要加的项所谓的交叉连接(select*fromtableName1crossjointableName2)和select*fromtableName1,tableName2是一样的,都是得到笛卡尔积。可以用select*fromtable1,table2where....模拟join操作。所谓的自身连接是指同一个表自己与自己进行连接。这种一元连接通常用于从自反关系(也称作递归关系)中抽取数据。例如人力资源数据库中雇员与老板的关系。直接写join就是内连接,相当于innerjo

3、in,inner可省写leftjoin或者rightjoin就是外连接,outer可省 例子有两表A和BAB下面是一些select操作select*fromAcrossjoinAselect*fromAjoinBonA.name=B.name就是对笛卡尔积,也即上边的crossjoin的结果进行进一步筛选,选出满足A.name=B.name的行。只有两行符合条件在上衣select语句的基础上增加了一行select*fromAleftjoinBonA.name=B.name同上select*fromArightjoinB

4、onA.name=B.nameselect*fromAfulljoinBonA.name=B.name进阶重要理论依据:在可以指定一个表名的任何地方,都可以指定一个括号括起来的join子句。在两个表的一个完整join语句出现的任何一个地方,我们都可以只用一个表名来代替它。 所谓“两个表的一个完整join语句”也即“join子句”,就是指如“AjoinBonA.a=B.b”这样一个完整的句子比如:欲连接ABCDE五个表可以这样:Select*fromAinnerjoin(((BinnerjoinConB.b=C.c)in

5、nerjoinDonB.b=D.d)innerjoinEonD.d=E.e)onA.a=E.e也可以这样:select*from(((AinnerjoinBonA.a=B.b)innerjoinConC.c=A.a)innerjoinDonD.d=C.c)innerjoinEonE.e=D.d也可以这样:select*fromAinnerjoinBonA.a=B.binnerjoinConC.c=A.ainnerjoinDonD.d=C.cinnerjoinEonE.e=D.d我们可以先把A和B连接起来,然后将结果与C

6、连接,当然,如果C只和B相关而不和A相关的话,我们也可以先把B和C连接起来,结果再与A连接,只要保持关系是正确的,你可以以任意方式来定义嵌套的join。然而大多数数据库系统会分析整个from子句,然后尝试确定组合连接表的最有效方式,也就是说数据库不不一定会从最里边的括号开始执行查询。这很可能打乱你的逻辑设计,得到意外的结果。另外,一些数据库系统中的优化器对于join定义的顺序很敏感。如果你发现使用很多join的查询在一个较大的数据库上执行花很长时间,通过改变sql语句中的join顺序很可能能够使它运行的更快。注意:有时

7、候,你只需要A和C表中的一部分数据,但A和C只有通过B才能发生关系,那么你依然要先将A和B连接,然后再连接C一个比较全面的例子:selectRCFiltered.ClassName,R.RecipeTitlefrom(selectRecipeClassId,RecipeClassDescriptionasClassNameFromRecipe_ClassesasRCwhereRC.ClassName='Salads'orRC.ClassName='Soup'orRc.ClassName='MainCourse')asR

8、CFilteredleftouterjoinRecipesasRonRCFiltered.RecipeClassId=R.RecipeClassId这个例子的内涵:1.在大多数sql的实现中,我们可以把from子句中的任何表名替换成一条完整的select语句.当然,必须分配一个相关名称。本例中为子select语句分配的名称为RCF

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。