请教sql中有没有只取多少条记录的语句?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教sql中有没有只取多少条记录的语句?相关的知识,希望对你有一定的参考价值。

我知道sql中有语句top(10)是只取查询到的前10条记录。
问题是这样的:
根据条件,查询到有100条记录,但我不想一次过取出,例如只取第25至35条记录,有没有类似top(10)这样的语句?是在SQL查询语句中完成这个只取动作,而不是之后的编程语言。
我这样问,主要是用于分页的(ASP),原因很简单,查询出的记录实在太多。例如翻页到第10页的时候,我虽然可以用next 100(指针前进100条记录)然后用do until的方式只显示10条,即第100至110条记录。
但是这样做的话,不管是第1页还是第100页,SQL始终都将符合条件的所有记录都读取到内存中,这样如果查询出的数据超级多的话,就不可思议了。
所以请高手指教一二!

参考技术A 单纯用SQL查询语句是不能完成的吧,SQL查询语句只负责返回一个结果集,TOP(10)返回的也只是一个结果集。

关于分页显示需要编程语言来完成,大多是用一个变量或者实例存放SQL语句返回的结果集,然后用编程语言来移动游标指针、以及循环输出来实现分页显示,比如你只取第25至35条记录,首先用SQL语句查询返回一个结果集,然后移动游标指针到第25条记录,循环输出(每次输出一条记录后游标指针向下移动一次)10次到第35条记录就可以了。
参考技术B 呵呵,使用TOP N 就可以实现只前N条记录,
也可以使用 TOP N percent 来取前N个百分比的记录
呵呵,希望能有帮助,^_^
参考技术C 分页一般是在表上添加一个IDENTITY属性的id列
然后只要控制id的范围就可以实现分页了(where id>25 and id<=35)
参考技术D SELECT TOP 页大小 *
FROM TestTable
WHERE (ID >
(SELECT MAX(id)
FROM (SELECT TOP 页大小*页数 id
FROM 表
ORDER BY id) AS T))
ORDER BY ID
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、本回答被提问者采纳

sql中group by 是啥意思啊?请教谢谢

一般是从来对一些集合函数进行分组的。
例如
select count(UserId),UserClass from USERINFO group by userClass
这个语句就可以得到每个班级的人数
参考技术A group
by
语句用于结合合计函数,根据一个或多个列对结果集进行分组。
举几个简单例子
成绩表(姓名,课程,成绩)
1、去重复,同distinct、查找有多少个人的记录(按姓名分组、排重)
2、取每个人有多少条记录(按姓名分组、统计)
3、取有成绩记录为2条的人(按姓名分组、配合having使用)
4、取每个人的总成绩(按姓名分组、合计)
5、取每个人的最高成绩(按姓名分组、取最大max/最小min/平均avg值)
参考技术B group
by
分组
通用数据库具有基于表的特定列对数据进行分析的能力。
可按照在
GROUP
BY
子句中定义的组对行进行分组。以其最简单的形式,组由称为分组列的列组成。
SELECT
子句中的列名必须为分组列或列函数。列函数对于
GROUP
BY
子句定义的每个组各返回一个结果。下列示例产生一个列出每个部门编号的最高薪水的结果:
SELECT
DEPT,
MAX(SALARY)
AS
MAXIMUM
FROM
STAFF
GROUP
BY
DEPT
此语句产生下列结果:
DEPT
MAXIMUM
------
---------
10
22959.20
15
20659.80
20
18357.50
38
18006.00
42
18352.80
51
21150.00
66
21000.00
84
19818.00
注意:计算的是每个部门(由
GROUP
BY
子句定义的组)而不是整个公司的
MAX(SALARY)。

WHERE
子句与
GROUP
BY
子句一起使用
分组查询可以在形成组和计算列函数之前具有消除非限定行的标准
WHERE
子句。必须在GROUP
BY
子句之前指定
WHERE
子句。例如:
SELECT
WORKDEPT,
EDLEVEL,
MAX(SALARY)
AS
MAXIMUM
FROM
EMPLOYEE
WHERE
HIREDATE
>
'1979-01-01'
GROUP
BY
WORKDEPT,
EDLEVEL
ORDER
BY
WORKDEPT,
EDLEVEL
结果为:
WORKDEPT
EDLEVEL
MAXIMUM
--------
-------
-----------
D11
17
18270.00
D21
15
27380.00
D21
16
36170.00
D21
17
28760.00
E11
12
15340.00
E21
14
26150.00
注意:在
SELECT
语句中指定的每个列名也在
GROUP
BY
子句中提到。未在这两个地方提到的列名将产生错误。GROUP
BY
子句对
WORKDEPT

EDLEVEL
的每个唯一组合各返回一行。

GROUP
BY
子句之后使用
HAVING
子句
可应用限定条件进行分组,以便系统仅对满足条件的组返回结果。为此,在GROUP
BY
子句后面包含一个
HAVING
子句。
HAVING
子句可包含一个或多个用
AND

OR
连接的谓词。每个谓词将组特性(如
AVG(SALARY))与下列之一进行比较:
该组的另一个特性
例如:
HAVING
AVG(SALARY)
>
2
*
MIN(SALARY)
常数
例如:
HAVING
AVG(SALARY)
>
20000
例如,下列查询寻找雇员数超过
4
的部门的最高和最低薪水:
SELECT
WORKDEPT,
MAX(SALARY)
AS
MAXIMUM,
MIN(SALARY)
AS
MINIMUM
FROM
EMPLOYEE
GROUP
BY
WORKDEPT
HAVING
COUNT(*)
>
4
ORDER
BY
WORKDEPT
此语句产生下列结果:
WORKDEPT
MAXIMUM
MINIMUM
--------
-----------
-----------
D11
32250.00
18270.00
D21
36170.00
17250.00
E11
29750.00
15340.00
有可能(虽然很少见)查询有
HAVING
子句但没有
GROUP
BY
子句。在此情况下,DB2
将整个表看作一个组。因为该表被看作是单个组,所以最多可以有一个结果行。如果
HAVING
条件对整个表为真,则返回选择的结果(该结果必须整个由列函数组成);否则不返回任何行。

以上是关于请教sql中有没有只取多少条记录的语句?的主要内容,如果未能解决你的问题,请参考以下文章

请教,SQL SERVER 2000使用insert插入一条记录,最快耗时多少

SQL 语句请教:比如我有一个数字1,那么就将该数字转换成当前年份的1月1日?

请教一个sqlserver有关记录条数统计查询语句问题

sql语句里如何实现给查询记录添加自然序号?

请教mysql 如何按时间删除多余的记录?

请教 取反 的SQL语句