ITPub博客

首页 > 数据库 > 国内数据库 > 索引、视图、标准SQL测试方法

索引、视图、标准SQL测试方法

原创 国内数据库 作者:DMD_202007 时间:2020-09-21 18:33:49 0 删除 编辑

GBase8s 索引测试方法

-- '------------------ 索引管理-普通索引--------------------------------'

-- 建表,建一个表空间TS1,在表的一列上建普通索引,并指定索引的物理存储(初始簇大小为 50,下次分配簇数目为50,所在表空间为TS1)。伪SQL代码如下:

create table t(c1 int, c2 char(10), c3 date);

create index common_idx on T(C1) ;

-- 通过系统表查询索引的ID

select name, id from sysobjects where name='COMMON_IDX' and subtype$='INDEX';

-- 删除索引

drop index COMMON_IDX;

-- 清除测试数据和环境

drop table t;

-- '------------------ 索引管理-聚集索引--------------------------------'

-- 创建表,在第一列上建聚集索引

create table test_c(id int,name varchar(10));

create cluster index idx_c_id on test_c(id);

-- 通过系统表查询索引的ID

select name, id from sysobjects where name='IDX_C_ID' and subtype$='INDEX';

-- 删除聚集索引

Drop index idx_c_id;

-- 清除测试数据和环境

Drop table test_c;

-- '------------------ 索引管理-唯一索引--------------------------------'

-- 创建表,在第一列上建唯一索引

create table test_c(id int,name varchar(10));

create unique  index idx_test_c on TEST_C(ID);

-- 通过系统表查询索引的ID

select name, id from sysobjects where name='IDX_TEST_C' and subtype$='INDEX';

-- 删除唯一索引

drop index  idx_test_c ;

-- 清除测试数据和环境

drop table  test_c  ;

-- '------------------ 索引管理-函数索引--------------------------------'

-- 建表,并创建函数索引,执行查询计划,

create table t_1 (c1 int, c2 int, c3 char(20), c4 date, c6 varchar(30));

create index idx on t_1 (c1+c2);

explain select * from t_1 where c1+c2<20;

-- 建表,不创建函数索引,执行查询计划,

create table t_2(c1 int, c2 int, c3 char(20), c4 date, c6 varchar(30));

explain select * from t_2 where c1+c2<20;

-- 删除函数索引

drop index  idx ;

-- 清除测试数据和环境:

drop table t_1;

drop table t_2;

-- '------------------ 索引管理-位图索引--------------------------------'

-- 建表

create table t_31(c1 int, c2 char(10), c3 date);

-- 在表的第一列上创建位图索引,

create or replace bitmap index bm_idx on t_31(c1);

-- 查询索引id

select name, id from sysobjects where name='BM_IDX' and subtype$='INDEX';

-- 删除位图索引

drop index  bm_idx;

-- 清除测试数据和环境:

drop table t_31;

-- '------------------ 索引管理-位图连接索引--------------------------------'

-- 创建两张基表并插入数据:

create table t_32(c1 int not CLUSTER primary key, c2 char(10), c3 date);

insert into t_32 values(1, 'a','2012-01-02');

insert into t_32 values(2, 'b','2012-02-02');

insert into t_32 values(3, 'c','2012-03-02');

create table t_33(t1 int unique, t2 char(10), t3 date);

insert into t_33 values(1, 'aa','2012-01-02');

insert into t_33 values(11, 'a','2012-01-02');

commit;

-- 创建位图连接索引:

create or replace bitmap index b_idx on t_32(c1) from t_32, t_33 where t_32.c1=t_33.t1;

-- 进行两表的连接查询:

select * from t_32, t_33 where t_32.c1=t_33.t1 and t_33.t3='2012-01-02';

-- 删除索引:

drop index b_idx;

-- 清除测试数据和环境:

drop table t_32;

drop table t_33;

-- '------------------ 索引管理-分区索引--------------------------------'

-- 创建堆表的list全局分区索引

CREATE TABLE LIST_TABLE(C1 INT) STORAGE(BRANCH (2,4));

