ORACLE和SYBASE数据库中实现数据查询条数限制的SQL语句实现

简介: 一、概述 对于某些需要通过数据库与大量数据打交道的软件来说,处理性能相当的重要。为了保证软件能够将所有数据处理完而不至于崩溃,分批处理的思想应运而生。

一、概述
对于某些需要通过数据库与大量数据打交道的软件来说,处理性能相当的重要。为了保证软件能够将所有数据处理完而不至于崩溃,分批处理的思想应运而生。分批处理的具体做法是编写SQL语句,每次返回规定条数的数据给软件处理,待这一批数据处理完之后,再接着处理下一批。
本文通过对具体的数据库表(tb_employeeinfo)的操作过程,展示了ORACLE和SYBASE数据库中分批处理SQL语句的编写方法。

二、ORACLE数据库中的处理
首先,建立tb_employeeinfo表,其定义如下:

begin
execute 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    EMPLOYEEAGE
A1000         ZhangSan        20
A1001         LiSi            21
A1002         WangWu          21
A1003         ZhouLiu         22
A1004         SunQi           22

三、SYBASE数据库中的处理
首先,建立tb_employeeinfo表,其定义如下:

if exists(select * from sysobjects where name='tb_employeeinfo')
    drop table tb_employeeinfo
go
create 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
)
go
create unique index idx1_tb_employeeinfo on tb_employeeinfo(employeeno)
go
print '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 5
select employeeno, employeename, employeeage from tb_employeeinfo
set 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 5
select 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,请扫描以下二维码:
这里写图片描述

目录
相关文章
|
15天前
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
|
27天前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
86 10
|
20天前
|
SQL 关系型数据库 MySQL
|
1月前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
40 7
|
1月前
|
Oracle 关系型数据库 数据库
oracle数据库技巧
【10月更文挑战第25天】oracle数据库技巧
27 6
|
1月前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
21 5
|
29天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
19 2
|
18天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
32 1
|
21天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
35 4
|
27天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
151 1

推荐镜像

更多