目标

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

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数据库之对象视图、索引、序列、同义词

    Oracle数据库总结: Oracle数据库之集合运算 Oracle数据库之数据处理 Oracle数据库之建表和管理表 Oracle数据库之对象视图.索引.序列.同义词 视图: 语法: create ...

  2. Oracle 10g学习笔记(一)

    前言 很不好意思的坦白本人是刚刚学习oracle的菜鸟,以下内容是节取的书中一些值得注意的事项,因为只涉及oracle最初级的知识,并没有太深的内容,希望各位oralce高手们能够帮忙指点指点. Or ...

  3. 数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum分页,视图,序列,索引

    1.    oracle介绍 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的 ...

  4. Oracle学习:视图与索引

    一.视图 1.视图的概念:从表中抽出的逻辑上相关的数据集合 2.视图的特点: (1)视图是基于表(selete 产生的表): (2)视图是逻辑概念: (3)视图本身没有数据 3.视图的作用:可以简化查 ...

  5. 学习事务,视图和索引

    1.事务 什么是事务? 事务是作为单个逻辑工作单元执行的一系列操作. 事务有四种属性:原子性(Atomicity),一致性(Consistency),隔离性(Isolation),及持久性(Durab ...

  6. JAVA_WEB Oracle 10g学习: PL/SQL与Oracle间交互

    一.抽象的角色 抽象是对一个真实世界实体的高级描述或建模.它能排除掉无关的细节内容,使我们的日常生活更有条理.例如,驾驶一辆汽车时,我们是不需要知道它的发动机是如何工作的.由变速排档.方向盘.加速器和 ...

  7. goldengate for oracle 10g学习

    选用的是 a reporting configuration with a data pump on the source system + Loading data with a GoldenGat ...

  8. oracle 约束 Oracle 10g学习系列(5)

    这篇文章来自网络,写的挺好,转过来了.  维护数据的完整性 概述:数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则.在Oracle中,数据完整性可以使用约束.触发器.应用程序(过程.函数)三种方 ...

  9. oracle 10g学习之分组函数

    一. (1)分组查询语句的顺序 select ... from ... where ... group by ... having ... order by ... 注意:     where--&g ...

最新文章

  1. python打开电脑摄像头_Python调用摄像头
  2. asp.net 验证码
  3. web java工程的创建_简单JavaWeb工程创建
  4. JBoss模块示例–模块化Web应用程序
  5. java中的starts_Java Math类静态double nextAfter(double starts,double direction)示例
  6. MVC(Java , C# ,php)
  7. c++连接mysql的中文编码问题
  8. PHP页面跳转几种实现方法
  9. python从入门到放弃pdf下载-《Python3从入门到放弃》视频教程
  10. java中web错误返回码,Java-Web3j Transfer.sendFunds()返回错误“天然气...
  11. git gui怎么拉取项目代码_Gitee码云如何更新项目上的代码?
  12. ns手柄pc驱动_功能特点可以打满屏!北通宙斯白金版无线游戏手柄体验
  13. easy_ui之搭建后台界面(一)
  14. 解决“the security certificate for this site has been revoked.the site should not be trusted.”
  15. 2019icpc南京网络赛 Holy Grail(SPFA)
  16. 【单目3D目标检测】MonoFlex论文精读与代码解析
  17. Chrome谷歌浏览器的快捷键:
  18. python哈姆雷特词频统计_【Python】哈姆雷特字数统计
  19. 如何判断当前浏览器是IE11
  20. java 双屏_java – 双屏应用程序

热门文章

  1. python自学记录 pydev安装
  2. C/C++语言课程设计任务书
  3. 使用Java Mail接收 Gmail 电子邮件
  4. vue-cli history 本地开发刷新页面丢失_react 开发入门
  5. OSG仿真案例(7)——osg自动驾驶
  6. 服务器装系统提示获取分区失败,u盘安装系统分区错误解决方法
  7. php 农历日历,php下实现农历日历的代码_php实例
  8. wordpress直接处理$_post_实战:Drupal迁移到WordPress
  9. java simpleentry_使用Java流生成对象
  10. python可以做力扣的题吗_力扣周赛 198 - python 解答