社区
MS-SQL Server
帖子详情
续“有关Select Top 100 From TableName的问题”
Muzhu
2003-05-17 03:06:18
如果使用Select * From TableName的排序是固定的,
那这种默认的排序规则是什么呢?
那么我要在数据库的第2条和第3条之间插入数据应该怎么办?
...全文
27
7
打赏
收藏
续“有关Select Top 100 From TableName的问题”
如果使用Select * From TableName的排序是固定的, 那这种默认的排序规则是什么呢? 那么我要在数据库的第2条和第3条之间插入数据应该怎么办?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Muzhu
2003-05-17
打赏
举报
回复
那问一个难一点的问题,请选用你擅长的语言实现两个任意大小的数字相加。
Muzhu
2003-05-17
打赏
举报
回复
谢谢!
caiyunxia
2003-05-17
打赏
举报
回复
主键(可能有多个,自己修改)
使用聚集索引
聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如,如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此类查询的性能。同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。
当索引值唯一时,使用聚集索引查找特定的行也很有效率。例如,使用唯一雇员 ID 列 emp_id 查找特定雇员的最快速的方法,是在 emp_id 列上创建聚集索引或 PRIMARY KEY 约束。
说明 如果该表上尚未创建聚集索引,且在创建 PRIMARY KEY 约束时未指定非聚集索引,PRIMARY KEY 约束会自动创建聚集索引。
也可以在 lname(姓氏)列和 fname(名字)列上创建聚集索引,因为雇员记录常常是按姓名而不是按雇员 ID 分组和查询的。
注意事项
Muzhu
2003-05-17
打赏
举报
回复
请问您怎么得知它是按“插入数据的先后顺序”来排序的?在哪里有正式说明吗?请给出!谢谢了!
Muzhu
2003-05-17
打赏
举报
回复
谢谢!好象明白了,但pk是什么意思能说一下吗?
caiyunxia
2003-05-17
打赏
举报
回复
聚集索引的排序
如没有
就是插入数据的先后顺序
caiyunxia
2003-05-17
打赏
举报
回复
select top 2 * from (select top 3 * from tablle) a order by pk desc
sql语句大全 包括常有语句 新手必备
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select
a,b,c from
table
name ta where a=(
select
max(a) from
table
name tb where tb.b=ta.b) 16、说明:包括所有在
Table
A 中但不在
Table
B和
Table
C 中的行并消除所有重复行而派生出一个结果表 (
select
a from
table
A ) except (
select
a from
table
B) except (
select
a from
table
C) 17、说明:随机取出10条数据
select
top 10 * from
table
name order by newid() 18、说明:随机选择记录
select
newid() 19、说明:删除重复记录 Delete from
table
name where id not in (
select
max(id) from
table
name group by col1,col2,...) 20、说明:列出数据库里所有的表名
select
name from sysobjects where type='U' 21、说明:列出表里的所有的
select
name from syscolumns where id=object_id('
Table
Name') 22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似
select
中的case。
select
type,sum(case vender
用SqlServer2005的新功能解决分页显示数据获取的
问题
sqlserver2005的
select
语句top子句可以跟参数,这样就很好的解决了分页的
问题
,通用的写法就是:
select
【排序列】,【显示列1...N】 from
Table
Name where
【排序列】 in
select
top (@PageNo*@PageSize) 【排序列】 from
Table
Name order by 【排序列】/Desc)
and
【排序列】not in
select
top ( (@PageNo-1) * @PageSize) 【排序列】 from
Table
Name order by 【排序列】/Desc)
order by 【排序列】/desc
当然还可以更优化一下
sql 2000自定义分页存储过程
CREATE PROCEDURE [dbo].[pro_Pager] @
Table
Name varchar(50), @Condition nvarchar(500), @Fields varchar(500), @CurrentPage int, @PageSize int, @OrderField varchar(
100
), @OrderType varchar(4) AS set nocount on declare @SQL nvarchar(2000) if @OrderType = 'Desc' begin if @Condition = 'None' begin if @CurrentPage = 1 begin set @SQL = '
select
top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @
Table
Name + ' order by ' + @OrderField + ' desc' end if @CurrentPage > 1 begin set @SQL = '
select
top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @
Table
Name + ' where ' + @OrderField + '<(
select
min(' + @OrderField + ') from (
select
top ' + Cast(@PageSize*(@CurrentPage-1) as varchar) + ' ' + @OrderField + ' from ' + @
Table
Name + ' order by ' + @OrderField + ' desc) temp) order by ' + @OrderField + ' desc' end end else begin if @CurrentPage = 1 begin set @SQL = '
select
top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @
Table
Name + ' ' + @Condition + ' order by ' + @OrderField + ' desc' end if @CurrentPage > 1 begin set @SQL = '
select
top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @
Table
Name + ' ' + @Condition + ' and ' + @OrderField + '<(
select
min(' + @OrderField + ') from (
select
top ' + Cast(@PageSize*(@CurrentPage-1) as varchar) + ' ' + @OrderField + ' from ' + @
Table
Name + ' ' + @Condition + ' order by ' + @OrderField + ' desc) temp) order by ' + @OrderField + ' desc' end end end else begin if @Condition = 'None' begin if @CurrentPage = 1 begin set @SQL = '
select
top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @
Table
Name + ' order by ' + @OrderField + ' asc' end if @CurrentPage > 1 begin set @SQL = '
select
top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @
Table
Name + ' where ' + @OrderField + ' > (
select
max(' + @OrderField + ') from (
select
top ' + Cast(@PageSize*(@CurrentPage-1) as varchar) + ' ' + @OrderField + ' from ' + @
Table
Name + ' order by ' + @OrderField + ' asc) temp) order by ' + @OrderField + ' asc' end end else begin if @CurrentPage = 1 begin set @SQL = '
select
top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @
Table
Name + ' ' + @Condition + ' order by ' + @OrderField + ' asc' end if @CurrentPage > 1 begin set @SQL = '
select
top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @
Table
Name + ' ' + @Condition + ' and ' + @OrderField + ' > (
select
max(' + @OrderField + ') from (
select
top ' + Cast(@PageSize*(@CurrentPage-1) as varchar) + ' ' + @OrderField + ' from ' + @
Table
Name + ' ' + @Condition + ' order by ' + @OrderField + ' asc] temp) order by ' + @OrderField + ' asc' end end end exec sp_executesql @SQL
如何在SQL Server中实现 Limit m,n 的功能
在MySQL中,可以用 Limit 来查询第 m 列到第 n 列的记录,例如: 代码如下:
select
* from
table
name limit m, n但是,在SQL Server中,不支持 Limit 语句。怎么办呢?解决方案:虽然SQL Server不支持 Limit ,但是它支持 TOP。我们以SQL Server 2005为例,就以它自带的示范数据库 AdventureWorks 作为测试数据: 代码如下:
select
id from
table
name如果要查询上述结果中前6条记录,则相应的SQL语句是: 代码如下:
select
top 6 id from
table
name
通用分页sql
通用的分页sql语句
select
top (分页大小) * from
table
Name where id[主键] not in (
select
top(分页大小*(当前页-1)) id from
table
Name)
MS-SQL Server
34,590
社区成员
254,589
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章