-- 创建全局分区索引;

create index IND_LIST_TABLE on LIST_TABLE(c1)  global ;

-- 删除索引

drop  index IND_LIST_TABLE ;

-- 创建堆表的范围全局分区索引

CREATE  TABLE  callinfo(

caller  CHAR(15),

callee  CHAR(15),

time        DATETIME,

duration    INT

)

PARTITION BY RANGE(time)(  

PARTITION p1 VALUES LESS THAN ('2010-04-01'),

PARTITION p2 VALUES LESS THAN ('2010-07-01'),

PARTITION p3 VALUES LESS THAN ('2010-10-01'),

PARTITION p4 VALUES EQU OR LESS THAN ('2010-12-31')  --'2010-12-31' 也可替换为MAXVALUE

)STORAGE(BRANCH (2,4));

create index IND_CALLINFO on CALLINFO(time)  global ;

-- 删除索引

drop  index  IND_CALLINFO ;

-- 创建list表的hash全局分区索引;

CREATE  TABLE  sales01(

sales_id    INT,

saleman CHAR(20),

saledate    DATETIME,

city        CHAR(10)

)

PARTITION BY HASH(city)(   

PARTITION p1,

PARTITION p2,

PARTITION p3,

PARTITION p4

)STORAGE(BRANCH (2,4));

create index IND_SALES01 on SALES01(city)  global ;

-- 删除索引

drop  index  IND_SALES01 ;

-- 清除测试数据和环境:删除表

drop table LIST_TABLE;

drop table callinfo;

drop table sales01 ;

-- '------------------ 索引管理-全文索引--------------------------------'

-- 创建表并插入数据:

create table t(c1 int, c2 char(50));

insert into t values(1,' 湖北省武汉市洪山区');

insert into t values(2,' 湖北省武汉市青山区');

insert into t values(3,' 湖北省武汉市汉阳区');

insert into t values(4,' 湖北省武汉市武昌区');

insert into t values(5,' 湖北省武汉市硚口区');

commit;

-- 在表的第二列上创建全文索引

CREATE CONTEXT INDEX cti_c2 ON t(c2) LEXER DEFAULT_LEXER;

-- 更新全文索引;

ALTER CONTEXT INDEX cti_c2 ON t REBUILD;

-- 增量更新:

ALTER CONTEXT INDEX cti_c2 ON t INCREMENT;

-- 执行全文索引查询;

SELECT * FROM t WHERE CONTAINS(c2,' 洪山区' or '青山区');

-- 删除全文索引

DROP CONTEXT INDEX cti_c2 ON t;

-- 清除测试数据和环境:删除表

drop table t;

exit

 

 

 

 

 

 

 

GBase8s 视图测试方法

-- '------------------ 视图管理-普通视图--------------------------------'

SET FEED OFF

--SET TIMING OFF

create table t_1(c1 int, c2 char(10), c3 varchar(20), c4 date);

insert into t_1 values(1,'a','test1','2016-09-01');

insert into t_1 values(2,'a','test2','2016-10-01');

insert into t_1 values(3,'a','test3','2016-11-01');

insert into t_1 values(4,'a','test4','2016-12-01');

insert into t_1 values(5,'a','test5','2017-01-01');

commit;

create view test_view  as select  c1+2, c2 from t_1 where c4 < '2016-12-01';

select * from test_view;

ALTER VIEW test_view  COMPILE;

update test_view  set c2='bb';

-- 清理环境

drop view test_view;

drop table t_1;

-- '------------------ 视图管理-物化视图--------------------------------'

create table t_1(c1 int, c2 char(10), c3 varchar(20), c4 date);

create table t_2(t1 int, t2 char(10), t3 varchar(20), t4 date);

insert into t_1 values(1,'a1','dm1','2016-12-25');

insert into t_1 values(2,'a2','dm2','2016-12-30');

insert into t_1 values(3,'a3','dm3','2016-12-31');

insert into t_2 values(1,'a1','dm1','2016-12-25');

