Oracle数据库创建视图及概念(详细教程)

本文详细介绍了视图在数据库中的概念,包括其与表的区别,创建语法,以及视图的优点(如便捷整合、保密和简化权限)和缺点(如耗费时间和修改不便)。同时提供了SQL语句示例来创建和管理视图。
摘要由CSDN通过智能技术生成

 

目录

视图的概念

视图与表的区别

视图的创建语法


视图的概念

       视图(view)类似一个虚表,建立与基表之上。不会占用物理的空间(还有一种占用物理空间的视图叫做物化视图MATERIALIZED VIEW,物化视图又称快照),视图的定义语句会存储在数据字典中,会根据基表的更新而更新数据,而一个视图当然也可以从另一个视图中产生,相当于把一个SQL语句打包起来然后起一个别名,在你查询这个视图内容的时候,视图对应的SQL会再执行一次,然后把结果反馈给你,也就是将你写的SQL的结果封装成一张虚拟表,基于它创建时指定的SQL语句返回的结果集。

        需要注意的是,对于视图的操作其实是对视图对应SQL内字段所属基表的操作,虽然可能会受到一些限制。单表视图是可以增删改的。

        视图的优点

        1.便捷整合:不用害怕丢失SQL语句。对于需要多次执行的SQL,在权限允许的情况下也可以建一个视图。有些SQL分组统计以后需要连接另一张表,那么就可以建一个视图用视图去连接。

        2.保密:有些表内的隐私字段敏感字段,如果不希望使用者看见,就可以把使用者需要使用的字段创建一个视图。这样使用者就不知道基表,以及基表的表结构

        3.简化权限:不用对于不同用户去授予表字段权限,而是直接建视图,将视图的权限给对应用户就可以。

        视图的缺点

        1.耗费时间:因为需要把视图的查询转换为基本表的查询。

        2.修改不便:需要把对于视图的操作转换为对基表的操作,简单的视图会比较方便但是复杂视图会繁琐和限制比较多。

                单表视图:增删改查

                多表视图:只能修改和查询

视图与表的区别

       1.视图不占用物理空间,而表是占用物理空间的。

        2.表是内容,而视图是一个窗口。

        3.视图的建立和删除只影响自身而不影响表。

视图的语法

        SQL语句推荐使用大写-个人建议

        查询所有视图

        SELECT * FROM ALL_VIEWS WHERE OWNER LIKE 用户;   

        --VIEW_NAME(视图名)

        --TEXT(AS后面那一段SQL)

        创建视图

        CREATE [OR REPLACE] VIEW 视图名 AS SQL语句;

        例子:

创建一个学生表

CREATE TABLE STUDENT (
  SNO VARCHAR(3) NOT NULL,
  SNAME VARCHAR(8) NOT NULL,
  SSEX VARCHAR(2) NOT NULL,
  SBIRTHDAY DATE DEFAULT NULL,
  SCLASS VARCHAR(5) DEFAULT NULL);
---------------------------------------
INSERT INTO STUDENT (SNO, SNAME, SSEX, SBIRTHDAY, SCLASS)
VALUES ('101', '李军', '男',SYSDATE, '95033');
  INSERT INTO STUDENT (SNO, SNAME, SSEX, SBIRTHDAY, SCLASS)
VALUES ('103', '陆君', '男', SYSDATE, '95031');
  INSERT INTO STUDENT (SNO, SNAME, SSEX, SBIRTHDAY, SCLASS)
VALUES ('105', '匡明', '男',SYSDATE, '95031');
  INSERT INTO STUDENT (SNO, SNAME, SSEX, SBIRTHDAY, SCLASS)
VALUES ('107', '王丽', '女',SYSDATE, '95033');
  INSERT INTO STUDENT (SNO, SNAME, SSEX, SBIRTHDAY, SCLASS)
VALUES ('108', '曾华', '男',SYSDATE, '95033');
 INSERT INTO STUDENT (SNO, SNAME, SSEX, SBIRTHDAY, SCLASS)
VALUES  ('109', '王芳', '女',SYSDATE, '95031');
---------------------------------------
SELECT * FROM STUDENT;

创建一个成绩表

CREATE TABLE SCORE (
  SNO VARCHAR(3) NOT NULL,
  CNO VARCHAR(5) NOT NULL,
  DEGREE DECIMAL(4, 1) DEFAULT NULL);
---------------------------------------
INSERT INTO SCORE (SNO, CNO, DEGREE)
VALUES ('101', '3105', '64.0');
  INSERT INTO SCORE (SNO, CNO, DEGREE)
VALUES ('101', '6166', '85.0');
  INSERT INTO SCORE (SNO, CNO, DEGREE)
VALUES ('103', '3105', '92.0');
  INSERT INTO SCORE (SNO, CNO, DEGREE)
VALUES ('103', '3245', '86.0');
  INSERT INTO SCORE (SNO, CNO, DEGREE)
VALUES ('105', '3105', '88.0');
  INSERT INTO SCORE (SNO, CNO, DEGREE)
VALUES ('105', '3245', '75.0');
  INSERT INTO SCORE (SNO, CNO, DEGREE)
VALUES ('107', '3105', '91.0');
  INSERT INTO SCORE (SNO, CNO, DEGREE)
VALUES ('107', '6166', '79.0');
  INSERT INTO SCORE (SNO, CNO, DEGREE)
VALUES ('108', '3105', '78.0');
  INSERT INTO SCORE (SNO, CNO, DEGREE)
VALUES ('108', '6166', '81.0');
  INSERT INTO SCORE (SNO, CNO, DEGREE)
VALUES ('109', '3105', '76.0');
  INSERT INTO SCORE (SNO, CNO, DEGREE)
VALUES ('109', '3245', '68.0');
---------------------------------------
SELECT * FROM SCORE;

创建视图

CREATE OR REPLACE VIEW TOTAL_ AS
  SELECT 学号, 姓名, 总分, RANK() OVER(ORDER BY 总分 DESC) 排名
    FROM (SELECT A.SNO 学号,
                 A.SNAME 姓名,
                 ROUND(SUM(NVL(B.DEGREE, 0)), 2) 总分
            FROM STUDENT A, SCORE B
           WHERE A.SNO = B.SNO
             AND SSEX IN ('男', '女')
           GROUP BY A.SNO, A.SNAME)

        删除表(工作中先查后删,避免删错,这是很重要的)

        DROP TABLE 表名;

        删除视图

        DROP VIEW 视图名;

  • 50
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值