Oracle数据库创建视图及概念(详细教程)
创作时间:
作者:
@小白创作中心
Oracle数据库创建视图及概念(详细教程)
引用
CSDN
1.
https://blog.csdn.net/qq_62145851/article/details/137235291
视图是数据库中一个非常重要的概念,它允许用户以虚拟表的形式查看数据,而无需了解数据的实际存储方式。通过视图,可以简化复杂的查询操作,提高数据访问的安全性和效率。本文将详细介绍Oracle数据库中视图的概念、创建方法以及与表的区别,帮助读者全面理解这一重要功能。
视图的概念
视图(view)类似一个虚表,建立与基表之上。不会占用物理的空间(还有一种占用物理空间的视图叫做物化视图MATERIALIZED VIEW,物化视图又称快照),视图的定义语句会存储在数据字典中,会根据基表的更新而更新数据,而一个视图当然也可以从另一个视图中产生,相当于把一个SQL语句打包起来然后起一个别名,在你查询这个视图内容的时候,视图对应的SQL会再执行一次,然后把结果反馈给你,也就是将你写的SQL的结果封装成一张虚拟表,基于它创建时指定的SQL语句返回的结果集。
需要注意的是,对于视图的操作其实是对视图对应SQL内字段所属基表的操作,虽然可能会受到一些限制。单表视图是可以增删改的。
视图的优点
- 便捷整合:不用害怕丢失SQL语句。对于需要多次执行的SQL,在权限允许的情况下也可以建一个视图。有些SQL分组统计以后需要连接另一张表,那么就可以建一个视图用视图去连接。
- 保密:有些表内的隐私字段或敏感字段,如果不希望使用者看见,就可以把使用者需要使用的字段创建一个视图。这样使用者就不知道基表,以及基表的表结构
- 简化权限:不用对于不同用户去授予表字段权限,而是直接建视图,将视图的权限给对应用户就可以。
视图的缺点
- 耗费时间:因为需要把视图的查询转换为基本表的查询。
- 修改不便:需要把对于视图的操作转换为对基表的操作,简单的视图会比较方便但是复杂视图会繁琐和限制比较多。
- 单表视图:增删改查
- 多表视图:只能修改和查询
视图与表的区别
- 视图不占用物理空间,而表是占用物理空间的。
- 表是内容,而视图是一个窗口。
- 视图的建立和删除只影响自身而不影响表。
视图的语法
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 视图名;
热门推荐
程序员分几种层次
如何从读书的乐趣?解锁阅读的无限乐趣:从入门到精通的实用指南!
福安药业:上市八年业绩首亏 “工业大麻”助股价8连涨
下葬时硬币放多少有讲究吗
婴儿痉挛症药物治疗原则
如何在租房过程中合理规划预算和费用?这样的规划需要考虑哪些方面?
租赁合同应该怎么审查
酒糟鼻物理治疗方法有哪些
火车票退票手续费居然能报销,火车票退票手续费报销凭证获取方法
民警怎么考进去(公安入警的六种途径)
如何获取有效的求租房子信息?这种信息获取方法有哪些实用技巧?
试管婴儿纳入青岛医保?含政策、费用、报销全流程解读(附山东省全医院名单)
零基础学剪映06 怎么给视频添加特效
劳务报酬预扣预缴税率:您需要了解的税收政策
黄金与玉饰佩戴:探究对身体健康的益处与功效
家居风水布局详解:如何打造和谐美好的居住环境
运动可以降血脂吗
媒体观点:Falcons的阵容为目前他们所能组建的最佳阵容
Falcons全新阵容解析:HEROIC核心成员能否助力战队崛起?
国家电网二批网申攻略:关键时间节点、流程详解及笔试准备要点
明天热火对湖人分析 詹姆斯能否率队止颓势
犯罪心理中的哪吒身世分析
股票投资风险管理指南:从分散投资到策略平衡
长安冬菹酸且绿,金城土酥静如练。
奥美拉唑治口臭吗?医生专业解答来了
惠州车辆上牌要多久时间
58岁泰森输给27岁网红拳手!退役20年,曾经入狱,为什么大家依然喜欢泰森?
2024胡润百富榜发布,中国首富换人了
心绞痛的急救措施与药物使用指南
庐山仙人洞,伟人曾题诗称赞:天生一个仙人洞,无限风光在险峰