T-SQL查询任务的解决方案要么基于集合,要么基于迭代/游标。T-SQL开发人员普遍认为就努力坚持前者,但后者也仍然广泛使用。

对于大多数人来说,基于集合的方式是不直观的,而基于迭代的方式是直观的。

集合概念:指的是由满足定义的m个对象(称为元素)构成的一个组合M。

在窗口函数里,我的理解里这个集合应该指的就是OVER。

理解集合的两个重点:

(1)整体

       一个集合应该当做一个整体来被感知和操作。我们的关注点应该放在集合这个整体上,而不是其中的各个元素。而迭代操作则正好相反,

因为文件中的记录或游标老师逐个处理的。当基于集合的查询与数据库在的表进行交互时,我们是与整个表进行交互,而不是与表中的单个记

录进行交互。

(2)顺序

       在集合的定义中没有任何地方提到元素顺序的问题。其原因在于集合中没有对元素顺序进行规定。我们经常混淆数据模型逻辑表达和物理

层面的实现语言。如果表中有特定的索引,那就意味着,当对表进行查询时,表问题按照索引的顺序访问。有时我们甚至将解决方案建立在这

个假设的正确性上。然而,SQL SERVER没有这方面的任何保证。为了阐述上述观点,请看下面的查询:

SELECT orderid,orderdate,val,RANK() OVER(ORDER BY val DESC) AS rnk
FROM Sales.OrderValues;

  在这个查询中并没有按照val进行排序。