今天我们讨论一个简单的问题,由于是刚想到怕忘记记录,所以一个简单的问题写一个博客有点儿浪费。不过技术在于理解,在于知其然也要知其所以然,还是记录一下同时也希望能帮到大家。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或者说不是返回的一个临时表,而是返回的一个游标(指针)。
所以这个时候子查询中的会报错误。