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中的视图的更多相关文章

  1. Oracle中创建视图

    Oracle的数据库对象分为五种:表,视图,序列,索引和同义词. 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改.视图基于的表称为基表. 视图是存储在数 ...

  2. oracle中普通视图和实体试图的区别

    Oracle普通视图和实体化视图比较 来源:茂盛博客|2013-07-30 Oracle普通视图和实体化视图比较 相对于普通的视图来说,实体化视图的不同之处在于实体化视图管理存储数据,占据数据库的物理 ...

  3. Oracle中添加视图

     CREATE or REPLACE view view_will as   select college.collegeid,mat.stuid,sum(score.chinese+score.ma ...

  4. 转: Oracle中的物化视图

    物化视图创建语法:CREATE MATERIALIZED VIEW <schema.name>PCTFREE <integer>--存储参数PCTUSED <intege ...

  5. Oracle中建立物化视图报错

    Oracle中建立物化视图报错 今天在建立视图的时候,报了一个错:ORA-01723: zero-length columns are not allowed. 建视图的语句: create mate ...

  6. ubuntu14.04系统中virtualbox安装Oracle VM VirtualBox Extension Pack包

    ubuntu14.04系统中virtualbox默认不支持usb设备,需要安装Oracle VM VirtualBox Extension Pack才行,但必须安装以下版本才可以安装成功: Oracl ...

  7. ORACLE中dba,user,v$等开头的常用表和视图

    一.Oracle表明细及说明1.dba_开头表    dba_users           数据库用户信息    dba_segments    表段信息    dba_extents        ...

  8. oracle中有关初始化参数文件的几个视图对比

    涉及oracle中有关初始化参数文件的几个视图主要有:v$paraemter,v$parameter2,v$system_parameter,v$system_parameter2,v$spparam ...

  9. Oracle中-事务-序列-视图-数据类型笔记

    事务(Transaction) 事务(Transaction)是一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位. 事务是为了保证数据库的完整性 在o ...

  10. oracle中视图v$sql的用途

    1.获取正在执行的sql语句.sql语句的执行时间.sql语句的等待事件: select a.sql_text,b.status,b.last_call_et,b.machine,b.event,b. ...

随机推荐

  1. (最完美)MIUI12系统的Usb调试模式在哪里开启的步骤

    当我们使用安卓手机通过数据线链接到Pc的时候,或者使用的有些app比如我们公司营销小组当使用的app引号精灵,之前的老版本就需要开启usb调试模式下使用,现当新版本不需要了,如果手机没有开启usb调试 ...

  2. 链表倒数第k个节点

    1.一种较笨的办法是先将链表元素入栈,然后出栈找到倒数第k个节点值,再拿着值遍历链表去找到对于节点. 时间复杂度:O(n) (3n 遍历-出栈-遍历) 空间复杂度:O(n) (一个栈) 2.快慢指针, ...

  3. UEFI引导的简单恢复方法

    装系统,尤其是双系统,总是无法绕过引导的坑. linux的grub是非常复杂的引导系统,学习它非常累.而windows又不能引导linux.你可能会想,怎么就没有一种简单的引导方式,就好像引导光盘,引 ...

  4. Python使用Plotly绘图工具,绘制饼图

    今天我们来学习一下如何使用Python的Plotly绘图工具,绘制饼图 使用Plotly绘制饼图的方法,我们需要使用graph_objs中的Pie函数 函数中最常用的两个属性values,用于赋值给需 ...

  5. ANT property三种使用方式

    方式一:引入*.properties文件 1.在cms.properties文件中定义属性 userName=admin 2.在build.xml中引入属性 <property file=&qu ...

  6. Carthage入门篇-安装和使用

    在iOS开发过程中,用到最多的三方库管理工具也许是Cocoapods.Cocoapods会自动为你创建一个workspace,然后自动将你要用到的三方库集成到Project中,而整个过程,你只需要对P ...

  7. 教你如何在Drcom下使用路由器上校园网(以广东工业大学、极路由1S HC5661A为例)

    免责声明: 在根据本教程进行实际操作时,如因您操作失误导致出现的一切意外,包括但不限于路由器变砖.故障.数据丢失等情况,概不负责: 该技术仅供学习交流,请勿将此技术应用于任何商业行为,所产生的法律责任 ...

  8. 记一次因为session引起的并发问题

    在做一个DSP系统(不要纠结这个系统是做什么的)时,碰到了一个很奇特的bug. 事情背景: 1.媒体方要求素材必须通过API提交给他们审核后,方可投放使用. 2.上线不久,运营反馈“每当提交素材的时候 ...

  9. Mysql Navicat数据库定时备份,定时删除

    Navicat自带实现数据库定时备份 1.先点击需要备份的数据库,然后点击计划,再点击新建批处理作业 2.然后出现双机可用任务列表,然后在已选择的任务中会出现可用任务 3. 点击保存,弹出对话框,给这 ...

  10. 工具(4): Git自助手册

    目录: ** 0x01 基础教程/0x02 分支流程/0x03 提交日志/0x04 变化比较/0x05 团队协作/0x06 高级用法/0x07 常见问题(FAQ)/0x08 掌握Git的秘诀 0x01 ...