不用排序,但是表需要有一个唯一确定一条记录的ID字段,设表名为TABLENAME,ID为其唯一关键字段,这样实现:
10年积累的成都网站设计、网站制作、外贸营销网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有阜平免费网站建设让你可以放心的选择与我们合作。
declare @BOTT INT,@COUNT int,@SQLSTR VARCHAR(1000)
SET @BOTT=10--设置要取得最后几条记录,这里是10条
SET @COUNT=(SELECT COUNT(1) FROM TABLENAME)--求出表的总记录数
IF @COUNT@BOTT--如果总记录数大于要求结果的记录数,就减去要求记录数
SET @COUNT=@COUNT-@BOTT
SET @SQLSTR='SELECT * FROM TABLENAME WHERE ID NOT IN(SELECT TOP '+CONVERT(VARCHAR,@COUNT)+' ID FROM TABLENAME)'
--注:子查询记录数TOP 是总记录数-要求记录数,所以主查询就是总记录除去子查询记录数
exec(@SQLSTR)
sqlserver不支持limit只能变相实现了
取第m条到第n条记录:
select top (n-m+1) id from tablename
where id not in (
select top m-1 id from tablename
)
50到100条
select top (51) id from tablename
where id not in (
select top 49 id from tablename
)
1.
Oracle数据库
SELECT
*
FROM
TABLENAME
WHERE
ROWNUM
=
N
2.
Infomix数据库
SELECT
FIRST
N
*
FROM
TABLENAME
3.
DB2数据库
SELECT
*
FROM
(SELECT
*
ROW_NUMBER()
OVER({ORDER
BY
COL1
DESC})
AS
ROWNUM
FROM
TABLENAME)
WHERE
ROWNUM
=
N
或者
SELECT
COLUMN
FROM
TABLENAME
FETCH
FIRST
N
ROWS
ONLY
4.
SQL
Server数据库
SELECT
TOP
N
*
FROM
TABLENAME
5.
Sybase数据库
SET
ROWCOUNT
N
GO
SELECT
*
FROM
TABLENAME
6.
MySQL数据库
SELECT
*
FROM
TABLENAME
LIMIT
N
7.
FoxPro数据库
SELECT
*
TOP
N
FROM
TABLENAME
ORDER
BY
COLUMN
以下示例从表
[tableName]
中读取符合查询条件的前10条记录的SQL语句
1.Access
select
top
(10)
*
from
[tableName]
where
[query
condition]
1.1
带order
by的查询限制
Access中对select
top的语句支持有限,如果要在查询top语句的后面使用order
by,则order
by排序字段必须是无重复值,如果有重复值的话,那么这个TOP很可能会失效,会返回所有记录。
解决办法:在order
by
最后面加入主键id,如:
select
top
10
from
[tableName]
order
by
排序字段1,id
1.2
带子查询的示例
假如id是表[tableName]的主键,以下语句期望返回三条记录,但结果返回4条记录
select
top
3
*
from
[tableName]
where
id
in(是个子查询,结果比如为1,2,3,4)
解决办法
select
top
3
*
from
[tableName]
where
id
in(是个子查询,结果比如为1,2,3,4)
order
by
id
2
DB2
select
column
from
[tableName]
where
[query
condition]
fetch
first
10
rows
only
3
MySQL
select
*
from
[tableName]
where
[query
condition]
limit
10
4
SQL
Server
4.1
读取前10条
select
top
(10)
*
from
[tableName]
where
[query
condition]
4.2
读取后10条
select
top
(10)
*
from
[tableName]
order
by
id
desc
4.3
按照某个排序,第5到10这几个记录
select
top
6
*
from
[tableName]
where
id
not
in(select
top
4
id
from
[tableName])
5
Oracle
select
*
from
[tableName]
where
rownum=10
oracle 里面能实现,sqlserver里面不知道有没有分析函数
给你个参考
select *
from
(
select id,name,tid,rank()over(partition by tid order by sys_guid())rnd
from table
) t
where rnd = 5
其中
rank()over(partition by tid order by sys_guid())
的作用是求按tid分组然后按照sys_guid(相当于sql中的newid)排序后这一行所处的名次