oracle学习笔记(6)

2019-03-22 09:36

8:查看每个职位的工资排名--在组内排序

SELECT ENAME,SAL,JOB,ROW_NUMBER() OVER(PARTITION BY JOB ORDER BY SAL DESC) MM FROM EMP_GH

9:查看每个职位的工资排名,若工资一致,排名一致

SELECT ENAME,SAL,JOB,RANK() OVER(PARTITION BY JOB ORDER BY SAL DESC) MM FROM EMP_GH

10:查看每个职位的工资排名,若工资一致,排名一致,不跳名次。

SELECT ENAME,SAL,JOB ,DENSE_RANK() OVER(PARTITION BY JOB ORDER BY SAL DESC) MM FROM EMP_GH

11:分别查看:同部门同职位,同职位,以及所有员工的工资总和 SELECT DEPTNO,JOB,SUM(SAL) FROM EMP_GH

GROUP BY ROLLUP(DEPTNO,JOB)

12:分别查看:同部门同职位,同职位,同部门以及所有员工的工资总和 SELECT DEPTNO,JOB,SUM(SAL) FROM EMP_GH

GROUP BY CUBE(DEPTNO,JOB)

13:分别查看同部门同职位和同职位的员工的工资总和 SELECT DEPTNO,JOB,SUM(SAL) FROM EMP_GH

GROUP BY GROUPING SETS((DEPTNO,JOB),JOB)

**********************************DAY05************************************** ****视图(VIEW)

***创建视图,视图名字规则,V_EMP_GH_DEPTNO_10

*** 以v开头_表名字_视图内容信息,在数据库中,不能出现相同的名字 视图不是正在存在的一张表,而是通过SQL语句查询后的到的 虚表 CREATE VIEW V_EMP_GH_DEPTNO_10

AS (SELECT ENAME,SAL,EMPNO,DEPTNO FROM EMP_GH WHERE DEPTNO=10)

SELECT * FROM V_EMP_GH_DEPTNO_10

*** 工作原理:先看from后面是表还是视图,如果是视图,就会找到相关的select语句,并执行,在执行

**** 原来的SELECT 语句,进行查询.

查结构 b

DESC V_EMP_GH_DEPTNO_10

*******视图分为简单视图,复杂视图

简单视图:该视图对应的SELECT语句不含有加工的操作,比如,avg,分组等

**可以进行DML操作,但实际上对视图的DML操作,就是对该视图数据来源的基础表

进行操作

复杂视图:除简单视图之外的视图都是复杂视图

**不能进行DML操作

***对视图进行修改

OR REPLACE,如果没有相关视图则创建一个新视图,如果有则在该视图上修改

CREATE OR REPLACE VIEW V_EMP_GH_DEPTNO_10 AS

SELECT EMPNO ID,ENAME NAME,SAL SALARY,DEPTNO FROM EMP_GH WHERE DEPTNO=10 *******简单视图

********插入 INSERT INTO

**再插入过程中,字段使用别名,如果 使用基础表中的要出现错误 INSERT INTO V_EMP_GH_DEPTNO_10(ID,NAME,SALARY,DEPTNO) VALUES(1021,'SB',9000,10)

SELECT * FROM EMP_GH

*******修改 ***UPDATE

修改过程中,将修改基础表, UPDATE V_EMP_GH_DEPTNO_10 SET SALARY=6000 WHERE NAME='SB'

***dml操作可能会对基础表进行数据污染, **通过视图表插入,但是,在视图内不可见

INSERT INTO V_EMP_GH_DEPTNO_10 VALUES(1021,'SB',2500,20) 或

UPDATE V_EMP_GH_DEPTNO_10 SET DEPTNO=20

上视图在插入中,deptno =20,不在该视图可是范围(deptno=10),造成数据污染 SELECT * FROM V_EMP_GH_DEPTNO_10 ******删除

在进行视图删除是,就是对基础表进行删除 DELETE FROM

DELETE FROM V_EMP_GH_DEPTNO_10

DELETE FROM V_EMP_GH_DEPTNO_10 WHERE DEPTNO=20

********对视图添加检查选项后,可以避免视图对基础表污染, 在创建视图最下面加 WITH CHECK OPTION

CREATE OR REPLACE VIEW V_EMP_GH_DEPTNO_10 AS

SELECT EMPNO ID,ENAME NAME,SAL SALARY,DEPTNO FROM EMP_GH WHERE DEPTNO=10 WITH CHECK OPTION

