目标

通过本章学习,您将可以:

l  描述视图

l  创建和修改视图的定义,删除视图

l  从视图中查询数据

l  通过视图插入, 修改和删除数据

l  使用“Top-N” 分析

l  创建, 维护, 和使用序列

l  创建和维护索引

l  创建同义词

视图描述

l  视图是一种虚表.

l  视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。

l  向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句.

l  视图向用户提供基表数据的另一种表现形式

为什么使用视图

l  控制数据访问

l  简化查询

l  避免重复访问相同的数据

创建视图

CREATE VIEW          empvu80

AS SELECT  employee_id, last_name, salary

FROM    employees

WHERE   department_id = 80;

修改视图

CREATE OR REPLACE VIEW empvu80

(id_number, name, sal, department_id)

AS SELECT  employee_id, first_name || ' ' || last_name,

salary, department_id

FROM    employees

WHERE   department_id = 80;

屏蔽 DML 操作

l  可以使用 WITH READ ONLY 选项屏蔽对视图的DML 操作

l  任何 DML 操作都会返回一个Oracle server 错误

CREATE OR REPLACE VIEW empvu10

(employee_number, employee_name, job_title)

AS SELECT         employee_id, last_name, job_id

FROM     employees

WHERE    department_id = 10

WITH READ ONLY;

Top-N 分析

查询工资最高的三名员工:

SELECT ROWNUM as RANK, last_name, salary

FROM  (SELECT last_name,salary FROM employees

ORDER BY salary DESC)

WHERE ROWNUM <= 3;

rownum“伪列”,数据表本身并没有这样的列,是oracle数据库为每个数据表“加上的”列,可以标识行号,默认情况下rownum按主索引来排序,若没有主索引则自然排序。

注意:对rownum只能使用<或<=,,而用=,>,>=都将不能返回任何数据。

使用rownum进行分页

select * from (

select rownum rn,e.*,from employees e

)

where rn>=(pageNum-1)*pageSize+1 and rn<=pageNum*pageSize

什么是序列?

序列: 可供多个用户用来产生唯一数值的数据库对象

l  自动提供唯一的数值

l  共享对象

l  主要用于提供主键值

l  将序列值装入内存可以提高访问效率

定义序列:

CREATE SEQUENCE sequence

[INCREMENT BY n]

[START WITH n]

[{MAXVALUE n | NOMAXVALUE}]

[{MINVALUE n | NOMINVALUE}]

[{CYCLE | NOCYCLE}]

[{CACHE n | NOCACHE}];

比如:

CREATE SEQUENCE dept_deptid_seq

INCREMENT BY 10

START WITH 120

MAXVALUE 9999

NOCACHE

NOCYCLE;

查询序列

l  查询数据字典视图 USER_SEQUENCES 获取序列定义信息

SELECT      sequence_name, min_value, max_value,

increment_by, last_number

FROM        user_sequences;

NEXTVAL 和 CURRVAL 伪列

l  NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用

l  CURRVAL 中存放序列的当前值

l  NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效

select dept_deptid_seq.nextval from dual;

SELECT      dept_deptid_seq.CURRVAL

FROM        dual;

序列应用:

INSERT INTO departments(department_id,

department_name, location_id)

VALUES      (dept_deptid_seq.NEXTVAL, //自增列

'Support', 2500);

修改序列

ALTER SEQUENCE dept_deptid_seq

INCREMENT BY 20

MAXVALUE 999999

NOCACHE

NOCYCLE;

删除序列

DROP SEQUENCE dept_deptid_seq;

索引

l  一种独立于表的模式对象, 可以存储在与表不同的磁盘或表空间中

l  索引被删除或损坏, 不会对表产生影响, 其影响的只是查询的速度

l  索引一旦建立, Oracle 管理系统会对其进行自动维护, 而且由 Oracle 管理系统决定何时使用索引. 用户不用在查询语句中指定使用哪个索引

l  在删除一个表时, 所有基于该表的索引会自动被删除

l  通过指针加速 Oracle 服务器的查询速度

l  通过快速定位数据的方法,减少磁盘 I/O

创建索引

CREATE INDEX         emp_last_name_idx

ON            employees(last_name);

什么时候创建索引

以下情况可以创建索引:

l  列中数据值分布范围很广

l  列经常在 WHERE 子句或连接条件中出现

l  表经常被访问而且数据量很大 ,访问的数据大概占数据总量的2%到4%

什么时候不要创建索引

下列情况不要创建索引:

l  表很小

l  列不经常作为连接条件或出现在WHERE子句中

l  查询的数据大于2%到4%

l  表经常更新

删除索引

