SQLSERVER之T-SQL查询(二)

  今天我们讨论一个简单的问题,由于是刚想到怕忘记记录,所以一个简单的问题写一个博客有点儿浪费。不过技术在于理解,在于知其然也要知其所以然,还是记录一下同时也希望能帮到大家。SQL查询会有很多博客,希望自己能耐心的写下去,巩固自己的知识。

  大家知道SQL中有一组关键字叫做ORDER BY,在上一篇博客中已经提到过。他是最后执行的,用来排序 (ORDER BY 字段名 DESC 和ORDER BY 字段名 ASC)。大家发现在子查询中是不能使用ORDER BY排序的,这样会产生语法错误。但是为什么会这样呢?下面我们经过一个SQL语句来分析一下。

     SELECT  S.SID,S.Name

     FROM  dbo.Student AS S

     WHERE S.SID IN(

              SELECT C.SID

              FROM dbo.Class

              ORDER BY C.SID

              )

  这个时候SQLSERVER会报语法错误。这是为什么呢?

  在上一篇博客中提到过,ORDER BY子句执行是放在SQL语句的最后的。也就是说,子句SELECT C.SID FROM dbo.Class  ORDER BY C.SID中 ORDER BY C.SID是最后执行的。这个子句首先执行FROM dbo.Class,然后执行SELECT C.SID 。在表中筛选出 SID所有的字段值。最后执行的ORDER BY C.SID 对SID进行升序排列。这个时候,大家一定要注意:

      当ORDER BY 出现在子句中的时候,它所返回的不是一个DATATABLE或者说不是返回的一个临时表,而是返回的一个游标(指针)。

所以这个时候子查询中的会报错误。

  

posted @ 2013-07-18 10:28  孙进  阅读(222)  评论(0编辑  收藏  举报