浅谈mssql access数据库 top分页方法(精选6篇)由网友“unruly”投稿提供,以下是小编精心整理的浅谈mssql access数据库 top分页方法,供大家阅读参考。
篇1:浅谈mssql access数据库 top分页方法
最近更 新
MSSQL MySQL 数据库分页(存储过程)
不固定参数的存储过程实现代码
sql lite 数据库之间表复制的方法
分页 SQLServer存储过程
Sql Server查询性能优化之不可小觑的书签
解析SQLServer获取Excel中所有Sheet的方法
将表数据生成Insert脚本 比较好用的生成插
sqlserver 中ntext字段的批量替换(updat
SQL Server 数据库基本操作语句总结
SQL Server口令 sql server安全性
热 点 排 行
SQL Server 图文安装教程
SQL Server 安装图解教程(附
sqlserver中distinct的用法(不重
SQL Server导入、导出、备份数据
SQL语句去掉重复记录,获取重复记
SQL Server数据库入门学习总结
SQL Server错误代码大全及解释(
sql convert函数使用小结
sql 时间函数 整理的比较全了
用SQL语句添加删除修改字段、一些
篇2:[]数据库实现分页查询显示
现在一般用的比较多的数据库,应该是Oracle,MSSQL(T sql),mysql,但是他们并没有统一的标准来实现分页查询,也就是没有统一的SQL标准,所以他们三个方法各不同给编码人员造成了很大的不便,先总结一下,与大家共享!
Mysql 是最简单的,就是使用Limit进行查询。例如:select * from tmp_table limit 10,20;也就是从tmp_table表中查找(10,20)之间的元组。Oracle 也基本上实现了这种方法,但是形式却有所不同。例如:select * from tmp_table where rownum>=10 and rownum<=20;也就是从tmp_table表中查找(10,20)之间的元组。MSSQL(T SQL)只有TOP,也就是取出一个表中的头部的N条元组,但是没有直接可以取出N到M之间的数据的方法,所以这里要自己开发。例如上面是实现了每页10个数据,然后取出(10,20)之间的数据(也就是第二页),MSSQL这么实现:select * from(
select top 10 * from
(
select top 20 * from tmp_table order by id
) order by id
DESC)order by id ASC;其实这里原理应该是比较简单的,因为我们要取出(10,20)之间的元组,先取出前20条,然后降序取出前10条,然后升序取出全部的,也就实现了升序取出(10,20)元组了,显然,这也是因为SQL的标准并不是很严格的缘故吧,所以很多的数据库的实现方式都不同,但是经过我们对SQL标准的学习,我们应该是可以总结出相同的方法的。
篇3:一个简单的mysql数据库分页的程序
下面是一个简单的php连接mysql数据库进行数据分页显示的模版.可以按注释说明信息进行修改,里面的sql语句是可以自己改的.
注意分析和观察里面相关分页部分的代码的书写和实现的方式.
$link = mysql_connect('localhost', 'root', '') or die('mysql database connect error');
mysql_select_db('your database') or die('the selected database is not exist');
?>
//这里插入你的html代码,
$sql = 'select count(*) count from your_table';
$result = mysql_query($sql) or die(mysql_errno.“: ”.mysql_error().“\n”);
$rs=mysql_fetch_object($result);
$recountCount = $rs->count;
$show = 20;
$totalPage = ceil($recountCount/$show);
$page = (isset($_GET['page']) && $_GET['page']>=0)? $_GET['page']: 0;
$isLast = ($page==($totalPage -1))? true: false;
$hasNoPre = ($page==0)? true: false;
$hasNoNext = ($page==$totalPage-1)? true: false;
$isFirst = ($page==0)? true:false;
$start = $page*$show;
mysql_free_result($result);
?>
//这里插入你的 html代码,
$sql = “select * from your_table limit $start,$show”;
$result = mysql_query($sql) or die(mysql_errno().“: ”.mysql_error().“\n”);
while($rs=mysql_fetch_object($result)){
//这 个循环里的html代码自己更具实际情况修改
echo $rs->art_id;
echo “
”;
}
mysql_free_result($result);
?>
$str = “共 $recountCount 条记录,当前第 ”.($page+1).“/$totalPage 页 ”;
$str .= $isFirst? “首页 ” : “首页 ”;
$str .= $hasNoPre? “上一页 ” : “上一页 ”;
$str .= $hasNoNext? “下一页 ” : “下一页 ”;
$str .= $isLast? “尾页 ” : “尾页”;
echo $str;
?>
篇4:讨论: SELECT TOP N问题 数据库教程
select|问题
Hi,everyone:今天继续讨论SELECT TOP N问题.
1. DB2的M 2
在前一篇讨论中提到,由于DB2的SUBQUERY不支持ORDER BY子句,因此无法构造M2. 实际上,DB2提供了一组新的函数,称为 OLAP FUNCTIONS, 可以很好的支持TOP N问题.
M2:
SELECT * FROM
( SELECT MYKEY,RANK() OVER (ORDER BY ORD_COL DESC) AS MYRANK
FROM MYTABLE ) AS RANKED_TABLE
WHERE MYRANK<=N
利用OLAP函数,除了上一篇中所提方法,DB2的M1又可以表示为:
SELECT * FROM
( SELECT MYKEY,ROW_NUMBER() OVER (ORDER BY ORD_COL DESC) AS MYRANK
FROM MYTABLE ) AS RANKED_TABLE
WHERE MYRANK<=N
2. 除了M1, M2两种TOP N外,还有一种被DB2称为 DENSE_RANK, (M3). 通过下例分别说明.
M1: TOP 3 -- 1(4,101), 2(5,101), 3(1, 100) 或者1(4,101), 2(5,101), 3(2, 100)
M2: TOP 3 -- 1(4,101), 1(5,101), 3(1, 100), 3(2, 100)
M3: TOP 3 -- 1(4,101), 1(5,101), 2(1, 100), 2(2, 100), 3(3,99)
在DB2中, M3如此实现:
SELECT * FROM
( SELECT MYKEY,DENSE_RANK() OVER (ORDER BY ORD_COL DESC) AS MYRANK
FROM MYTABLE ) AS RANKED_TABLE
WHERE MYRANK<=N
3. 为避免DBMSs的方言问题, M2,M3可以有如下标准(SQL 92)表示:
M2:
SELECT * FROM MYTABLE M1 WHERE N>
( SELECT COUNT(*) FROM MYTABLE M2
WHERE M2.ORD_COL>M1.ORD_COL);
注意: 两个比较符都是 >
M3:
SELECT * FROM MYTABLE M1 WHERE N>
( SELECT COUNT(DISTINCT M2.ORD_COL) FROM MYTABLE M2
WHERE M2.ORD_COL>M1.ORD_COL);
注意: 与M2的不同在于DISTINCT的使用
至于M1, 我目前还没有想到合适的标准写法,请补充.
4. 关于MYSQL
相对于各主流RDBMS来说,MYSQL要简单,幼稚地多. 在运行MYSQL时发现居然不支持SUBQUERY. 因此MYSQL中的TOP N问题要复杂一些.
SELECT * FROM MYTABLE, MYTABLE M2
WHERE M2.ORD_COL>=M1.ORD_COL
GROUP BY M1.MYKEY
HAVING COUNT(M2.ORD_COL) <=N
但是,这个语句是有问题的. 一个极端的例子: 当所有的ORD_COL的数值都一样时. 如果哪位想到了如何解决这个问题,请补充.
----------------------------------------------------------------------------------
各语句已经测试过, EXAMPLE:
create table mytable(mykey int, ord_col int);
insert into mytable values(1, 100);
insert into mytable values(2, 100);
insert into mytable values(3, 99);
insert into mytable values(4, 101);
insert into mytable values(5, 101);
fang 6/26/
篇5:Mysql和Oracle数据库中的分页查询
方法一:mysql数据库分页
<%
//定义每一页显示的记录
int pageSize = 3;
String strPageNo = request.getParameter(“pageNo”);
//记录当前页面
int pageNo;
//如果传入的当前页码为空,停留在第一页
if(strPageNo == null || strPageNo.equals(“”))
{
pageNo = 1;
}
else
{
try
//把传进来的字符串转化成数字
{
pageNo = Integer.parseInt(strPageNo.trim);
}
catch(NumberFormatException e)
{
pageNo = 1;
}
//如果页码小于或者等于0停留在第一页
if(pageNo<=0)
{
pageNo=1;
}
}
//连接数据库
Class.forName(“com.mysql.jdbc.Driver”);
Connection conn = DriverManager.getConnection
(“jdbc:mysql://localhost/bbs?user=root&password=mingming”);
Statement stCount = conn.createStatement();
ResultSet rsCount = stCount.executeQuery
(“select count(*) from article where pid=0”);//查询共有多少个根节点
rsCount.next();
int totalRecord = rsCount.getInt(1); //拿到所有的子节点,计算出总共有多少条记录
// 第一种方法 计算得到总的页数,如果能被整数,页数就是商,否则就是商+1
int totalPage =
totalRecord%pageSize==0 ? totalRecord/pageSize : totalRecord/pageSize +1;
//第二种方法 计算得到总的页数,在 总记录上+加一个pageSize然后减去1除页面的大小pageSize,取商
int totalRecords = rsCount.getInt(1);
totalPages = (totalRecords + PAGE_SIZE - 1)/PAGE_SIZE;
//如果当前页码大于总的页数,停在最后一页
if(pageNo>totalPage)
{
pageNo = totalPage;
}
//计算每一次分页时 的起始位置,注意起始是从0开始;
int startPos = (pageNo-1)*pageSize;
Statement st = conn.createStatement();
//进行分页查询,startPos是每一次分页的起始位置; pageSize是这一页要显示记录的大小
ResultSet rs = st.executeQuery
(“select * from article where pid =0 order by pdate desc limit ”+startPos+“,”+pageSize);
%>
分页后在页面的不同的显示方式:
方式一:在一个table中正常的显示:
<%
while(rs.next()){
%>
<%= rs.getString(“title”) %>//只显示每一个记录的title
<%
}
//关闭流
rs.close();
st.close();
conn.close();
%>
首页<%=1 %> 共<%=totalPage %>页 第<%=pageNo %>页 末页<%=totalPage %>
“>上一页
”>下一页
方式二:可以选择的显示:可以实现页面的跳转
<%
for(int i = 1;i<=totalPage;i++){
%>
<%=i %><%= pageNo==i?“selected”:“”%>>第<%=i %>页
<%
}
%>
方式三:可以直接进行页面的查找:
//提交到当前页面
<%=pageNo%>/>
方法二:Oracle数据库下的分页操作
分页查询
姓名
薪水
<%
//连接数据库,加载驱动
Class.forName(“oracle.jdbc.driver.OracleDriver”);
Connection ct = DriverManager.getConnection
(“jdbc:oracle:thin:@127.0.0.1:1521:ORCL”,“scott”,“tiger”);
Statement sm = ct.createStatement();
//总共有多少页
int pageCount = 0;
//总共有多少行记录
int rowCount = 0;
//每页有3行记录
int pageSize = 3;
//接收pageNow
String s_pageNow = (String)request.getParameter(“pageNow”);
//当前在第一页
int pageNow = 1;
if(s_pageNow != null)
{
//把s_pageNow转化为数值型
pageNow = Integer.parseInt(s_pageNow);
}
//查询表中共有多少条记录www.dnzg.cn
ResultSet rs = sm.executeQuery(“select count(*) from emp”);
if(rs.next())
{
rowCount = rs.getInt(1);
//如果整除就是商,否则就是商加上1 可以用三元表达式代替 rowCount%pageSize==0 ? rowCount/pageSize : rowCount/pageSize +1
if(rowCount%pageSize == 0)
{
pageCount = rowCount/pageSize;
}
else
{
pageCount = rowCount/pageSize +1;
}
}
//执行分页查询
rs = sm.executeQuery
(“select * from (select a1.*,rownum rn from(select * from emp) a1 where rownum<=”+pageNow*pageSize+“)where rn>=”+((pageNow-1)*pageSize+1)+“ ”);
while(rs.next())
{
out.println(“”);
out.println(“”+rs.getString(2)+“”);
out.println(“”+rs.getString(6)+“”);
out.println(“”);
}
//输出每一页要查找的连接
for(int i=1; i<=pageCount; i++)
{
out.print(“[”+i+“]”);
}
%>
篇6:如何实现SQL Server 快速web分页数据库
分页,就是按照某种规则显示分组数据集,但是在SQL Server 中,分页并不是十分容易就能够实现,在过去, 开发 人员通常需要自己编写程序,使用临时表格来实现分页功能,或者将所有的数据结果集返回到客户端,在客户端进行分页操作。从开发人员或者DBA的角度
分页,就是按照某种规则显示分组数据集,但是在SQL Server 中,分页并不是十分容易就能够实现。在过去,开发人员通常需要自己编写程序,使用临时表格来实现分页功能,或者将所有的数据结果集返回到客户端,在客户端进行分页操作。从开发人员或者DBA的角度来看,两种方法都不能令人满意。
随着SQL Server的发布,其中的一些排序函数使得开发人员编写数据分页程序变得更加简单和高效。这些新的排序函数提供了统计数据集的数目,对数据集归类,按照某种标准对数据集排序等功能。在这篇文章中,我将着重介绍新增加的ROW-NUMBER排序函数,它会根据你指定的分类标准将结果数据集进行分类,同时给数据集分配连续的页面。
一个分页的实例
我总是喜欢通过例子来介绍如何使用新技术,所以让我们来看看如何设计一个存储程序,使用ROW_NUMBER这一新函数来实现数据的自动分页。
首先,需要定义一些数据结构。我们定义一个SalesHistory表格,它包含的数据是我们在网上售出产品的销售记录。包括一些常见的销售信息,例如,所售产品、售出日期、产品售出价格等。下面的脚本就是创建这样的一个表格:
CODE:
IF OBJECT_ID('SalesHistory','U') >0
DROP TABLE SalesHistory
CREATE TABLE SalesHistory
(
SaleID INT IDENTITY(1,1),
Product VARCHAR(30),
SaleDate SMALLDATETIME,
SalePrice MONEY
)
运行列表A中的脚本则在上面创建的SalesHistory表中添加一些例子数据。
CODE:
列表A
DECLARE @i SMALLINT
SET @i = 1
WHILE (@i <=100)
BEGIN
INSERT INTO SalesHistory
(Product, SaleDate, SalePrice)
VALUES
('Computer', DATEADD(mm, @i, '3/11/1919'), DATEPART(ms, GETDATE()) + (@i + 57) )
INSERT INTO SalesHistory
(Product, SaleDate, SalePrice)
VALUES
('BigScreen', DATEADD(mm, @i, '3/11/1927'), DATEPART(ms, GETDATE()) + (@i + 13) )
INSERT INTO SalesHistory
(Product, SaleDate, SalePrice)
VALUES
('PoolTable', DATEADD(mm, @i, '3/11/1908'), DATEPART(ms, GETDATE()) + (@i + 29) )
SET @i = @i + 1
END
现在数据表中已经具有实例数据,
接下来我们看看如何调用程序来实现数据的分页显示。列表B包含这个程序的脚本内容。这个程序含有两个参数:1.页面大小(给定页面要显示的数据记录数目)2.目标页面(返回该页的数据记录)。
CODE:
列表B
CREATE PROCEDURE usp_SalesRecords
(
@PageSize FLOAT,
@TargetPage SMALLINT
)
AS
BEGIN
WITH Sales_CTE(PageNumber, SaleID, Product, SaleDate, SalePrice)
AS
(
SELECT
CEILING((ROW_NUMBER() OVER (ORDER BY SaleDate ASC))/@PageSize) AS PageNumber,
SaleID, Product, SaleDate, SalePrice
FROM SalesHistory FROM SalesHistory
)
SELECT
PageNumber, SaleID, Product, SaleDate, SalePrice
FROM
Sales_CTE
WHERE
PageNumber = @Targetpage
ENDCREATE PROCEDURE usp_SalesRecords
(
@PageSize FLOAT,
@TargetPage SMALLINT
)
AS
BEGIN
WITH Sales_CTE(PageNumber, SaleID, Product, SaleDate, SalePrice)
AS
(
SELECT
CEILING((ROW_NUMBER() OVER (ORDER BY SaleDate ASC))/@PageSize) AS PageNumber,
SaleID, Product, SaleDate, SalePrice
FROM SalesHistory FROM SalesHistory
)
SELECT
PageNumber, SaleID, Product, SaleDate, SalePrice
FROM
Sales_CTE
WHERE
PageNumber = @Targetpage
END
共2页: 1 [2] 下一页
原文转自:www.ltesting.net
★ 存储过程实现分页
★ select count from table where ..这句sql语句的作用
★ 经典sql语句
【浅谈mssql access数据库 top分页方法(精选6篇)】相关文章:
sql连接语句2023-07-30
SQL?Server数据库教学方法探索2023-12-24
计算机工程师简历2022-07-21
Java软件工程师转正申请书2023-08-27
计算机软件开发工程师简历2023-10-14
百度校园招聘web前端广州站笔试题2023-02-21
WEB开发工程师个人简历2022-07-09
论文:探讨IPTV系统中EPG模块框架的设计和实现2022-06-03
Wordpress 与 Qzone 和 Live Space 同步2023-06-17
检查Oracle数据库中不合理的sql语句数据库教程2023-01-19