insert into t_2 values(2,'a2','dm2','2016-12-23');

insert into t_2 values(3,'a3','dm3','2016-12-31');

commit ;

SP_INIT_JOB_SYS(1);  

create materialized view m_view(v1, v2, v3, v4)REFRESH WITH ROWID START WITH SYSDATE NEXT SYSDATE + 1 AS SELECT  t_1.c1, t_1.c3, t_2.t2, t_1.c4 FROM  t_1,t_2 where t_1.c1 = t_2.t1 and  t_1.c4<'2016_12-31';

select * from m_view;

alter materialized view m_view disable query rewrite;

refresh materialized view m_view complete;

-- 清理环境

drop materialized view m_view;

drop table t_1;

drop table t_2;

exit

 

GBase8s 标准SQL测试方法

-- '------------------SQL 功能-查询扩展语法--------------------------------'

-- '----------------------- with as ------------------------------------'

CREATE TABLE TEST1(I INT);

INSERT INTO TEST1 VALUES(1);

INSERT INTO TEST1 VALUES(2);

 

CREATE TABLE TEST2(J INT);

INSERT INTO TEST2 VALUES(5);

INSERT INTO TEST2 VALUES(6);

INSERT INTO TEST2 VALUES(7);

commit;

WITH CTE1(K) AS(SELECT I FROM TEST1 WHERE I > 1),

CTE2(G) AS(SELECT J FROM TEST2 WHERE J > 5)

SELECT K, G FROM CTE1, CTE2;

DROP TABLE TEST1;

DROP TABLE TEST2;

-- '----------------------- TOP ---------------------------------------'

CREATE TABLE TEST1(A INT,B INT);

INSERT INTO TEST1 VALUES(1,1);

INSERT INTO TEST1 VALUES(2,2);

INSERT INTO TEST1 VALUES(3,3);

INSERT INTO TEST1 VALUES(4,4);

INSERT INTO TEST1 VALUES(5,5);

commit;

SELECT TOP 2 A FROM TEST1;

SELECT TOP 1,2 B FROM TEST1;

DROP TABLE TEST1;

-- '----------------------- limit ---------------------------------------'

CREATE TABLE TEST1(A INT,B INT);

INSERT INTO TEST1 VALUES(1,1);

INSERT INTO TEST1 VALUES(2,2);

INSERT INTO TEST1 VALUES(3,3);

INSERT INTO TEST1 VALUES(4,4);

INSERT INTO TEST1 VALUES(5,5); 

commit;

select * from test1 limit 2;

select * from test1 limit 2,1; 

select * from test1 limit 3 offset 1;

DROP TABLE TEST1;

-- '----------------------- rownum ---------------------------------------'

CREATE TABLE TEST1(A INT,B INT);

INSERT INTO TEST1 VALUES(1,1);

INSERT INTO TEST1 VALUES(2,2);

INSERT INTO TEST1 VALUES(3,3);

INSERT INTO TEST1 VALUES(4,4);

INSERT INTO TEST1 VALUES(5,5);

commit;

SELECT * FROM test1 WHERE rownum < 3;

DROP TABLE TEST1;

-- '----------------------- 情况表达式 ---------------------------------------'

CREATE TABLE TEST1(A INT,B INT);

INSERT INTO TEST1 VALUES(1,1);

INSERT INTO TEST1 VALUES(2,2);

INSERT INTO TEST1 VALUES(3,3);

INSERT INTO TEST1 VALUES(4,4);

INSERT INTO TEST1 VALUES(5,5);

INSERT INTO TEST1 VALUES(15,5);

commit;

SELECT a,  

       CASE

          WHEN b> 3 THEN  ' 大于3'

          WHEN b <3 THEN ' 小于3'

          ELSE ' 等于3'

       END AS  结果

FROM test1;

DROP TABLE TEST1;

-- '----------------------- 层次查询 ---------------------------------------'

create table t1(id int ,high_id int);

insert into t1 values(1,null);

insert into t1 values(2,1);

insert into t1 values(3,1);

