Oracle基础笔记十

第十章 视图


1.视图:从表中抽出的逻辑上相关的数据集合。

视图是一种虚表。

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

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

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

2.为什么使用视图

控制数据访问

简化查询

避免重复访问相同的数据

3.分类:简单视图和复杂视图

特性           简单视图       复杂视图

表的数量        一个       一个或多个

函数            没有                有

分组            没有         有

DML 操作        可以       有时可以

4.创建视图

4.1在 CREATE VIEW 语句中嵌入子查询

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view

[(alias[, alias]...)]

AS subquery

[WITH CHECK OPTION [CONSTRAINT constraint]]

[WITH READ ONLY [CONSTRAINT constraint]];

例子:子查询可以是复杂的 SELECT 语句

create or replace view empview

as

select employee_id emp_id,last_name name,department_name

from employees e,departments d

Where e.department_id = d.department_id

CREATE VIEW empvu80

AS SELECT  employee_id, last_name, salary

FROM    employees

WHERE   department_id = 80;

描述视图结构  DESCRIBE empvu80

4.2创建视图时在子查询中给列定义别名

CREATE VIEW salvu50

AS SELECT  employee_id ID_NUMBER, last_name NAME,

salary*12 ANN_SALARY

FROM    employees

WHERE   department_id = 50;

查询视图  SELECT *

FROM salvu50;

复杂视图举例:

CREATE VIEW dept_sum_vu

(name, minsal, maxsal, avgsal)

AS SELECT d.department_name, MIN(e.salary),

MAX(e.salary),AVG(e.salary)

FROM      employees e, departments d

WHERE     e.department_id = d.department_id

GROUP BY  d.department_name;

5.修改视图

使用CREATE OR REPLACE VIEW 子句修改视图

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;

CREATE VIEW 子句中各列的别名应和子查询中各列相对应

视图中使用DML的规定:

可以在简单视图中执行 DML 操作

当视图定义中包含以下元素之一时不能使用delete:

组函数

GROUP BY 子句

DISTINCT 关键字

ROWNUM 伪列

当视图定义中包含以下元素之一时不能使用update:

组函数

GROUP BY子句

DISTINCT 关键字

ROWNUM 伪列

列的定义为表达式

当视图定义中包含以下元素之一时不能使insert:

组函数

GROUP BY 子句

DISTINCT 关键字

ROWNUM 伪列

列的定义为表达式

表中非空的列在视图定义中未包括

6.屏蔽 DML 操作

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

任何 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;

7.删除视图

删除视图只是删除视图的定义,并不会删除基表的数据

DROP VIEW view;

8.Top-N 分析

Top-N 分析查询一个列中最大或最小的 n 个值:

最大和最小的值的集合是 Top-N 分析所关心的 。

查询最大的几个值的 Top-N 分析:

SELECT [column_list], ROWNUM

FROM   (SELECT [column_list]

FROM table

ORDER  BY Top-N_column)

WHERE  ROWNUM <=  N;

注意:

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

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

SELECT ROWNUM as RANK, last_name, salary

FROM  (SELECT last_name,salary FROM employees

ORDER BY salary DESC)

WHERE ROWNUM <= 3;

select *

from(

select rownum rn,employee_id,salary

from(

select employee_id,salary,last_name

from employees

order by salary desc

)

)where rn <=50 and rn >40


时间: 2024-10-25 14:29:05

Oracle基础笔记十的相关文章

Oracle基础笔记十四

