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,请扫描以下二维码:
这里写图片描述

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 母兔产仔无奶怎么办 仔兔十五天母兔没奶怎么办 兔子刚生下兔宝宝该怎么办 兔子不吃草超瘦怎么办 兔子喝水喝多了怎么办 狗吃了变质食物怎么办 狗崽20天没睁眼怎么办 刚生的小狗缺氧怎么办 狗狗生出来了怎么办 刚生的小狗狗死了怎么办 母狗生的死狗怎么办 狗生宝宝都死了奶水怎么办 狗狗生出来不动怎么办 兔子喝了84水怎么办 小狗喝了84水怎么办 天气热宝宝不爱喝水怎么办 狗脐带掉了出血怎么办 刚生的小狗没奶怎么办 家兔在笼子里下崽怎么办 小兔子不吃东西 精神不好怎么办 兔子要生宝宝了怎么办 宝宝让兔子咬了怎么办 兔子的右耳坏了怎么办 被小兔子咬了怎么办 打老鼠被老鼠咬了了怎么办 制作棒棒糖时木棍翘起怎么办 兔子被打后怕我怎么办 兔子后腿摔断了怎么办 兔子腿骨头断了怎么办 减肥老是控制不住吃怎么办 不爱吃主食爱吃零食怎么办 猫咪奶涨的很硬怎么办 斩魂技能乱加的怎么办 狗狗不吃东西还拉稀怎么办 狗狗拉稀不吃饭怎么办 狗狗几天不吃东西怎么办 狗狗不吃不喝怎么办 拖鞋洗了有臭味怎么办 拖鞋湿水了很臭怎么办 棉被上渗了酸奶怎么办 酸奶弄在衣服上怎么办