DROP INDEX upper_last_name_idx;

同义词

使用同义词访问相同的对象:

l  方便访问其它用户的对象

l  缩短对象名字的长度

创建和删除同义词

CREATE SYNONYM  d_sum

FOR  dept_sum_vu;

DROP SYNONYM d_sum;

oracle 10g 学习之视图、序列、索引、同义词(9)的更多相关文章

  1. Oracle入门基础(十)一一数据库其他对象-视图/序列/索引/同义词

    SQL> --视图 SQL> create view empinfoview as select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname ...

  2. oracle 10g 学习之创建和管理表(7)

    目标 通过本章学习,您将可以: l  描述主要的数据库对象. l  创建表. l  描述各种数据类型. l  修改表的定义. l  删除,重命名和清空表. 常见的数据库对象 表.视图.序列.索引.同义 ...

  3. Oracle学习总结_day06_视图&序列&索引

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day 06 视图,索引,序列 视图 什么是视图: 视 ...

  4. oracle 10g 学习之服务器端安装(1)

    Oracle 简介 lOracle 是殷墟出土的甲骨文(oracle bone inscriptions)的英文翻译的第一个单词 lOracle 公司是全球最大的信息管理软件及服务供应商,成立于197 ...

  5. Oracle SQL Lesson (11) - 创建其他数据库对象(试图/序列/索引/同义词)

    schema(模式)一个用户下一组对象的集合,一般与用户名一致. 视图 CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias].. ...

  6. oracle 10g 学习之oracle管理(3)

    怎样将预先写好的sql脚本执行? select * from employees;→107条记录 利用 Oracle 企业管理器连接数据库服务器 点击打开以下界面: 此时已经连接成功了 用 Oracl ...

  7. oracle数据库表约束、视图、索引—该记录为本人以前微博的文章

    一.Oracle 数据库常用操作续关于创建表时创建约束1.创建表的时候增加约束----约束是定义表中的数据应该遵循的规则或者满足的条件----约束是建立在列上的,让某一列或者某几列数据之间有约束--- ...

  8. oracle 10g 学习之数据进行增删改查、数据库事务、约束(8)

    目标 通过本章学习,您将可以: l  使用 DML 语句 l  向表中插入数据 l  更新表中数据 l  从表中删除数据 l  控制事务 l  描述约束 l  创建和维护约束 数据控制语言 l     ...

  9. oracle 10g 学习之单行函数(5)

    目标 通过本章学习,您将可以: l  SQL中不同类型的函数. l  在 SELECT 语句中使用字符,数字和日期函数. l  描述转换型函数的用途. 字符函数 字符函数分为大小写控制函数和字符控制函 ...

随机推荐

  1. [Angularjs]ng-class,ng-class-even,ng-class-odd

    写在前面 最近在通过angularjs将数据绑定到前端,其中也涉及到很多新的东西,一些效果还是很有必要实现的.在使用中发现ng-class,ng-class-even.ng-class-odd的使用, ...

  2. 检验php用时

    <?php// 实例1 /** * @start time */function proStartTime() { global $startTime; $mtime1 = explode(&q ...

  3. apache LogFormat参数说明

    在apache的配置文件httpd.conf里一般都有类似于LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Refere ...

  4. java ssl https 连接详解 生成证书

    我们先来了解一下什么理HTTPS 1. HTTPS概念 1)简介 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全 ...

  5. Linux 下 Redis 安装详解

    文章来源:www.oschina.net/question/12_18065 redis作为NoSQL数据库的一种应用,响应速度和命中率上还是比较高效的.项目中需要用集中式可横向扩展的缓存框架,做了一 ...

  6. Altera的几个常用的Synthesis attributes

    各厂商综合工具,对HDL综合时都定义了一些综合属性这些属性可指定a declaration,a module item,a statement, or a port connection 不同的综合方 ...

  7. 暑假热身 E. 无聊的LSY

    LSY大牛没事就爱玩游戏,包括很多很无聊的游戏.某日,LSY大牛又找到了一个无聊的游戏:每一局游戏的开始,LSY大牛将代表自己的棋子放在一个线性棋盘的最左端(第0个格子,可以认为向右端无限延伸),接着 ...

  8. ZOJ3741 状压DP Eternal Reality

    E - Eternal Reality Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu S ...

  9. 使用pymongo需要手动关闭MongoDB Connection吗?

    答:Disconnecting will close all underlying sockets in the connection pool. If this instance is used a ...

  10. 【OpenStack】OpenStack系列5之Cinder详解

    源码下载安装 git clone -b stable/icehouse https://github.com/openstack/cinder.git pip install -r requireme ...