第十四章 高级子查询 1.子查询 子查询 (内查询) 在主查询执行之前执行 主查询(外查询)使用子查询的结果 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM  table); 问题:查询工资大于149号员工工资的员工的信息 SELECT last_name FROM   employees WHERE  salary > (SELECT salary FROM   employees WHERE

Oracle基础笔记十二

第十二章 用户控制权限 1.权限: 数据库安全性:系统安全性和数据安全性 系统权限: 对于数据库的权限 对象权限: 操作数据库对象的权限 2.系统权限 超过一百多种有效的权限 数据库管理员具有高级权限以完成管理任务,例如: 创建新用户 删除用户 删除表 备份表 2.1 DBA 使用 CREATE USER 语句创建用户 CREATE USER user IDENTIFIED BY   password; CREATE USER  scott IDENTIFIED BY   tiger; 2.2

Oracle学习笔记十 使用PL/SQL

PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制结构,可用于创建存储过程.触发器和程序包,给SQL语句的执行添加程序逻辑,与 Oracle 服务器和 Oracle 工具紧密集成,具备可移植性.灵活性和安全性. PL/SQL 的优点 支持 SQL,在 PL/SQL 中可以使用: 1.数据操纵命令 2.事务控制命令 3.游标控制 4.

Oracle基础笔记

=====================================第一章:oracle数据库基础============================================= Orace特点: 1.跨操作系统,跨硬件平台的数据操作能力 2.支持多用户,大事务量的处理 3.在保持数据安全性和完整性方面的性能优越 4.支持分布式数据处理,具有可移植性 Sqlserver特点: 1.只能在windows上运行 Oracle和Sqlserver两者的共同点: 1.都是关系型数据库 表

Oracle基础笔记九

第九章 约束 1.什么是约束 约束是表级的强制规定 有以下五种约束:NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK 2.注意事项 如果不指定约束名 ,Oracle server 自动按照 SYS_Cn 的格式指定约束名 创建和修改约束: 建表的同时 建表之后 可以在表级或列级定义约束 可以通过数据字典视图查看约束 3.表级约束和列级约束 作用范围: ①列级约束只能作用在一个列上 ②表级约束可以作用在多个列上(当然表级约束也 可以作用在一个列上) 定义方

Oracle基础笔记十一

第十一章 其他数据库对象 1.什么是序列? 序列:提供有规律的数值. 序列: 可供多个用户用来产生唯一数值的数据库对象 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效率 1.2.定义序列 CREATE SEQUENCE 语句 CREATE SEQUENCE sequence [INCREMENT BY n]  --每次增长的数值 [START WITH n]    --从哪个值开始 [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n

Oracle基础笔记七

第七章 创建和管理表 1.常见的数据库对象 对象 描述 表              基本的数据存储集合,由行和列组成. 视图 从表中抽出的逻辑上相关的数据集合. 序列 提供有规律的数值. 索引 提高查询的效率 同义词 给对象起别名 2.命名规则 表名和列名: 必须以字母开头 必须在 1–30 个字符之间 必须只能包含 A–Z, a–z, 0–9, _, $, 和 # 必须不能和用户定义的其他对象重名 必须不能是Oracle 的保留字 3.数据类型 数据类型                 描述

JavaSE基础笔记十二

第十一章 多线程 理解程序.进程.线程的概念 程序可以理解为静态的代码. 进程可以理解为执行中的程序. 线程可以理解为进程的近一步细分,程序的一条执行路径. 2.如何创建java程序的进程(重点) 方式一:继承于Thread类 ①创建一个继承于Thread的子类 ②重写Thread类的run()方法,方法内实现此子线程要完成的功能 ③创建一个子类的对象 ④调用线程的start():启动此线程,调用相应的run()方法 ⑤一个线程只能够执行一次start 方式二:实现Runnable接口 ①创建一

Oracle学习笔记(十)

光标(游标)概念引入 就是一个结果集(查询或者其他操作返回的结果是多个时使用)定义一个光标 cursor c1 is select ename from emp: 从光标中取值 打开光标: --open c1;(打开光标执行查询) 关闭光标: --close c1;(关闭游标释放资源)取一行光标的值: --fetch c1 into pename;(取一行到变量中) fetch的作用: --把当前指针指向的记录返回 --将指针指向下一条记录 使用光标查询员工姓名和工资,并打印 declare -