SQL多表查询最直接最终.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SQL多表连接查询总结1SQL查询的基本原理1.1单表查询根据where条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的);然后根据select的选择列选择相应的列进行返回最终结果。1.2两表连接查询对两表求积(笛卡尔积),再用on条件和连接类型进行过滤形成中间表;然后根据where条件过滤中间表的记录,并根据select指定的列返回查询结果。1.3多表连接查询先对from后第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,以此类推,直到所有的表都连接上为止,最终形成一个中间的结果表,然后根据where条件过滤中间表的记录,并根据select指定的列返回查询结果。1.4 SQL逻辑处理执行顺序1.4.1 T-SQL逻辑查询的各个阶段(5)SELECT DISTINCT TOP(top_specification)select_list(1)FROM left_table join_type JOIN right_table ON on_predicate?(2)WHERE where_predicate(3)GROUP BY group_by_specification(4)HAVING having_predicate(6)ORDER BY order_by_list1.4.2 T-SQL在查询各个阶级分别干了什么(1)FROM 阶段FROM阶段标识出查询的来源表,并处理表运算符。在涉及到联接运算的查询中(各种join),主要有以下几个步骤:a.求笛卡尔积。不论是什么类型的联接运算,首先都是执行交叉连接(cross join),求笛卡儿积,生成虚拟表VT1-J1。b.ON筛选器。这个阶段对上个步骤生成的VT1-J1进行筛选,根据ON子句中出现的条件进行筛选,让条件取值为true的行通过了考验,生产VT1-J2。c.添加外部行。如果指定了outer join,还需要将没有找到匹配的行,作为外部行添加到VT1-J2中,生成VT1-J3。??经过以上步骤,FROM阶段就完成了。概括地讲,FROM阶段就是进行预处理的,根据提供的运算符对语句中提到的各个表进行处理(除了join,还有apply,pivot,unpivot)。(2)WHERE阶段??WHERE阶段是根据where_predicate中条件对VT1-J3中的行记录进行筛选,让条件成立的行才会插入到VT2中。(3)GROUP BY阶段??GROUP BY阶段按照指定的列名列表,将VT2中的行进行分组,生成VT3。最后每个分组只有一行。(4)HAVING阶段??该阶段根据HAVING子句中出现的条件对VT3的分组进行筛选,并将符合条件的组插入到VT4中。(5)SELECT阶段  这个阶段是投影的过程,选择所连接的表中的字段(列),产生VT5。这个步骤一般按下列顺序进行??a.计算SELECT列表中的表达式,生成VT5-1。??b.若有DISTINCT,则删除VT5-1中的重复行,生成VT5-2。??c.若有TOP,则根据ORDER BY子句定义的逻辑顺序,从VT5-2中选择签名指定数量或者百分比的行,生成VT5-3。(6)ORDER BY阶段? 根据ORDER BY子句中指定的列明列表,对VT5-3中的行,进行排序,生成游标VC6。2多表连接的类型2.1交叉连接(cross join)交叉连接(CROSS JOIN):有两种形式,分为显式的和隐式的,都不带where条件。返回的是两表的乘积,也叫笛卡尔积。下面的语句1和语句2的结果是相同的。2.1.1隐式的交叉连接隐式的交叉连接,在语句中是没有CROSS JOIN的。语句1:select s.sno,s.sname,s.nianl,s.sex,sc.sccre from s,sc ;结果如下:2.1.2显式的交叉连接显式的交叉连接,在语句中使用crossjoin。语句2:select s.sno,s.sname,s.nianl,s.sex,sc.sccre from s cross join sc ;结果如下:语句1和语句2的结果是相同的。2.2内连接(innerjoin)内连接有两种形式,也是分显式的和隐式的,返回连接表中符合连接条件和查询条件的数据行。(所谓的链接表就是数据库在做查询过程中形成的中间表)。2.2.1隐式的内连接隐式的内连接,在语句中没有INNER JOIN。语句3: select s.sno,s.sname,s.nianl,s.sex,sc.sccre from s,sc wheres.sno=sc.sno;结果如下:2.2.2显式的内连接显式的内连接,一般称为内连接,使用INNER JOIN。语句4:select s.sno,s.sname,s.nianl,s.sex,

文档评论(0)

moon8888 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档