1)检索EMP中所有的记录。
2)列出工资在1000到2000之间的所有员工的ENAME,DEPTNO,SAL。 3)显示DEPT表中的部门号和部门名称,并按部门名称排序。 4)显示所有不同的工作类型。
5)列出部门号在10到20之间的所有员工,并按名字的字母排序。 6)列出部门号是20,工作是职员的员工。
7)显示名字中包含TH和LL的员工名字。
8)显示所有员工的名字(Ename)和报酬(Remuneration)。 9)显示在1983年中雇佣的员工。 10)查询每个部门的平均工资。
11)查询出每个部门中工资最高的职工。 12)查询出每个部门比平均工资高的职工人数。
第36页
第五章 视图、索引、序列和权限设置
一.上机目的
1.掌握视图(VIEW)在Oracle的应用。 2.了解索引的应用。
3.了解Oracle中权限机制。 4.掌握GRANT和REVOKE命令。
二.预备知识
1.视图(VIEW) 视图是一个“窗口”,通过它可以看或修改数据库表中的数据。视图来源于表或其他视图。视图只存为SELECT语句。它只是一个虚表而不是在物理存储器上的真正存在的数据表。视图没有自己的数据,它的数据来自基表。 视图的优点:
? 限制对数据库的访问。 ? ?
允许用户对复杂的查询进行简单的查询。
对特别的用户和应用程序提供数据独立性。视图对从多个数据库表中检索数据是透明的。视图也允许不同的用户对同一数据表有不同的数据窗口。 生成视图的命令格式:
CREATE [OR REPLACE] [FORCE] VIEW view-name
[(column1, column2, ……)]
AS SELECT statement
[WITH CHECK OPTION [CONSTRAINT constraint_name]];
a)、OR REPLACE选项:
如果OR REPLACE选项存在,那么即使有一个与view-name同名的视图已经存在,视图也将会生成替代老的视图。这个命令将不用删除老视图而生成新视图。 b)、FORCE选项:
这选项将强制生成视图,即使基表不存在或没有权限访问基表。但只有在基表存在时,视图才能使用。
c)、WITH CHECK OPTION[CONSTRAINT ]选项:
这选项指定通过视图来INSERT和UPDATE基表,不允许生成视图没有记录。 DELETE在下列情况中是受限制的: ? 连接条件
? ? ?
分组函数
GROUP BY 子句 DISTINTCT命令
? ROWNUM UPDATE在下列情况中是受限制的: ? ?
上面DELETE的情况
字段中有表达式(如 SAL*12)
第37页
INSERT在下列情况中是受限制的: ? 上面DELETE和UPDATE的情况 ? 任何NOT NULL字段 删除视图的命令格式: DROP VIEW viewname; 2.索引
Oracle索引有两个主要的目的: ? 加快包含主键的记录检索。
? 增强了在字段数据值中的唯一性,通常是主键值。
Oracle使用平衡B树索引。这是一个有效的方法。基表EMP的索引如图5-1所示: ADAMS ALLEN BLAKE JAMES ROWID ROWID SMITH ALLEN WARD JONES BLAKE CLARK FORD ROWID ROWID ROWID MARTIN BLAKE CLARK SCOTT KING KING JAMES JONES ROWID ROWID KING MARTIN MILLER TURNER ROWID ROWID TURNER ADAMS JAMES FORD MILLER MILLER SCOTT SMITH ROWID ROWID ROWID TURNER WARD ROWID ROWID 图5-1 B树索引
1)、生成索引命令格式:
CREATE [UNIQUE] INDEX index_name ON table (column [,
Drop index indexname;
3.序列(SEQUENCE)
序列是一数据库对象,利用它可生成唯一的整数。一般使用序列自动地生成主码值。一
第38页
个序列的值是由特殊的Oracle程序自动生成,因此序列避免了在应用层实现序列而引起的性能瓶颈。Oracle序列允许同时生成多个序列号,而每一个序列号是唯一的。当一个序列号生成时,序列是递增,独立于事务的提交或回滚。允许设计缺省序列,不需指定任何子句。该序列为上升序列,由1开始,增量为1,没有上限。 1)建立序列命令
CREATE SEQUENCE [user.]sequence_name [increment by n] [start with n]
[maxvalue n | nomaxvalue]
[minvalue n | nominvalue];
INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。
START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。 MAXVALUE:指定序列可生成的最大值。
NOMAXVALUE:为升序指定最大值为1027,为降序指定最大值为-1。 MINVALUE:指定序列的最小值。
NOMINVALUE:为升序指定最小值为1。为降序指定最小值为-1026。 2)更改序列命令
ALTERSEQUENCE [user.]sequence_name [INCREMENT BY n]
[MAXVALUE n| NOMAXVALUE ] [MINVALUE n | NOMINVALUE]; 修改序列可以:
? 修改未来序列值的增量。 ? 设置或撤消最小值或最大值。 ? 改变缓冲序列的数目。 ? 指定序列号是否是有序。 3)删除序列命令
DROP SEQUENCE [user.]sequence_name; 从数据库中删除一序列。 4.用户
1)创建用户
CREATE USER username IDENTIFIED BY password [DEFAULT TABLESPACE spacename];
IDENTIFIED BY:在用户登录时必须提供该口令。
DEFAULT TABLESPACE:标识用户建立对象的缺省表空间。
注:用户必须具有CREATE USER权限。 2)更改用户命令
ALTER USER username IDENTIFIED BY PASSWORD [DEFAULT TABLESPACE spacename];;
修改自己的口令不需权限,若修改其他用户的口令需要ALTER USER权限。 3)删除用户
DROP USER username [CASCADE]
第39页
注:用户使用该命令必须具有DROP USER系统权限。
5.权限设置 1)对象权限 对象权限 表 ALTER √ DELETE √ EXECUTE INDEX √ INSERT √ REFERENCES √ SELECT √ UPDATE √ 2)对象权限授权命令 视图 √ √ √ √ √ √ 序列 过程、函数、包 √ GRANT priv1, priv2, … ON object_name
TO user1, user2, … [WITH GRANT OPTION];
WITH GRANT OPTION:允许被授与者可将该对象权限授权给其他用户和角色。 3)回收对象权限命令 REVOKE privileges ON table or view FROM users;
三.上机内容
1.创建视图
生成一个部门号是10的视图: CREATE VIEW D10EMP AS
SELECT EMPNO, ENAME, SAL FROM EMP
WHERE DEPTNO = 10; View created。 2.视图应用
从视图D10EMP中查询出全部信息: SELECT * FROM D10EMP ORDER BY ENAME;
3.删除视图
DROP VIEW D10EMP;
4.创建索引
CREATE INDEX I_ENAME ON EMP(ENAME);
CREATE UNIQUE INDEX I_EMPNO ON EMP(EMPNO);
5.索引应用
第40页