insert into t1 values(4,2);

insert into t1 values(5,3);

commit;

SELECT  * FROM t1 CONNECT BY PRIOR id=high_id START WITH id=1;

DROP TABLE T1;

-- '----------------------- ROLLUP ---------------------------------------'

drop table test;

create table test(id int ,name char(10),num int);

insert into test values(1,' 洪山',45);

insert into test values(1,' 汉口',78);

insert into test values(2,' 武昌',56);

insert into test values(3,' 蔡甸',89);

insert into test values(4,' 江夏',34);

insert into test values(5,' 武汉',23);

insert into test values(5,' 青山',67);

insert into test values(6,' 海淀',78);

commit;

select id,name,num,count(*) as A  from test group by rollup(id,name,NUM);

DROP TABLE TEST;

-- '----------------------- CUBE ---------------------------------------'

create table test(id int ,name char(10),num int);

insert into test values(1,' 洪山',45);

insert into test values(1,' 汉口',78);

insert into test values(2,' 武昌',56);

insert into test values(3,' 蔡甸',89);

insert into test values(4,' 江夏',34);

insert into test values(5,' 武汉',23);

insert into test values(5,' 青山',67);

insert into test values(6,' 海淀',78);

commit;

select id,name,count(*) as A  from test group by CUBE(id,name);

DROP TABLE TEST;

-- '-----------------------GROUPING SETS ---------------------------------------'

create table test(id int ,name char(10),num int);

insert into test values(1,' 洪山',45);

insert into test values(1,' 汉口',78);

insert into test values(2,' 武昌',56);

insert into test values(3,' 蔡甸',89);

insert into test values(4,' 江夏',34);

insert into test values(5,' 武汉',23);

insert into test values(5,' 青山',67);

insert into test values(6,' 海淀',78);

commit;

select id,name,num,count(*) as A  from test group by GROUPING SETS((id,name),num);

DROP TABLE TEST;

-- '----------------------- NULLS FIRST/LAST ---------------------------------------'

create table test(id int ,name char(10),num int);

insert into test values(1,' 洪山',45);

insert into test values(1,' 汉口',null);

insert into test values(2,' 武昌',56);

insert into test values(3,' 蔡甸',89);

insert into test values(4,' 江夏',34);

insert into test values(5,' 武汉',23);

insert into test values(5,' 青山',null);

insert into test values(6,' 海淀',78);

commit;

select id,name,num  from test order by num DESC NULLS FIRST;

select id,name,num  from test order by num DESC NULLS last;

DROP TABLE TEST;

-- '----------------------- MERGE 合并行语句 ---------------------------------------'

CREATE TABLE MERGE_T1 (C1 INT,C2 varchar2(10));

INSERT INTO MERGE_T1 VALUES(10,'a');

INSERT INTO MERGE_T1 VALUES(20,'b');

INSERT INTO MERGE_T1 VALUES(30,'c');

COMMIT;

CREATE TABLE MERGE_T2 (C1 INT,C2 varchar2(10));

INSERT INTO MERGE_T2 VALUES(30,'d');

INSERT INTO MERGE_T2 VALUES(40,'e');

INSERT INTO MERGE_T2 VALUES(50,'f');

commit;

merge into MERGE_T1 A using MERGE_T2 B on (A.c1=B.c1)  when matched then update set a.c2=b.c2 when not matched then insert values(b.c1,b.c2);

Select * from merge_t1;

DROP TABLE MERGE_T1;

DROP TABLE MERGE_T2;

-- '----------------------- (+) 操作符 ---------------------------------------'

CREATE TABLE PLUS_T1 (C1 INT,C2 VARCHAR2(10));

INSERT INTO PLUS_T1 VALUES(10,'A');

INSERT INTO PLUS_T1 VALUES(20,'B');

INSERT INTO PLUS_T1 VALUES(30,'C');

COMMIT;

CREATE TABLE PLUS_T2 (C3 INT,C4 VARCHAR2(10));

INSERT INTO PLUS_T2 VALUES(30,'D');