**修改

修改失败,视图是10部门的 UPDATE V_EMP_GH_DEPTNO_10 SET DEPTNO=20 **插入

插入失败,视图是10部门的,视图不可见 INSERT INTO V_EMP_GH_DEPTNO_10 VALUES(1020,'SB',1245,20) ***只读选项语句

WITH READ ONLY,只读

加入该句后,就可以让视图只能进行查询,不能进行DML操作,

CREATE OR REPLACE VIEW V_EMP_GH_DEPTNO_10 AS

SELECT EMPNO ID,ENAME NAME,SAL SALARY,DEPTNO FROM EMP_GH WHERE DEPTNO=10 WITH READ ONLY *****数据字典 -user_objects -user_views -user_tables

**查看数据库中视图名

SELECT OBJECT_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE='VIEW' **查看视图中的试图名

SELECT VIEW_NAME FROM USER_VIEWS **查看表里面有哪些表明

SELECT TABLE_NAME FROM USER_TABLES ***查看视图中的创建视图的select语句 SELECT TEXT FROM USER_VIEWS

*********复杂视图

** 创建复杂视图,每个部门的部门编号,名字,及该部门员工的工资最大值,最小值,平均

值及工资总和

CREATE VIEW V_DEPT_GH AS

SELECT D.DEPTNO,D.DNAME, MAX(E.SAL) MAN_SAL, MIN(E.SAL) MIN_SAL, AVG(E.SAL) SUM_SAL FROM EMP_GH E,DEPT_GH D WHERE E.DEPTNO=D.DEPTNO GROUP BY D.DEPTNO,D.DNAME

SELECT ENAME,SAL

FROM EMP_GH E ,V_DEPT_GH V WHERE E.DEPTNO = V.DEPTNO AND E.SAL

***删除视图

DROP VIEW V_EMP_10

************序列

***序列创建后,就可以用nextval进行数据填充,

** 序列也是数据库对象之一,作用是可以按照指定的方式生成一系列数字,最常用于为表的主键提供的数据 **创建

CREATE SEQUENCE SEQ_EMP_GH_ID START WITH 1--从1开始 INCREMENT BY 1--步进为1

序列支持两个伪列,以获取该序列的数字:

NEXTVAL:使序列生成下一个数字,若刚创建的序列,就将start WITH 指定的数字返回,以后就是

根据步长计算下一个数字后返回.序列不可以发生回退 CURRVAL:获取当前序列,最后生成的数字,不会发生步进效果 **在调用nextval过后才能调用currval,否则会出现错误 SELECT SEQ_EMP_GH_ID.CURRVAL FROM DUAL

INSERT INTO EMP_GH(EMPNO,ENAME,SAL,DEPTNO) VALUES(SEQ_EMP_GH_ID.NEXTVAL,'NB',5200,10)

SELECT * FROM EMP_GH

DELETE FROM EMP_GH WHERE ENAME='NB'

****删除序列

DROP SEQUENCE SEQ_EMP_GH_ID

**可以缓存,但是可能发生不连续的数字 ****UUID

gUID是一个32位不重复字符串 SELECT SYS_gUID() FROM DUAL

*****索引

加快查询效率,数据库自动调用

CREATE INDEX IDX_EMP_GH_ENAME ON EMP_GH(ENAME)--在emp_gh上的ename加索引

创建多列索引

CREATE INDEX IDX_EMP_GH_JOB_SAL ON EMP(JOB,SAL) SELECT EMPNO,ENAME,SAL,JOB FROM EMP ORDER BY JOB,SAL

select * FROM EMP_GH

**创建索引函数

CREATE INDEX EMP_GH_ENAME_UPPER_INDEX ON EMP_GH(UPPER(ENAME))

当做下面的查询时,会自动用于刚刚建立的索引: SELECT * FROM EMP

WHERE UPPER(ENAME)='KING' ****修改索引

从新整理索引

ALTER INDEX IDX_EMP_ENAME REBUILD ***删除索引

DROP INDEX EMP_GH_ENAME_UPPER_INDEX *********************约束 *****NOT NULL非空约束 NN

CONSTRAINT + 名 + NOT NULL 全写 属于列级约束,就是要修改该列同时进行 CREATE TABLE EMPLYEE_GH( ID NUMBER(6),

NAME VARCHAR2(30) NOT NULL,--简写,系统分配名字 SALARY NUMBER(7,2),


oracle学习笔记(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:形势与政策

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: