pl/sql利用rownum取得排序后的部分行序列
我们使用oracle的人都知道可以通过rownum伪列得到查询结果序列前面的指定的行,为了下面更好的进行说明问题,我们先来创建一个数据表table1:
create table table1
(AAA integer primary key,
BBB varchar(30));
然后在table1中插入9条数据:
insert into table1 values (8, 'good');
insert into table1 values (7, 'morning');
insert into table1 values (20, 'afternoon');
insert into table1 values (2, 'have');
insert into table1 values (19, 'boy');
insert into table1 values (30, 'girl');
insert into table1 values (15, 'left');
insert into table1 values (26, 'think');
insert into table1 values (98, 'beautiful');
commit;
现在使用:
Select * from table1 where rownum < 4;
来得到前三个行。
AAA BBB
8 good
7 morning
20 afternoon
这没有问题,但如果你对rownum使用了大于号(>),则查询的结果集一定是空的。如:
Select * from table1 where rownum > 1;
无论表中有多少数据,都不会返回任何的数据。我们什么时候会用到rownum大于一个数字进行查询呢,这里先卖一个关子,后面再说。
再来说说排序和rownum的关系:
如果使用
Select * from table1 where rownum < 4 Order by AAA;
我这里查询出来的结果是:
AAA BBB
7 morning
8 good
20 afternoon
和前面没有Order By时的结果集数据是一样的,只是排了一个序,而我们期望的结果是:
AAA &nb
相关文档:
ROLLUP 运算符生成的结果集类似于 CUBE 运算符生成的结果集。 下面是 CUBE 和 ROLLUP 之间的具体区别: CUBE 生成的结果集显示了所选列中值的所有组合的聚合。 ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。 ROLLUP 优点: (1)ROLLUP 返回单个结果集,而 COMPUTE BY 返回多个结 ......
--查看CPU利用率
-- CREATE PROCEDURE sp_GetTop10_CPU () AS
BEGIN
SET NOCOUNT ON
DECLARE @cinterval char(8)
DECLARE @interval int
SET @cinterval = '00:00:10'
CREATE TABLE #thread
(
RUN INT NOT NULL,
SPI ......
http://blog.csdn.net/iamstillzhang/archive/2007/04/01/1548377.aspx
用mysql源码进行SQL解析
Mysql是通过yacc进行SQL语句解析的,这里介绍一下如何使用mysql的源码进行SQL语句解析。由于Mysql的源代码注释比较少,而且缺少资料,所有些地方研究不够深入。
1 Filed介绍
MY ......
SQL 中的 substring 函数是用来抓出一个栏位资料中的其中一部分。这个函数的名称在不同的资料库中不完全一样:
MySQL: SUBSTR(), SUBSTRING()
Oracle: SUBSTR()
SQL Server: SUBSTRING()
最常用到的方式如下 (在这里我们用SUBSTR()为例):
SUBSTR(str,pos): 由<str>中,选出所有从第<pos>位置开始 ......