ORACLE和SYBASE数据库中实现数据查询条数限制的SQL语句实现
来源:互联网 发布:中文域名没人用 编辑:程序博客网 时间:2024/05/16 06:25
一、概述
对于某些需要通过数据库与大量数据打交道的软件来说,处理性能相当的重要。为了保证软件能够将所有数据处理完而不至于崩溃,分批处理的思想应运而生。分批处理的具体做法是编写SQL语句,每次返回规定条数的数据给软件处理,待这一批数据处理完之后,再接着处理下一批。
本文通过对具体的数据库表(tb_employeeinfo)的操作过程,展示了ORACLE和SYBASE数据库中分批处理SQL语句的编写方法。
二、ORACLE数据库中的处理
首先,建立tb_employeeinfo表,其定义如下:
beginexecute immediate 'drop table tb_employeeinfo CASCADE CONSTRAINTS';EXCEPTION WHEN OTHERS THEN NULL;end;/create table tb_employeeinfo( employeeno varchar2(20) not null, -- no. of employee employeename varchar2(20) not null, -- name of employee employeeage int not null -- age of employee);create unique index idx1_tb_employeeinfo on tb_employeeinfo(employeeno);prompt 'create table tb_employeeinfo ok';commit;
接着,在tb_employeeinfo表中插入7条数据,如下:
insert into tb_employeeinfo(employeeno, employeename, employeeage) values('A1000', 'ZhangSan', 20);insert into tb_employeeinfo(employeeno, employeename, employeeage) values('A1001', 'LiSi', 21);insert into tb_employeeinfo(employeeno, employeename, employeeage) values('A1002', 'WangWu', 21);insert into tb_employeeinfo(employeeno, employeename, employeeage) values('A1003', 'ZhouLiu', 22);insert into tb_employeeinfo(employeeno, employeename, employeeage) values('A1004', 'SunQi', 22);insert into tb_employeeinfo(employeeno, employeename, employeeage) values('A1005', 'LiuBa', 23);insert into tb_employeeinfo(employeeno, employeename, employeeage) values('A1006', 'ChenShi', 25);
如果我们想要一次性从tb_employeeinfo表中查询出5条数据,该如何处理呢?
ORACLE数据库中有一个rownum用在查询(select)语句中来限制每次执行之后返回的数据条数。例如,本次要从tb_employeeinfo表中返回5条数据,则编写SQL语句如下:
select employeeno, employeename, employeeage from tb_employeeinfo where rownum<=5;
执行结果如下:
SQL> select employeeno, employeename, employeeage from tb_employeeinfo where rownum<=5;EMPLOYEENO EMPLOYEENAME EMPLOYEEAGEA1000 ZhangSan 20A1001 LiSi 21A1002 WangWu 21A1003 ZhouLiu 22A1004 SunQi 22
三、SYBASE数据库中的处理
首先,建立tb_employeeinfo表,其定义如下:
if exists(select * from sysobjects where name='tb_employeeinfo') drop table tb_employeeinfogocreate table tb_employeeinfo( employeeno varchar(20) not null, -- no. of employee employeename varchar(20) not null, -- name of employee employeeage int not null -- age of employee)gocreate unique index idx1_tb_employeeinfo on tb_employeeinfo(employeeno)goprint 'create table tb_employeeinfo ok'go
接着,在tb_employeeinfo表中插入7条数据,如下:
insert into tb_employeeinfo(employeeno, employeename, employeeage) values('A1000', 'ZhangSan', 20)insert into tb_employeeinfo(employeeno, employeename, employeeage) values('A1001', 'LiSi', 21)insert into tb_employeeinfo(employeeno, employeename, employeeage) values('A1002', 'WangWu', 21)insert into tb_employeeinfo(employeeno, employeename, employeeage) values('A1003', 'ZhouLiu', 22)insert into tb_employeeinfo(employeeno, employeename, employeeage) values('A1004', 'SunQi', 22)insert into tb_employeeinfo(employeeno, employeename, employeeage) values('A1005', 'LiuBa', 23)insert into tb_employeeinfo(employeeno, employeename, employeeage) values('A1006', 'ChenShi', 25)
如果我们想要一次性从tb_employeeinfo表中查询出5条数据,该如何处理呢?
在SYBASE数据库中,可以利用“set rowcount X”语句来实现查询条数的限制。例如,本次要从tb_employeeinfo表中返回5条数据,则编写SQL语句如下:
set rowcount 5select employeeno, employeename, employeeage from tb_employeeinfoset rowcount 0
执行结果如下:
employeeno employeename employeeage A1000 ZhangSan 20 A1001 LiSi 21 A1002 WangWu 21 A1003 ZhouLiu 22 A1004 SunQi 22
注意,在设置了查询条数为5并查询成功之后,一定要有“set rowcount 0”语句,否则在下次执行的时候,就最多只能返回5条数据。
例如,我们先执行如下语句:
set rowcount 5select employeeno, employeename, employeeage from tb_employeeinfo
则此时返回的结果与上面一样。
再执行如下语句(本意是要将7条语句都查询出来):
select employeeno, employeename, employeeage from tb_employeeinfo
但此时的结果仍然只返回了5条,与我们的本意不符。
因此,在SYBASE数据库中,“set rowcount X”语句一定要与“set rowcount 0”语句配对使用。
四、总结
相比本文中的数据表,在实际的软件项目中的数据表的字段要更多一些,数据量也要更大一些,在查询语句中也有可能会带有一些其它条件,但基本的SQL语句编写模式是一致的。大家可以参照来编写对应的SQL语句。
本人微信公众号:zhouzxi,请扫描以下二维码:
- ORACLE和SYBASE数据库中实现数据查询条数限制的SQL语句实现
- oracle数据库中查询连接数的实用sql语句
- SQL、MySQL、Oracle、 Sqlite、Informix数据库查询指定条数数据的方法
- SQL、MySQL、Oracle、 Sqlite、Informix数据库查询指定条数数据的方法
- 在oracle数据库中需要查询出前8条记录的sql语句怎么写
- oracle数据库实现行转列和列转行的Sql语句
- oracle:两条sql语句实现层次查询的反序权值计算与输出
- 探讨在1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页
- 在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页
- SQL查询数据库中所有表的记录条数
- 让数据库中始终保持N条记录.sql语句实现
- PHP查询数据库中满足条件的记录条数(两种实现方法)
- PHP查询数据库中满足条件的记录条数(二种实现方法)
- Oracle中实现分页的SQL语句
- Oracle中实现分页的sql语句
- 用一条SQL语句实现向数据库中插入多条记录的方法
- 用一条SQL语句实现向数据库中插入多条记录的方法
- sql语句,限制返回记录条数
- Leetcode Letter Combinations of a Phone Number
- php运行模式
- BeautifulSoup中解决乱码问题
- Android 不规则图像填充 小玩着色游戏
- http 和 tcp
- ORACLE和SYBASE数据库中实现数据查询条数限制的SQL语句实现
- 2015.5.9安卓笔记之sd卡和settings应用
- mysqldump导出sql中insert语句的问题
- HDU 4046 Panda(线段树单点更新)
- MySql二进制和源码安装介质的选择
- 游戏的衰落,更迭的结果
- 欢迎页面(Welcome)
- Android应用程序UI硬件加速渲染环境初始化过程分析
- 清除所有的mobileprovision