8.限制结果集行数和抑制重复数据

1.TOP

     MSSQLServer2000中提供了TOP关键字用来返回结果集中的前N条记录。MSSQLServer2000没有直接提供返回提供“检索从第6行开始的3条数据”、“检索第五

行至第十二行的数据”等这样的取区间范围的功能,不过可以采用其他方法来变通实现,最常使用的方法就是用子查询。

    按工资降序排列,从第6条开始选3条记录:

SELECT top 3 * FROM T_Employee 
WHERE FNumber NOT IN 
     (SELECT TOP 5 FNumber FROM T_Employee ORDER BY FSalary DESC) 
ORDER BY FSalary DESC  

2.ROW_NUMBER

     不过MSSQLServer2005提供了新的特性来帮助更好的限制结果集行数的功能,ROW_NUMBER OVER(排序规则) :

SELECT ROW_NUMBER() OVER(ORDER BY FSalary),FNumber,FName,FSalary,FAge 
FROM T_Employee 

     执行结果: 

     如下的方式来实现返回第3行到第5行的数据(按照工资降序):

SELECT * FROM 
( 
    SELECT ROW_NUMBER() OVER(ORDER BY FSalary DESC) AS rownum, 
    FNumber,FName,FSalary,FAge FROM T_Employee 
) AS a 
WHERE a.rownum>=3 AND a.rownum<=5 

3.DISTINCT

     DISTINCT是对整个结果集进行数据重复抑制的,而不是针对每一个列:

SELECT DISTINCT FDepartment,FSubCompany FROM T_Employee 

     结果中不存在FDepartment和FSubCompany列都重复的数据行,但是却存在FDepartment列重复的数据行,这就验证了“DISTINCT是对整个结果集进行数据重复抑制的:

 

 

posted on 2012-10-15 15:24  凡一二三  阅读(383)  评论(0编辑  收藏  举报