04-oracle中的视图
1.创建视图
介绍:
视图(View)通过SELECT查询语句定义,它是从一个或多个表(或视图)导出的,用来导出视图的表称为基表(Base Table),导出的视图称为虚表。在数据库中,只存储视图的定义,不存放视图对应的数据,这些数据仍然存放在原来的基表中。
视图可以由一个基表中选取的某些行和列组成,也可以由多个表中满足一定条件的数据组成,视图就像是基表的窗口,它反映了一个或多个基表的局部数据。
语法:
CREATE [ OR REPLACE ] [FORCE | NOFORCE] VIEW [<用户方案名>.]<视图名> [ ( <列名> [ ,…n ] ) ]
AS
<SELECT查询语句>
[WITH CHECK OPTION[CONSTRAINT <约束名>]]
[WITH READ ONLY]
说明:
● OR REPLACE:在创建视图时,如果存在同名视图,则要重新创建。
● 用户方案名:默认为当前账号。
● 列名:可以自定义视图中包含的列,若使用源表或视图中相同的列名,可不必给出列名。
● SELECT查询语句:定义视图的SELECT语句,可查询多个表或视图。
● CONSTRAINT:约束名称。
● WITH CHECK OPTION:指出在视图上进行的修改都要符合SELECT语句所指定的限制条件。
示例:
使用SQL Developer,在stsys数据库中创建vwStudentCourseScore视图,包括学号、姓名、性别、课程名、成绩,按学号升序排列,且专业为计算机。
CREATE OR REPLACE VIEW vwStudentScore
AS
SELECT a.sno, a.sname, a.ssex, a.speciality, b.cname, c.grade
FROM student a, course b, score c
WHERE a.sno=c.sno AND b.cno=c.cno AND a.speciality='计算机'
ORDER BY a.sno
WITH CHECK OPTION;
使用CREATE VIEW语句,在stsys数据库中创建vwStudentScore视图,包括学号、姓名、性别、专业、课程号、成绩,且专业为计算机。
CREATE OR REPLACE VIEW vwStudentScore
AS
SELECT a.sno, a.sname, a.ssex, a.speciality, b.cno, b.grade
FROM student a, score b
WHERE a.sno=b.sno AND a.speciality='计算机'
WITH CHECK OPTION;
2.查询视图
介绍:
查询视图跟查询表类似
示例:
分别查询vwStudentCourseScore视图、vwStudentScore 视图。使用SELECT语句对vwStudentCourseScore视图进行查询
SELECT *
FROM vwStudentCourseScore;
SELECT *
FROM vwStudentScore;
查询计算机专业学生的学号、姓名、性别、课程名。
SELECT sno, sname, ssex, cname FROM vwStudentCourseScore;
3.更新视图
3.1创建可更新的视图
示例:
以student为基表,创建专业为通信的可更新视图vwCommSpecialityStudent。
create or replace view vwCommSpecialityStudent
as
select * from student where speciality='通信';
3.2插入数据
示例:
向vwCommSpecialityStudent视图中插入一条记录:('124005','刘启文','男','1992-06-19','通信','201236',50)。
insert into vwcommspecialitystudent values('124005','刘启文','男',TO_DATE('19920619','YYYYMMDD'),'通信','201236',50);
select * from vwCommSpecialityStudent;
select * from student;
3.3修改数据
示例:
将vwCommSpecialityStudent视图中学号为124005的学生的总学分增加2分。
update vwcommspecialitystudent set tc=tc+2 where sno='124005';
select * from student;
3.4删除数据
示例:
删除vwCommSpecialityStudent视图中学号为124005的记录。
delete from vwcommspecialitystudent where sno='124005';
4.修改视图定义
介绍:
修改视图的定义只能通过 create or replace view 覆盖表
示例:
将视图vwStudentScore进行修改,取消专业为计算机的要求。
CREATE OR REPLACE VIEW vwStudentScore
AS
SELECT a.sno, a.sname, a.ssex, a.speciality, b.cno, b.grade
FROM student a, score b
WHERE a.sno=b.sno
WITH CHECK OPTION;
5.删除视图
语法:
DROP VIEW <视图名>
示例:
将视图vwStudentCourseScore删除。
DROP VIEW vwStudentCourseScore;
6.综合训练
(1)创建一个视图vwClassStudentCourseScore,包含学号、姓名、性别、班级、课程号、课程名和成绩等列,班级为201236,并查询视图的所有记录。
create or replace view vwClassStudentCourseScore
as
select a.sno,a.sname,a.ssex,a.sclass,b.cno,c.cname,b.grade
from student a,score b,course c where a.sno=b.sno and b.cno=c.cno and a.sclass='201236';
(2)创建一个视图vwCourseScore,包含学生学号、课程名、成绩等列,然后查询该视图的所有记录。
create or replace view vwCourseScore
as
select b.sno,c.cno,b.grade from score b,course c where b.cno=c.cno;
(3)创建一个视图vwAvgGradeStudentScore,包含学生学号、姓名、平均分等列、按平均分降序排列,再查询该视图的所有记录。
create or replace view vwAvgGradeStudentScore
as
select a.sno,a.sname,b.avg_grade
from student a,(select sno,AVG(grade) avg_grade from score GROUP BY sno ORDER BY avg_grade DESC) b where a.sno=b.sno;
select * from vwAvgGradeStudentScore;
04-oracle中的视图的更多相关文章
- Oracle中创建视图
Oracle的数据库对象分为五种:表,视图,序列,索引和同义词. 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改.视图基于的表称为基表. 视图是存储在数 ...
- oracle中普通视图和实体试图的区别
Oracle普通视图和实体化视图比较 来源:茂盛博客|2013-07-30 Oracle普通视图和实体化视图比较 相对于普通的视图来说,实体化视图的不同之处在于实体化视图管理存储数据,占据数据库的物理 ...
- Oracle中添加视图
CREATE or REPLACE view view_will as select college.collegeid,mat.stuid,sum(score.chinese+score.ma ...
- 转: Oracle中的物化视图
物化视图创建语法:CREATE MATERIALIZED VIEW <schema.name>PCTFREE <integer>--存储参数PCTUSED <intege ...
- Oracle中建立物化视图报错
Oracle中建立物化视图报错 今天在建立视图的时候,报了一个错:ORA-01723: zero-length columns are not allowed. 建视图的语句: create mate ...
- ubuntu14.04系统中virtualbox安装Oracle VM VirtualBox Extension Pack包
ubuntu14.04系统中virtualbox默认不支持usb设备,需要安装Oracle VM VirtualBox Extension Pack才行,但必须安装以下版本才可以安装成功: Oracl ...
- ORACLE中dba,user,v$等开头的常用表和视图
一.Oracle表明细及说明1.dba_开头表 dba_users 数据库用户信息 dba_segments 表段信息 dba_extents ...
- oracle中有关初始化参数文件的几个视图对比
涉及oracle中有关初始化参数文件的几个视图主要有:v$paraemter,v$parameter2,v$system_parameter,v$system_parameter2,v$spparam ...
- Oracle中-事务-序列-视图-数据类型笔记
事务(Transaction) 事务(Transaction)是一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位. 事务是为了保证数据库的完整性 在o ...
- oracle中视图v$sql的用途
1.获取正在执行的sql语句.sql语句的执行时间.sql语句的等待事件: select a.sql_text,b.status,b.last_call_et,b.machine,b.event,b. ...
随机推荐
- 高通MSM8998 ABL的调试
高通在MSM8998上引入了UEFI,用来代替LK(Little Kernel).高通UEFI由XBL和ABL两部分组成.XBL负责芯片驱动及充电等核心应用功能.ABL包括芯片无关的应用如fastbo ...
- ThreadLocal说明
ThreadLocal说明 类ThreadLocal主要为了解决每个线程绑定自己的私有的值,可以吧ThreadLocal比如可全部存放的数据,每个线程都可以在里面存放自己的数据,并且不会和其他线程冲突 ...
- Linq语法常见普通语法
闲言碎语 近期比较忙,但还是想写点什么,就分享一些基础的知识给大家看吧,希望能帮助一些linq新手,如果有其它疑问,可以进右上角群,进行交流探讨,谢谢. 开门见山 读这篇文章之前,我先说下,每一种搜索 ...
- FPGA设计千兆以太网MAC(2)——以太网协议及设计规划
上篇该系列博文中通过MDIO接口实现了PHY芯片的状态检测,验证其已处于1000M 全双工工作模式.在设计MAC逻辑之前,要先清楚MAC与PHY之间的接口以及以太网协议细节,这样才能保证网络的兼容性. ...
- Visual Studio Code自定义快捷键(eclipse习惯)
左下角设置按钮 -> Keyboard Shortcuts -> keybindings.json. [ { "key": "alt+/", &qu ...
- 爬虫技术实现空间相册采集器V.0.0.1版本
一. 功能需求分析: 在很多时候我们需要做这样一个事情:我们想把我们QQ空间上的相册高清图像下载下来,怎么做?到网上找软件?答案是否定的,理由之一:网上很多软件不知有没有病毒,第二它有可能捆了很 ...
- 周一04.2流程控制if……else
语法一: if 条件1: 代码1 代码2 例题:如果年龄>20岁,那么:叫阿姨 age=22if age>20: print('阿姨') 语法二: if 条件1: 代码1 代码2else ...
- python进阶之生成器
迭代器 什么叫迭代 可以被for循环的就说明他们是可迭代的,比如:字符串,列表,字典,元祖,们都可以for循环获取里面的数据 下面我们看一个代码: number = 12345 for i in nu ...
- linux驱动简单介绍
linux驱动简单介绍 驱动基本介绍 驱动.顾名思义就是“驱使硬件设备行动”.设备驱动与底层硬件之间打交道,按照硬件设备的具体操作方式来读写设备寄存器,最终完成一系列操作. 设备 驱动充当了应用程序 ...
- Oracle硬解析,软解析,软软解析介绍
Oracle数据库中的CURSOR分为两种类型:Shared Cursor 和 Session Cursor 1,Shared Cursor Oracle里的第一种类型的Cursor就是Shared ...