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

 

目录

视图的概念

视图与表的区别

视图的创建语法


视图的概念

       视图(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
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 数据库介绍 1 1.1表是数据库中存储数据的基本单位 1 1.2数据库标准语言 1 1.3数据库(DB) 1 1.4数据库种类 1 1.5数据库中如何定义表 1 1.6 create database dbname的含义 1 1.7安装DBMS 1 1.8宏观上是数据-->database 1 1.9远程登录:telnet IP地址 1 1.10 TCP/IP通信协议 2 1.11数据库建连接必须提供以下信息 2 1.12一台机器可跑几个数据库,主要受内存大小影响 2 1.13源表和结果集 2 1.14几个简单命令 2 1.15 tarena给jsd1304授权 2 1.16课程中使用的5个表 3 二、 select from语句 5 2.1 select语句功能 5 2.2 select语句基本语法 5 2.3列别名 5 2.4算术表达式 5 2.5空值null的处理 5 2.6 nvl(p1,p2)函数 5 2.7拼接运算符 || 6 2.8文字字符串 6 2.9消除重复行 6 2.10其他注意事项 6 三、 SQL语句的处理过程 7 3.1 SQL语句处理过程 7 3.2处理一条select语句 7 四、 where子句 8 4.1 where子句后面可以跟什么 8 4.2语法和执行顺序 8 4.3字符串是大小写敏感的,在比较时严格区分大小写 8 4.4 where子句后面可以跟多个条件表达式 8 4.5 between and运算符 8 4.6 in运算符(多值运算符) 8 4.7 like运算符 9 4.8 is null运算符 9 4.9比较和逻辑运算符(单值运算符) 9 4.10多值运算符all、any 9 4.11运算符的否定形式 9 五、 order by子句 10 5.1语法和执行顺序 10 5.2升降序 10 5.3 null值在排序中显示 10 5.4 order by后面可以跟什么 10 5.5多列排序 10 六、 单行函数的使用 11 6.1数值类型 11 6.2日期类型 11 6.3字符类型 13 6.4转换函数 14 6.5其他注意事项 14 七、 SQL语句中的分支 15 7.1分支表达式 15 7.2分支函数 15 八、 组函数 16 8.1报表统计常用 16 8.2缺省情况组函数处理什么值 16 8.3当组函数要处理的所有值都为null时 16 8.4行级信息和组级信息 16 九、 group by子句 17 9.1语法和执行顺序 17 9.2分组过程 17 9.3常见错误 17 9.4多列分组 17 十、 having子句 18 10.1语法和执行顺序 18 10.2执行过程 18 10.3 where和having区别 18 十一、 非关联子查询 19 11.1语法 19 11.2子查询的执行过程 19 11.3常见错误 19 11.4子查询与空值 19 11.5多列子查询 20 十二、 关联子查询 21 12.1语法 21 12.2执行过程 21 12.3 exists 21 12.4 exists执行过程 21 12.5 not exists 22 12.6 not exists执行过程 22 12.7 in和exists比较 22 十三、 多表查询 23 13.1按范式要求设计表结构 23 13.2多表连接的种类 23 13.3交叉连接 23 13.4内连接 23 13.5外连接 25 13.6非等值连接 27 13.7表连接总结 27 十四、 集合 28 14.1表连接主要解决的问题 28 14.2集合运算 28 14.3集合运算符 28 14.4子查询、连接、集合总结 29 十五、 排名分页问题 30 15.1什么是rownum 30 15.2 where rownum<=5的执行过程 30 15.3 where rownum=5的执行过程 30 十六、 约束constraint 31 16.1约束的类型 31 16.2 primary key:主键约束 31 16.3 not null:非空约束 31 16.4 unique key:唯一建约束 31 16.5 references foreign key:外键约束 32 16.6 check:检查约束 34 十七、 事务 35 17.1 transaction 35 17.2定义 35 17.3事务的特性:ACID 35 17.4事务的隔离级别 35 17.5数据库开发的关键挑战 35 17.6锁的概念 36 17.7 Oracle的锁机制 36 17.8事务不提交的后果 36 17.9回滚事务rollback 36 17.10保留点savepoint 36 十八、 数据库对象:视图view 37 18.1带子查询的create table 37 18.2带子查询的insert 37 18.3定义缺省值:default 37 18.4 视图view 38 18.5视图的应用场景 38 18.6视图的分类 39 18.7视图的维护 39 十九、 数据库对象:索引index 41 19.1创建index 41 19.2扫描表的方式 41 19.3索引的结构 41 19.4为什么要使用索引 42 19.5哪些列适合建索引 42 19.6索引的类型 42 19.7哪些写法会导致索引用不了 43 二十、 数据库对象:序列号sequence 44 20.1什么是sequence 44 20.2创建sequence 44 20.3缺省是nocycle(不循环) 44 20.4缺省cache 20 44 二十一、 其他注意事项 46 21.1删除表,删除列,删除列中的值 46 21.2多对多关系的实现 46 21.3一对多(两张表) 46 21.4一对一 46 21.5数据库对象 46 12.6缺省(默认)总结: 46

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值