INSERT INTO PLUS_T2 VALUES(40,'E');

INSERT INTO PLUS_T2 VALUES(50,'F');

COMMIT;

CREATE TABLE PLUS_T3 (C1 INT,C2 VARCHAR2(10));

INSERT INTO PLUS_T3 VALUES(10,'A');

INSERT INTO PLUS_T3 VALUES(20,'B');

INSERT INTO PLUS_T3 VALUES(30,'C');

COMMIT;

CREATE TABLE PLUS_T4 (C3 INT,C4 VARCHAR2(10));

INSERT INTO PLUS_T4 VALUES(30,'D');

INSERT INTO PLUS_T4 VALUES(40,'E');

INSERT INTO PLUS_T4 VALUES(50,'F');

commit;

SELECT * FROM PLUS_T1 A, PLUS_T2 B WHERE A.C1=B.C3(+) ORDER BY A.C1;

SELECT * FROM PLUS_T3 A, PLUS_T4 B WHERE A.C1(+)=B.C3 ORDER BY B.C3;

DROP TABLE PLUS_T1;

DROP TABLE PLUS_T2;

DROP TABLE PLUS_T3;

DROP TABLE PLUS_T4;

-- '----------------------- 数组查询---------------------------------------'

SELECT * FROM ARRAY NEW INT[2]{1};

-- '----------------------- PIVOT 行列转换---------------------------------------'

create table tbl_test

(catalog VARCHAR(1),product VARCHAR(2),amount number);

INSERT INTO tbl_test VALUES('A','A1',1);

INSERT INTO tbl_test VALUES('A','A1',2);

INSERT INTO tbl_test VALUES('B','B1',3);

INSERT INTO tbl_test VALUES('B',B2'',4);

INSERT INTO tbl_test VALUES('B','B2',5);

INSERT INTO tbl_test VALUES('C','C1',6);

INSERT INTO tbl_test VALUES('C','C1',7);

INSERT INTO tbl_test VALUES('C','C2',8);

INSERT INTO tbl_test VALUES('C','C2',9);

COMMIT;

SELECT * FROM tbl_test;

select

listagg(producrt,',') within group( order by amount) as lst

from  tbl_test;

select

catalog,listagg(product,',') within  group( order by amount) as lst

from  tbl_test

 group by catalog;

select listagg(product||'-'||amount,',') within  group( order by amount) over (partition by catalog)

as lst

from tbl_test;

select * from tbl_test

pivot(

   sum(amount)

       for(catalog)

       in ('A','B','C')

)

order by 1;

drop table tbl_test;

-- '------------------ 数据插入/删除/修改扩展语法--------------------------------'

-- '----------------------- Insert all ----------------------------------------'

CREATE TABLE T1 (C1 INT,  C2 char(10));

CREATE TABLE T2 (C3 INT,  C4 char(10));

create table t(id int, name char(10));

INSERT INTO T VALUES(1,'AA');

INSERT INTO T VALUES(2,'BB');

INSERT INTO T VALUES(3,'CC');

commit;

insert all

into t1(c1,c2)

into t2(c3,c4)

select * from t;

select * from t1;

select * from t2;

DROP TABLE T1;

DROP TABLE T2;

DROP TABLE T;

-- '----------------------- Merge into ----------------------------------------'

CREATE TABLE T1 (C1 INT,  C2 VARCHAR(20));

CREATE TABLE T2 (C3 INT,  C4 VARCHAR(20));

INSERT INTO T1 VALUES(1,'T1_1');

INSERT INTO T1 VALUES(2,'T1_2');

INSERT INTO T1 VALUES(3,'T1_3');

INSERT INTO T2 VALUES(2,'T2_2');

INSERT INTO T2 VALUES(4,'T2_4');

commit;

MERGE INTO T1 USING T2 ON (T1.C1=T2.C3)  

WHEN MATCHED THEN UPDATE SET T1.C2=T2.C4  

WHEN NOT MATCHED THEN INSERT (C1,C2) VALUES(T2.C3, T2.C4);

select * from T1;

DROP TABLE T1;

DROP TABLE T2;

-- '----------------------- Update from ----------------------------------------'

create table test (id int,name varchar);

insert into test values(1,'aaa');

insert into test values(2,'aaa1');

insert into test values(3,'aaa2');

insert into test values(4,'aaa3');

commit;

update test set name = '222' from test  where id = 1;

select * from test;

DROP TABLE test;

-- '----------------------- Returning into ----------------------------------------'

CREATE TABLE TEST(C1 INT,C2 VARCHAR(20));

DECLARE

V1 VARCHAR(20);

BEGIN

  INSERT INTO TEST(C1,C2) VALUES(1,'ABCDEFGHIJKLMN') RETURNING C2 INTO V1;

  PRINT ('C2_DATA:'||V1);

END;

/

commit;

DROP TABLE TEST;

-- '----------------------- 标量函数---------------------------------------------'

-- '----------------------- 数值函数-------------------------------------------'

SELECT COSH(0)"Hyperbolic cosine of 0";

SELECT DEGREES(1.0);

SELECT EXP(4) "e to the 4th power";

SELECT GREATEST(1.2,3.4,2.1);

SELECT LEAST(1.2,3.4,2.1);

create table test(id int,name char(10),age int);

insert into test values(1,'aa',23);

insert into test values(2,'bb',34);

insert into test values(3,'cc',12);

insert into test values(4,'dd',65);

commit;

Select id, mod(age,10) from test;

SELECT POWER(3,2) "Raised";

SELECT RAND();

SELECT ROUND(15.20); 

SELECT SINH(1);

SELECT TANH(0);

SELECT TO_CHAR('01110' + 1);

DROP TABLE TEST;

-- '----------------------- 字符串函数-------------------------------------------'

SELECT BIT_LENGTH('ab');

SELECT   CHAR(66),CHAR(67),CHAR(68) , CHAR(54992);

SELECT CHAR_LENGTH(' 我们');

SELECT  DIFFERENCE('she', 'he');

SELECT  INSERT('That is a cake',2,3, 'his') ;

SELECT LCASE('ABC');

SELECT  LEFT ('computer science',10);

SELECT LEN ('hi, 你好  ');

SELECT LOCATE('man', 'The manager is a man', 10);

SELECT  POSITION(' 数' IN '通用数据库');

SELECT REPEAT ('Hello ',3);

SELECT  REPLICATE('aaa',3);

SELECT REVERSE('abcd');

select right('asdqwezxc',3);

SELECT CONCAT(CONCAT('Hello',SPACE(3)), 'world');

SELECT STRPOSDEC('hello');

SELECT STRPOSDEC('hello',3);

SELECT STRPOSINC ('hello');

SELECT STRPOSINC ('hello',3); 

SELECT STUFF('ABCDEFG',1,3, 'OOO');

select regexp_count('a 你好ac','a');

select 1 from dual where regexp_like('a 超越aa 自我aac','(a+)');

select regexp_instr('a 你好aaac','aa');

select regexp_substr('a 超越aa 自我aac','(a+)',2);

select regexp_replace('a 你好aaac','aa','bb');

SELECT OVERLAY('txxxxas' PLACING 'hom' FROM 2 FOR 4); 

select text_equal( 'a ',  'b ');

select blob_equal(0xFFFEE, 0xFFFEE);

select nlssort('abc');

create table TFun06(id  number,val varchar2(20),num number);

insert into TFun06 (ID, VAL, NUM) values (10, 'abc', 1);

insert into TFun06 (ID, VAL, NUM) values (10, 'abc', 2);

insert into TFun06 (ID, VAL, NUM) values (10, 'def', 3);

insert into TFun06 (ID, VAL, NUM) values (10, 'def', 4);

commit;

SELECT ID, WM_CONCAT(VAL) AS ENAMES FROM TFun06 GROUP BY ID ORDER BY ID;

drop table TFun06;

-- '----------------------- 日期时间函数-------------------------------------------'

SELECT ADD_DAYS( DATE '2000-01-12',1);

SELECT ADD_MONTHS(DATE '2000-01-31',1);

SELECT ADD_WEEKS( DATE '2000-01-12',1);

SELECT   CURDATE();

SELECT  CURTIME();

SELECT DATEDIFF(QQ, '2003-06-01', DATE '2002-01-01');

SELECT DAYNAME(DATE '2012-01-01');

SELECT DAYOFMONTH('2003-01-03');

SELECT DAYOFWEEK('2003-01-01');

SELECT DAYOFYEAR('2003-03-03');

SELECT GETDATE();

SELECT MONTHS_BETWEEN(DATE '1995-02-28', DATE '1995-01-31') "Months";

SELECT NEXT_DAY(DATE '2001-08-02', 'MONDAY');

SELECT TO_DATE('2003-06-19 08:40:36','YYYY-MM-DD HH:MI:SS');

SELECT WEEK(DATE '2003-02-10');

SELECT YEAR(DATE '2001-05-12');

-- '----------------------- 空值判断函数-------------------------------------------'

SELECT COALESCE(NULL,TIME '12:00:00',TIME '11:00:00');

SELECT IFNULL(NULL,3);

Select ISNULL(1,3);

Select nvl(1,4);

select null_equ(1,1);

-- '----------------------- 其它函数-------------------------------------------'

SELECT DECODE(1, 1, 'A', 2, 'B'); 

SELECT ISDATE('2012-10-9');

SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD');

SELECT TO_NUMBER('-123.4');   

-- '----------------------- 分析型函数-------------------------------------------'

-- '----------------------- 集函数-------------------------------------------'

create table STUDENT(id int primary key,name varchar(100),age int);

insert into STUDENT values(1,'wanglei',15);

insert into STUDENT values(2,'liping',16);

insert into STUDENT values(3,'zhangli',17);

commit;

select max(age) from STUDENT;

select min (age) from STUDENT;

select avg(age) from STUDENT;

select sum (age) from STUDENT;

select count(*) from STUDENT;

 create table TFun02(a number,b varchar2(10),c number);

insert into TFun02 values(1,'a',3);

insert into TFun02 values(2,'a',2);

insert into TFun02 values(1,'b',2);

insert into TFun02 values(1,'b',3);

insert into TFun02 values(2,'b',7);

insert into TFun02 values(3,'b',1);

insert into TFun02 values(8,'c',4);

commit;

-- 查询a列的总体方差:

select var_pop(a) from TFUN02;

-- 查询a列的样本方差:该函数返回非空集合的样本变量(忽略null)

select var_samp (a) from TFUN02;

-- 查询a列的方差:该函数返回表达式的变量

select variance(a) from TFUN02;

-- 查询a列的标准差:总体标准差。计算一组已经定下来数值的标准差

select stddev_pop(a) from TFUN02;

-- 查询a列的标准差:函数计算样本标准差,返回样本方差的算术平方根.

select stddev_samp(a) from TFUN02;

-- 查询a列的方差:返回样本标准差表达式

select stddev(a) from TFUN02;

-- 查询在区间(1,10)内a列的最大值:

select AREA_MAX(a,1,10) from TFUN02;

drop table STUDENT;

drop table TFun02;

-- '----------------------- 分析函数-------------------------------------------'

drop table test;

create table test(id int,name char(10),age int);

insert into test values(1,'aa',23);

insert into test values(2,'bb',34);

insert into test values(4,'cc',12);

insert into test values(5,'dd',65);

insert into test values(8,'ee',55);

insert into test values(15,'ff',34);

insert into test values(25,'gg',77);

insert into test values(35,'hh',23);

commit;

-- 其参数:over(partition by columnname1 order by columnname2)按columname1指定的字段进行分组排序,或者说按字段columnname1的值进行分组排序

SELECT  age,name,  AVG(id) OVER (PARTITION BY age)  AS AVGID FROM  test;

SELECT  age,name,  count(id) OVER (PARTITION BY age)  AS COUNTID FROM  test;

SELECT  age,name,  MAX(id) OVER (PARTITION BY age)  AS MAXID FROM  test;

SELECT  age,name,  MIN(id) OVER (PARTITION BY age)  AS MINID FROM   test;

SELECT  age, name, SUM(id) OVER (PARTITION BY age) AS SUMID FROM test;

select id ,age,rank() over(order by age) as rank from test;

select id ,age,DENSE_RANK() over(order by age) as rank from test;

select id ,age,ROW_NUMBER() over(order by age) as rank from test;

-- 测试first、last函数,创建测试表并插入数据:

CREATE TABLE TFun01

  (

    EMPNO NUMBER(4,0) primary key,

    ENAME VARCHAR2(10),

    JOB   VARCHAR2(9),

    MGR   NUMBER(4,0),

    SAL    NUMBER(7,2),

    COMM   NUMBER(7,2),

    DEPTNO NUMBER(2,0)

  );

Insert into TFun01 (EMPNO,ENAME,JOB,MGR,SAL,COMM,DEPTNO) values

(7369,'SMITH','CLERK',7902,800,null,20);

Insert into TFun01 (EMPNO,ENAME,JOB,MGR,SAL,COMM,DEPTNO) values

(7499,'ALLEN','SALESMAN',7698,1600,300,30);

Insert into TFun01 (EMPNO,ENAME,JOB,MGR,SAL,COMM,DEPTNO) values

(7521,'WARD','SALESMAN',7698,1250,500,30);

Insert into TFun01 (EMPNO,ENAME,JOB,MGR,SAL,COMM,DEPTNO) values

(7566,'JONES','MANAGER',7839,2975,null,20);

Insert into TFun01 (EMPNO,ENAME,JOB,MGR,SAL,COMM,DEPTNO) values

(7654,'MARTIN','SALESMAN',7698,1250,1400,30);

Insert into TFun01 (EMPNO,ENAME,JOB,MGR,SAL,COMM,DEPTNO) values

(7698,'BLAKE','MANAGER',7839,2850,null,30);

Insert into TFun01 (EMPNO,ENAME,JOB,MGR,SAL,COMM,DEPTNO) values

(7782,'CLARK','MANAGER',7839,2450,null,10);

Insert into TFun01 (EMPNO,ENAME,JOB,MGR,SAL,COMM,DEPTNO) values

(7788,'SCOTT','ANALYST',7566,3000,null,20);

Insert into TFun01 (EMPNO,ENAME,JOB,MGR,SAL,COMM,DEPTNO) values

(7839,'KING','PRESIDENT',null,5000,null,10);

Insert into TFun01 (EMPNO,ENAME,JOB,MGR,SAL,COMM,DEPTNO) values

(7844,'TURNER','SALESMAN',7698,1500,0,30);

Insert into TFun01 (EMPNO,ENAME,JOB,MGR,SAL,COMM,DEPTNO) values

(7876,'ADAMS','CLERK',7788,1100,null,20);

Insert into TFun01 (EMPNO,ENAME,JOB,MGR,SAL,COMM,DEPTNO) values

(7900,'JAMES','CLERK',7698,950,null,30);

Insert into TFun01 (EMPNO,ENAME,JOB,MGR,SAL,COMM,DEPTNO) values

(7902,'FORD','ANALYST',7566,3000,null,20);

Insert into TFun01 (EMPNO,ENAME,JOB,MGR,SAL,COMM,DEPTNO) values

(7934,'MILLER','CLERK',7782,1300,null,10);

commit;

select deptno,

           max(empno) keep(dense_rank first order by sal) empno,

           max(sal) maxsal

      from TFun01

     group by deptno;  

select deptno,

           max(empno) keep(dense_rank last order by sal) empno,

           max(sal) maxsal

      from TFun01

     group by deptno;  

    

drop table test;

drop table TFun01;

exit

 

官网:


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69980677/viewspace-2722999/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-07-31

  • 博文量
    36
  • 访问量
    31943