博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sql Server2005 Transact-SQL 新兵器学习总结之-TOP 运算符
阅读量:6916 次
发布时间:2019-06-27

本文共 3067 字,大约阅读时间需要 10 分钟。

TOP 运算符介绍:
TOP 运算符在Sql Server2005得到了增强,可以使用任何数值表达式(如变量名),而不是仅使用整数来指定该运算符返回的行数。
TOP 现在还可以在 INSERT、UPDATE 和 DELETE 语句中指定。
TOP 运算符的几个使用总结:
1.TOP 表达式可用在 SELECT、INSERT、UPDATE 和 DELETE 语句中。
2.Top表达式可以是常量,变量,子查询
3.取代set rowcount,可以防止锁升级,提高效率
特别提示:
与INSERT、UPDATE 或 DELETE 一起使用的 TOP 表达式中被引用行将不按任何顺序排列。
TOP n 随机返回 n 行。
例如,下面的 INSERT 语句包含 ORDER BY 子句,但该子句并不影响由 INSERT 语句直接引用的行。
请看例题:
有1个test表,表结构和表中数据如下:
select * from test
id salary manid
100 6500 100
200 5500 200
101 6600 100
102 6200 100
103 5100 100
104 6700 100
201 5800 200
202 4200 200
执行下面的语句:
复制代码
declare @t table(id int,salary int,manid int)
INSERT TOP (2) INTO @t 
SELECT  id, salary, manid
from test
ORDER BY salary  asc
select * from @t
复制代码
结果如下:
id salary manid
100 6500 100
200 5500 200
上个查询中的 ORDER BY 子句仅引用嵌套 SELECT 语句返回的行。
INSERT 语句选择 SELECT 语句返回的任意两行。
若要确保插入 SELECT 子查询返回的前两行,可以按如下写该查询。
复制代码
declare @t table(id int,salary int,manid int)
INSERT  INTO @t 
SELECT TOP (2) id, salary, manid
from test
ORDER BY salary  asc
select * from @t
复制代码
结果如下:
id salary manid
202 4200 200
103 5100 100
TOP 运算符在Sql Server2005得到了增强,Top表达式可以是常量,变量,子查询
下面我们再来看另个例题:
复制代码
create table test2( 
[no] int ,
n nvarchar(100)
)
insert into test2([no],n)
select 1,'a'
union 
select 2,'b'
union 
select 3,'c'
union 
select 3,'c2'
union 
select 2,'b2'
union
select 2,'b3'
go
select * 
from test2 
order by [no] asc
go
复制代码
结果如下:
no n
1 a
2 b
2 b2
2 b3
3 c
3 c2
1.利用top变量,筛选no最小的2行
复制代码
-- 利用top变量,筛选no最小的2行
declare @i int
select @i = 2
select top (@i) * 
from test2 
order by [no] asc
go
复制代码
结果如下:
no n
1 a
2 b
我们可以看到,在Sql Server2005中top后面跟的可以是变量了,而在Sql Server2000中必须是常量才可以
要在Sql Server2000实现上述功能比较麻烦,需要用到动态sql语句,请看下面代码:
复制代码
--Sql Server2000版本
declare @i int
select @i = 2
declare @sql nvarchar(255)
select @sql=''
select @sql='select top ('+ convert(nvarchar(100),@i)+') * from test2 order by [no] asc'
exec(@sql)
复制代码
2.利用top子查询来筛选
select top ( select count([no]) from test2 where [no]=3 ) * 
from test2 
order by [no] asc
go
结果如下:
no n
1 a
2 b
3.WITH TIES参数:
指定从基本结果集中返回更多的行,返回的行与TOP n (PERCENT) 行中的最后一行在ORDER BY 列中具有相同的值。
只有在指定ORDER BY 子句之后才能指定TOP WITH TIES。
--返回no前2行,并还返回no=2的行
select top (2) WITH TIES * 
from test2 
order by [no] asc
go
2007年12月3日16:51:15
希望上面提到的知识对你有所提示
当然欢迎交流和指正
 
blog:
http://www.cnblogs.com/aierong
author:aierong
email:aierong@126.com
 
我的系列文章
A.Sql Server2005 Transact-SQL 新兵器学习 
B.MCAD学习 
C.代码阅读总结 
D.ASP.NET状态管理 
E.DB(数据库) 
F.WAP 
G.WinForm 
H.Flex
我的好文推荐
FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统((Flex,Fms3联合开发))<视频聊天,会议开发实例8> 
Sql Server2005 Transact-SQL 新兵器学习总结之-总结 
MS SQL数据库备份和恢复存储过程(加强版本) 
sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结) 
ASP.NET2.0国际化/本地化应用程序的实现总结(多语言,多文化页面的实现) 
WAP开发资料站(最新更新) 
自定义格式字符串随笔 (IFormattable,IFormatProvider,ICustomFormatter三接口的实现) 
Mcad学习笔记之异步编程(AsyncCallback 委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结) 
Mcad学习笔记之通过反射调用類的方法,屬性,字段,索引器(2種方法) 
Mcad学习笔记之序列化(2进制和Soap序列 化) 
Mcad学习笔记之委托再理解(delegate的构造器,BeginInvoke,EndInvoke,Invoke4个方法的探讨) 
ASP.NET状态管理之一(概括篇) 
Flex,Fms学习笔记
本文转自aierong博客园博客,原文链接:http://www.cnblogs.com/aierong/archive/2007/12/03/981247.html,如需转载请自行联系原作者
你可能感兴趣的文章
360网盘书籍分享
查看>>
Mybatis-select、insert、update、delete标签详解
查看>>
数据挖掘的三大趋势——专访SAS首席技术顾问张磊
查看>>
jQuery中attr()与prop()区别介绍
查看>>
可见面判别算法---后向面判别
查看>>
目标规划---应用举例
查看>>
【转载】关于RabbitMQ的消息持久性
查看>>
axios post小结
查看>>
设计模式之状态模式
查看>>
消息中间件(3)-ActiveMQ消息持久化
查看>>
URL Rewrite初认识
查看>>
springboot(六):如何优雅的使用mybatis
查看>>
Spring 3中PropertySourcesPlaceholderConfigurer 的...
查看>>
Python中os和shutil模块实用方法集锦
查看>>
理解Scala的Symbol类型
查看>>
java 日期操作
查看>>
JVM内存区域(基于jdk1.7)
查看>>
float和double运算过程会失去精度,BigDecimal适用于商业计算
查看>>
maven实现依赖的“全局排除”
查看>>
如何快速入门Python
查看>>