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是对整个结果集进行数据重复抑制的: