DMSQL

本文详述了数据库管理的各种操作,包括创建、修改和删除用户、模式、表空间、索引、序列以及上下文等。此外,还涵盖了表和索引的定义、统计信息的设置、查询优化以及数据查询的基础语法,展示了数据库操作的全面性和深度。
摘要由CSDN通过智能技术生成

–数据库修改语句

ALTER DATABASE MOUNT/OPEN;

–用户定义语句

CREATE USER TEST IDENTIFIED BY "123123123";

–修改用户,会话空闲期无限制,最大连接数为10

ALTER USER TEST LIMIT SESSION_PER_USER 10,CONNECT_IDLE_TIME UNLIMITED;

–删除用户,使用CASCADE除数据库中该用户及其创建的所有对象被删除外,
–如果其他用户创建的表引用了该用户表上的住关键字或唯一
关键字,或者在该表上创建了试图,DM将自动删除相应的引用完整性约束及试图依赖关系

DROP USER TEST;

–模式定义,模式SCHEMA属于SYSDBA

CREATE SCHEMA SCHEMA1 AUTHORIZATION SYSDBA;

–设置当前模式语句,SYSDBA用户将当前的模式从SYSDBA切换到SALES

SET SCHEMA SALES;

–删除模式

DROP SCHEMA SCHEMA1 CASCADE;

–表空间定义语句

CREATE TABLESPACE TS1 DATAFILE 'D:\TS1.DBF' SIZE 128;

–修改表空间语句

ALTER TABLESPACE TS1 RENAME TO TS2;--将表空间TS1修改为TS2
ALTER TABLESPACE TS1 ADD DATAFILE 'D:\TS1.DBF' SIZE 128;--增加数据文件
ALTER TABLESPACE TS1 RESIZE DATAFILE 'D:\TS1.DBF' TO 200;--修改表空间数据文件大小

–修改表空间数据文件路径

ALTER TABLESPACE TS1 OFFLINE;
ALTER TABLESPACE TS1 RENAME DATAFILE 'D:\TS1.DBF' TO 'E:\TS1.DBF';
ALTER TABLESPACE TS1 ONLINE;

–修改表空间TS1的数据文件’D:\TS1.DBF’自动扩展属性为每次扩展10M,最大文件大小为1G

ALTER TABLESPACE TS1 DATAFILE 'D:\TS1.DBF' AUTOEXTEND ON NEXT 10 MAXSIZE 1024;

–修改表空间TS1缓冲池名为KEEP

ALTER TABLESPACE TS1 CACHE="KEEP";

–修改表空间为CORRUPT状态,注意只有表空间处于OFFLINE状态或表空间损坏的情况才允许使用

ALTER TABLESPACE TS1 CORRUPT;

–删除表空间,SYSDBA用户登录删除

DROP TABLESPACE TS1;

–表空间文件失效检查,该过程只在LINUX下有效

SP_FILE_SYS_CHECK();

–表空间失效文件恢复准备,在LINUX下有效

SP_TABLESPACE_PREPARE_RECOVER('TS1');

–表空间失效文件恢复,LINUX下有效,在SP_TABLESPACE_PREPARE_RECOVER及在OS系统内完成了数据文件的复制后调用

SP_TABLESPACE_RECOVER('TS1');

–创建HTS表空间

CREATE HUGE TABLESPACE HTS_NAME PATH 'E:\HTSSPACE';

–修改HTS表空间

ALTER HUGE TABLESPACE HTS_NAME ADD PATH 'E:\HTSPATH';

–删除HTS空间

DROP HUGE TABLESPACE HTS_NAME;

–索引定义语句

create index s1 on  address(ADDRESSID);
create UNIQUE index s2 on address(ADDRESSID,city);
create index index_t1 on T1(C1-C2);
drop index s1;
drop index s2;
drop index index_t1;

–使用空间索引
–创建含空间类型的表

--create table testgo (id int,name varchar(20),geo ST_polygon);

–创建空间索引

--create spatial index sipdx on testgo(name);

–删除空间索引

--drop index spidx;

–修改索引
–重命名索引

alter index index_t1 rename to index_t2;

–当索引为visible时

create table testindex (c1 int,c2 int);
create index index_c1 on testindex(c1);

–修改索引为invisible

alter index index_c1 invisible;
explain select c1 from testindex(c1);
drop table testindex;

–使用unusable将索引置为无效状态

create table testindex (c1 int,c2 int);
create index index_c1 on testindex(c1);
alter index index_c1 unusable;
create unique index u_index on testindex(c2);
insert into testindex values(1,1);
select * from testindex;

–使用rebuild将索引置为生效状态

alter index index_c1 rebuild;

–索引删除

drop index index_c1;

–位图连接索引定义
–创建位图连接索引,用于连接的列必须是维度表中的主键或存在唯一约束;如果是复合主键,则必须使用复合主键中的所有列;

create bitmap index bitindex on T1(T1.ID) from T1,T2 where T1.ID=T2.ID;
explain select * from T1,T2 where T1.ID=T2.ID and T1.name='houhou';

–删除位图索引

drop index bitindex;

–全文索引定义语句,全文索引必须在一般用户表上定义,字符类型才能建立全文索引

create context index index0001 on T1(name) lexer chinese_lexer;

–全文索引修改语句,T1表列上完全填充全文索引

alter context index index0001 on T1 rebuild;

–删除全文索引

drop CONTEXT index index0001 on T1;  

–数组索引定义语句, CREATE ARRAY INDEX <索引名> ON [<模式名>.] <表名> (<索引列定义>)

create array index index_array on t1(ID);

–数组索引引用,CONTAINS(<索引列名>,<val{,val}>)或者CONTAINS(<索引列名>,arr_var_exp)

create type arr_num1 is varray(1024) of number;--varray数组
create type arr_num2 is table of number;--嵌套表
create type arr_num3 is array number[];--动态
create type arr_num4 is array number[3];--静态
create class clsl as V arr_num1;end;
create table test (c1 clsl);
insert into test values(clsl (arr_num1(1,2,3)));
insert into test values(clsl(arr_num1(1,2)));
insert into test values(clsl(arr_num1(2,1)));
insert into test values(clsl(arr_num1(1,5)));
insert into test values(clsl(arr_num1(2,4)));
insert into test values(clsl(arr_num1(4,5,6)));
create array index idx on test(c1);--创建数组索引
select * from test where contains(c1,1,2,3);--使用数组索引

查询;
–嵌套表

declare
x arr_num2;
begin
x:=arr_num2();
x.extend(3);
x(1):=1;
x(2):=2;
x(3):=3;
select * from test where contains(c1,x);
end;

–动态数组

declare
x arr_num3;
begin
x:=new number[3];
x[1]:=1;
x[2]:=2;
x[3]:=3;
select * from test where contains(c1,x);
end;

–静态数组

declare
x arr_num4;
begin
x[1]:=1;
x[2]:=2;
x[3]:=3;
select * from test where contains(c1,x);
end;
drop table test;

–定义序列
–创建序列,间隔为10

create sequence seq_test increment by 10; 

–将序列的第一个值插入表test中

create table test (t1 int,t2 int,t3 int);
select * from test;
insert into test values (1,1,seq_test.nextval);
select * from test;

–修改序列
–创建完序列后直接修改序列的步长

create sequence seq1 increment by 1000 start with 5 nomaxvalue NOMINVALUE cache 10;
alter sequence seq1 increment by 1;
select seq1.nextval from dual;

–创建序列后使用nextval访问序列,然后修改步长

create sequence seq2 INCREMENT by 1000 start with 5 NOMAXVALUE NOMINVALUE nocache;
select seq2.nextval from dual;
alter sequence seq2 INCREMENT by 1;
select seq2.nextval from dual;

–修改序列的最小值

create sequence seq3 INCREMENT by 1 start with 100 MINVALUE 3;
alter sequence seq3 MINVALUE 2;

–删除序列

drop sequence seq3;

–域(domain),一个可允许值得集合,域在模式中定义,并由<域名>标识,域是用来约束由各种操作存储于基表中某列的有效值集
–创建域

create domain da int check (value<100);

–使用domain,使用某个域的用户必须具有该域的usage domain或usage any domain权限

create table T(ID DA);

–删除域,restrict表示仅当domain未被表列使用时才可以被删除,cascade表示级联删除

drop domain DA cascade;

–上下文(context),提供一组设置以及访问服务器运行时应用数据接口,通过这些接口可以有效控制应用数据的修改和访问
–创建上下文
–create [or replace] context using {<模式名.>};
–删除上下文
–drop context ;
–如何使用上下文
–第一步 创建package;

create or replace
package test_pk
as
procedure set_context
        (
                ts_name varchar,
                key     varchar,
                value   varchar);
procedure set_context
        (
                ts_name varchar,
                key     varchar,
                value varcahr,
                username varchar,
                client_id varcahr);
procedure get_context
        (
                ts_name varchar,
                key     varchar);
procedure clear_context
        (
                ts_name varchar,
                key     varchar,
                value   varchar);
end test_pk;
create or replace
package body test_pk
as
procedure set_context
        (
                ts_name varchar,
                key     varchar,
                value   varchar)
as
begin
        dbms_session.set_context(ts_name, key, value);
end;
procedure set_user_context
        (
                ts_name   varchar,
                key       varchar,
                value     varchar,
                username  varchar,
                client_id varchar)
as
begin
        dbms_session.set_context(ts_name, key, value, username, client_id);
end;
procedure clear_context
        (
                ts_name varchar,
                key     varchar,
                value   varchar)
as
BEGIN
        dbms_session.clear_context(ts_name, key, value);
end;
end test_pk;
select * from V$CONTEXT;

–创建context

create or replace context c_user01 using test_pk;

–设置namespace的属性

call test_pk.set_context('c_user01', 'u_k2', 'u_v2');

–查询该属性值

call test_pk.get_context('c_user01', 'u_k2');

–管理目录,目录是操作系统文件在数据库中的一个映射
–创建目录
–create [or replace] directory <目录名>as ‘DIR_PATH’;供具有create any directory权限的用户创建一个目录对象
–删除目录
–drop directory <目录名>;供具有create any directory权限的用户删除一个目录对象
–时区信息
–设置当前会话时区信息

set time zone '+9:00';

–设置当前会话时区为服务器所在地时区

set time zone local;

–日期串语言
–设置当前会话日期串为english

alter session set NLS_DATE_LANGUAGE=english;

–日期串格式
–设置当前会话的日期串格式为YYYY-MM-DD

alter session set NLS_DATE_FORMAT='YYYY-MM-DD';

–注释语句
–为表test创建注释信息

comment on table test is 'test表的注释';

–为表test的列name创建注释信息

comment on column test.name is 'test的name列';

–设置ini参数,INI参数分为手动、静态和动态三种类型,分别对应V$PARAMETER试图中type列的read only、in file
–SYS/SESSION。服务器运行过程中,手动(READ ONLY)参数不能被修改。静态和动态参数可以修改。
–静态(IN FILE)参数只能通过修改dm.ini文件进行修改,修改后重启服务器才能生效,为系统级参数,生效后会影响所有会话。
–动态(SYS和SESSION)参数可在dm.ini文件和内存同时修改,修改后及时生效。其中,SYS为系统级参数,修改后会影响所有会话;
–session为会话级参数,服务器运行过程中被修改时,之前创建的会话不受影响,只有新创建的会话使用新的参数值
–设置当前系统动态、会话级参数sort_buf_size参数值为200,要求延迟生效,对当前的session不生效,对后面创建的会话才生效,并且只修改内存

alter system set 'SORT_BUF_SIZE'=200 DEFERRED memory;

–设置静态参数MTAB_MEM_SIZE参数值为1200

alter system set 'MTAB_BUF_SIZE'=1200 SPFILE;

–设置只对当前会话起作用
–设置当前会话的HAGR_HASH_SIZE参数值为2000000

alter SESSION set 'HAGR_HASH_SIZE'=2000000;

–修改系统语句
–alter system <修改系统语句>;
–<修改系统语句>::=switch logfile | archive log current archive log current 和switch logfile功能一样,都是把新生成的,
–还未归档的联机日志进行归档。
–设置列、索引生成统计信息
–对SYSOBJECTS表上ID列生成统计信息,采样率的百分比为30%

stat 30 on SYS.SYSOBJECTS(ID);

–对purchasing模式下的索引s1生成统计信息,采样率为50%

stat 50 on index purchasing.s1;

–对SYSOBJECTS表上PID,NAME列生成统计信息,采样率的百分比为30%

stat 30 on sys.sysobjects(PID,NAME);

–设置表生成统计信息
–stat on [<模式名>.]<表名>[global];global用于MPP环境下各个节点数据收集统一生成统计信息。
–为SYSOBJECTS表生成统计信息

stat on SYS.SYSOBJECTS;
stat on TEST."COMMENT";

–用dbms_stats包查看统计信息

SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_STATS');
BEGIN
	dbms_stats.TABLE_STATS_SHOW('SYS','SYSOBJECTS');
end;
BEGIN
	dbms_stats.TABLE_STATS_SHOW('TEST','COMMENT');
end;

–查看登录信息

select * from sys.SYSACCHISTORIES;

–数据查询时数据库的核心操作

--create student
CREATE
        TABLE TEST.STUDENT
        (
                SNO   INT NOT NULL        ,
                SNAME VARCHAR(50) NOT NULL,
                SEX   CHAR(10) DEFAULT '男',
                DEPT  VARCHAR(50)         ,
                BIRTH DATE                ,
                AGE INT                   ,
                CLUSTER PRIMARY KEY (SON) ,
                CHECK(SEX  IN('男', '女')),
                CHECK(AGE   > 0
            AND AGE         < 100)                                                ,
                CHECK(DEPT IN('信息系', '计算机科学系', '数学系', '管理系', '中文系', '外语系', '法学系'))
        );
--create course
CREATE
        TABLE TEST.COURSE
        (
                CNO   INT NOT NULL        ,
                CNAME VARCHAR(50) NOT NULL,
                PRIMARY KEY(CNO)
        );
--create cs
CREATE
        TABLE TEST.CS
        (
                SNO INT NOT NULL                             ,
                CNO INT NOT NULL                             ,
                CJ  INT                                      ,
                FOREIGN KEY(SNO) REFERENCES TEST.STUDENT(SNO),
                FOREIGN KEY(CNO) REFERENCES TEST.COURSE(CNO) ,
                CHECK(CJ >= 0
            AND CJ       <= 100)
        );
INSERT INTO TEST.STUDENT VALUES(1,'张三','男','信息系','1998-09-09',23);
INSERT INTO TEST.STUDENT VALUES(2,'李四','男','计算机科学系','1997-09-09',24);
INSERT INTO TEST.STUDENT VALUES(3,'王五','女','数学系','1998-01-01',23);
INSERT INTO TEST.STUDENT VALUES(4,'陆六','女','管理系','1999-09-09',22);
INSERT INTO TEST.STUDENT VALUES(5,'顾七','女','中文系','1997-08-09',24);
INSERT INTO TEST.STUDENT VALUES(6,'小八','男','外语系','2000-09-09',21);
INSERT INTO TEST.STUDENT VALUES(7,'小九','男','法学系','1996-09-09',25);
INSERT INTO TEST.COURSE VALUES(1,'计算机');
INSERT INTO TEST.COURSE VALUES(2,'信息安全');
INSERT INTO TEST.COURSE VALUES(3,'操作系统');
INSERT INTO TEST.COURSE VALUES(4,'数据库');
INSERT INTO TEST.COURSE VALUES(5,'JAVA');
INSERT INTO TEST.COURSE VALUES(6,'WEB');
INSERT INTO TEST.COURSE VALUES(7,'高数');
INSERT INTO TEST.CS VALUES(1,1,99);
INSERT INTO TEST.CS VALUES(1,2,98);
INSERT INTO TEST.CS VALUES(2,3,99);
INSERT INTO TEST.CS VALUES(2,4,98);
INSERT INTO TEST.CS VALUES(3,5,99);
INSERT INTO TEST.CS VALUES(3,6,98);
INSERT INTO TEST.CS VALUES(4,7,99);
INSERT INTO TEST.CS VALUES(5,1,98);
INSERT INTO TEST.CS VALUES(6,3,99);
INSERT INTO TEST.CS VALUES(6,5,98);
INSERT INTO TEST.CS VALUES(7,7,99);
INSERT INTO TEST.CS VALUES(7,4,98);

–查询全体学生的学号与姓名

select sno,sname from TEST.STUDENT;

–查询全体学生的姓名、学号、所在系,并用别名显示出来

select sname 姓名,sno 学号,dept 所在系 from TEST.student;

–查询全体学生的详细信息

select * from TEST.student;

–查询选修了课程的学生学号

select DISTINCT(sno) 学号 from TEST.CS;

–查询年龄在20-23之间的学生的姓名、系别和年龄

select sname 姓名,dept 系别,age 年龄 from TEST.STUDENT where age >= 20 and age <= 23;

–查询信息系、数学系和计算机科学系生的姓名和性别

select sname 姓名, sex 性别 from TEST.student where dept in ('信息系','数学系','计算机科学系');

–查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别

select sname 姓名,sex 性别 from TEST.student where dept not in('信息系','数学系','计算机科学系');

–查询所有姓刘学生的姓名、学号和性别

select sname 姓名,sno 学号,sex 性别 from TEST.StUDENT where sname like '刘%';

–查询所有不姓刘的学生姓名

select sname 姓名 from TEST.STUDENT where sname not like '刘%';

–查询信息系、数学系和计算机科学系学生的姓名和性别

select sname,sex from TEST.STUDENT where dept in('信息系','数学系','计算机科学系');

–查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。

select sno,cj from TEST.CS where cno=3 order by cj desc;

–查询全体学生情况,查询结果按所在系升序排列,同一系中的学生按年龄降序排列。

select * from TEST.STUDENT order by dept ASC , age desc;

–查询学生总人数。

select count(*) from TEST.STUDENT;

–查询选修了课程的学生人数。

select count(distinct(sno)) from TEST.cs ;

–计算1号课程的学生平均成绩。

select avg(cj) from TEST.CS where cno=1;

–查询选修1号课程的学生最高分数。

select max(cj) from TEST.CS where cno=1;

–求各个课程号及相应的选课人数。

select count(*),cno  from TEST.CS group by cno;

–查询选修了3门以上课程的学生学号。

select sno from TEST.CS group by sno HAVING count(*)>=3;

–查询有3门以上课程是90分以上的学生的学号及(90分以上的)课程数。

select count(cno) 课程数,sno from TEST.cs where cj >= 90 group by sno having count(sno)>=3;

–查询每个学生选修课程的总分。

select sum(cj) 总成绩,sno from TEST.cs group by sno;

–查询所有选修了1号课程的学生姓名。

select distinct(s.sname) 姓名 from TEST.student s,TEST.cs,TEST.course c
where s.sno=cs.sno and cs.cno=c.cno and TEST.cs.cno=1

–create TT

CREATE TABLE TT(A INT);
INSERT INTO TT VALUES(5);
INSERT INTO TT VALUES(6);
INSERT INTO TT VALUES(7);

–create KK

CREATE TABLE KK(A INT);
INSERT INTO KK VALUES(5);
INSERT INTO KK VALUES(5);
INSERT INTO KK VALUES(6);
INSERT INTO KK VALUES(8);

–查询tt表中有的KK表中没有的

select * from TT except select * from KK;
select * from TT minus select * from KK;

–查询TT表和KK表中都由有的数据

select * from TT intersect select * from KK;

–带条件的查询
–学生年龄在21-23的姓名、系别

select sname,dept,age from TEST.STUDENT where age >= 21 and age <= 23;
select sname,dept,age from TEST.STUDENT where age between 21 and 23;

–查询信息系,中文系的学生信息

select * from TEST.STUDENT where dept in ('信息系','中文系');
select * from TEST.STUDENT where dept not in ('信息系','中文系');

–like '_‘匹配一个字符,’%'匹配多个字符

select * from TEST.STUDENT where sname like '张%';

–转移字符 escape ‘*’

select * from TEST.STUDENT where sname like '%李/_%' escape '/';

–使用.row进行like谓词的查询,表STUDENT中所有带系得列都被查询出来,相当于列查询用or连接

select * from TEST.STUDENT where TEST.STUDENT.row LIKE '%系';

–使用null谓词查询

select * from TEST.STUDENT where sname is null;
select * from TEST.STUDENT where sname is not null;

–组合逻辑
–用各种谓词组合成较复杂得条件查询
–集函数
–函数分类
–1.count(*);
–2.相异函数 avg|max|min|sum|count(distinct<列名>);
–3.完全集函数avg|max|min|count|sum([all]<表达式>);
–4.完全集函数VAR_POP、VAR_SAMP、VARIANCE、STDDEV_POP、STDDEV_SAMP、STDDEV;
–5.协方差函数COVAR_POP、COVAR_SAMP、CORR;
–6.首行函数FIRST_VALUE;
–7.求区间范围内最大值集函数AREA_MAX;
–8.FIRST/LAST集函数 AVG|MAX|MIN| COUNT|SUM([ALL]<表达式>) KEEP (DENSE_PANK FIRST|LAST ORDER BY子句);
–9.字符串集函数LISTAGG/LISTAGG2
–10.求中位数MEDIAN;
–求年龄最小

 select min(age) from TEST.STUDENT;

–求年龄最大

 select max(age) from TEST.STUDENT;

–求平均年龄

 select avg(age) from TEST.STUDENT;

–求学生总数

 select count(*) from TEST.STUDENT;

–求方差集函数variance、标准差函数STDDEV和样本标准差函数STDDEV_SAMP

select VARIANCE(age) from TEST.STUDENT;
 select STDDEV(age) from TEST.STUDENT;
 select STDDEV_SAMP(age) from TEST.STUDENT;

–求总体协方差集函数COVAR_POP、样本协方差COVAR_SAMP和相关系数CORR

 select COVAR_POP(age,sno) from TEST.STUDENT;
 select COVAR_SAMP(age,sno) from TEST.STUDENT;
 select CORR(age,sno) from TEST.STUDENT;

–首行函数first_value

select FIRST_VALUE(sname) from TEST.STUDENT;

–求区间范围内得最大函数area_max

select area_max(age,21,23) from TEST.STUDENT;

–求first/last集函数
–求LISTAGG/LISTAGG2集函数
–将sname列全部查询出来用’,'连接

select LISTAGG(sname,',') within group (order by sname) listagg from TEST.STUDENT;
 select LISTAGG2(sname,',') within group (order by sname) listagg from TEST.STUDENT;

–求MEDIAN集函数
–求按照dept分组后,各组内的age的中位数

select median(age) from TEST.STUDENT group by(dept);

–分析函数
–1. COUNT(*);
–2. 完全分析函数 AVG|MAX|MIN| COUNT|SUM([ALL]<值表达式>),这 5 个分析函数的参数和作为集函数时的参数一致;
–3. 方差函数 VAR_POP、VAR_SAMP、VARIANCE、STDDEV_POP、STDDEV_SAMP、STDDEV;
–4. 协方差函数 COVAR_POP、COVAR_SAMP、CORR;
–5. 首尾函数 FIRST_VALUE、LAST_VALUE;
–6. 相邻函数 LAG 和 LEAD;
–7. 分组函数 NTILE;
–8. 排序函数 RANK、DENSE_RANK、ROW_NUMBER;
–9. 百分比函数 PERCENT_RANK、CUME_DIST、RATIO_TO_REPORT、PERCENTILE_CONT、NTH_VALUE;
–10. 字符串函数 LISTAGG;
–11. 指定行函数 NTH_VALUE。
–查看版本

select *,id_code from SYS."V$VERSION"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值