zoukankan      html  css  js  c++  java
  • SQLSERVER之T-SQL查询(一)

      最近想研究一下SQL语句,于是看了一下《SQLSERVER技术内幕》。由于刚刚开始看,所以顺便总结一下。

      在SQLSERVER中,常用的无非就是SELECT、FROM、JOIN、WHERE、ON、HAVING、ORDER BY、GROUP BY、DISTINCT等。但是SQL语句在SQLSERVER中具体是如何执行的呢?

      首先看一个SQL语句:

      SELECT C.customerid,COUNT(O.orderid) AS numorders

       FROM  dbo.Customers  AS C

        LEFT OUTER JOIN dbo.Orders AS O

          ON C.customerid=O.customerid

      WHERE C.city='Madrid'

      GROUP BY  C.customerid

      HAVING COUNT(O.orderid)<3

      ORDER BY numorders;

    此SQL语句是书上的例子,借用一下。

      这个SQL语句很好理解,只是一个简单的查询语句,但是具体的在SQLSERVER中是如何运行的呢?

      首先,SQL语句在运行时一定是首先运行FROM子句(大家一定有此经历:在SQLSERVER中写语句时,select 列名 from  这个时候列名是没有提示的。当写上SELECT  * FROM Table_Name,当再次修改*号时,有了列名提示。所以此项可以证明在SQLSERVER中先执行的是FROM子句)。当FORM表中存在多张表时,进行笛卡尔积的运算,生成一张临时表T1。

      第二,将临时表T1中的结果通过ON 条件过滤生成临时表T2。

      第三,执行OUTER JOIN操作,将无法匹配的行插入到临时表T2中,生成临时表T3。

      第四,执行WHERE子句,过滤不符合条件的记录生成临时表T4。

      第五,执行GROUP BY子句,将T4表中的记录进行分组,生成临时表T5。

      第六,执行HAVING子句,过滤T5表中的记录,生成临时表T6。

      再执行SELECT子句,将T6表中记录过滤不需要的字段,生成临时表T7。执行DISTINCT子句将T7临时表中的重复行删除,生成临时表T8。最后执行ORDER BY子句,将T8中的记录进行排序,进行输出。

      整个SQL语句的执行顺序到这儿才执行完毕。在这个过程中总共生成了8张表。其中T1~T7临时表都不能被客户端或者用户进行使用。当充分理解SQL语句在SQLSERVER中的执行顺序后,会使我们对SQL的运行原理有了更充分的理解,这对于书写SQL语句又很大的帮助。

      在随后的博客中,我将继续谈自己以及通过书本获得的SQL知识。如果有不足的地方希望大家批评指正。

     

      

  • 相关阅读:
    js实现粘贴板复制
    oracle分页查询
    [小技巧]window10删除此电脑左侧栏中的非磁盘文件夹
    [web]2019第一起数据泄露事件
    [xml]AttributeError: 'xml.etree.ElementTree.Element' object has no attribute 'getroot'
    [python]Mongodb
    [urllib]urlretrieve在python3
    [flask]邮件配置-20171227
    [PowerShell]Python虚拟环境激活失败
    [git]git入门
  • 原文地址:https://www.cnblogs.com/sun-sjmeng/p/3196227.html
Copyright © 2011-2022 走看看