【Oracle11g SQL详解】创建与管理视图:`CREATE VIEW`、`ALTER VIEW` 和 `DROP VIEW`

创建与管理视图:CREATE VIEWALTER VIEWDROP VIEW

视图(View)是 SQL 中的一种虚拟表,是从数据库中一个或多个表的查询结果创建的。它不存储实际数据,而是存储查询的定义,用户可以像使用表一样使用视图。

在实际业务中,视图被广泛用于数据抽象、权限管理、简化复杂查询等场景。


一、CREATE VIEW:创建视图

1. 语法
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
2. 使用场景
  • 简化复杂查询:通过视图保存复杂查询,供后续重复使用。
  • 数据抽象:隐藏底层表结构,向用户提供更清晰的逻辑数据。
  • 权限控制:限制用户访问视图中的特定数据,而不是整个表。
3. 示例
(1) 创建简单视图

创建一个视图,显示员工表中姓名和部门:

CREATE VIEW EmployeeDept AS
SELECT employee_id, first_name, department_id
FROM employees;

用途:后续可以直接通过 EmployeeDept 查询员工及其部门信息。

SELECT * FROM EmployeeDept;

(2) 创建包含条件的视图

创建一个视图,显示薪资高于 5000 的员工:

CREATE VIEW HighSalaryEmployees AS
SELECT employee_id, first_name, salary
FROM employees
WHERE salary > 5000;

用途:筛选高薪员工供管理者分析。


(3) 基于多个表的视图

创建一个视图,显示员工姓名及其所属部门名称:

CREATE VIEW EmployeeWithDept AS
SELECT e.first_name AS employee_name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id;

用途:可以用此视图代替复杂的连接查询:

SELECT * FROM EmployeeWithDept;

二、ALTER VIEW:修改视图

1. 语法
ALTER VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
2. 使用场景
  • 当底层表结构或业务需求发生变化时,更新视图定义。
  • 修改视图以加入新的列、条件或查询逻辑。
3. 示例

原视图 EmployeeDept 显示员工和部门 ID,现在要求添加员工的薪资:

ALTER VIEW EmployeeDept AS
SELECT employee_id, first_name, department_id, salary
FROM employees;

用途:通过更新后的视图,可以查询员工的薪资信息:

SELECT * FROM EmployeeDept;

三、DROP VIEW:删除视图

1. 语法
DROP VIEW view_name;
2. 使用场景
  • 当视图已不再需要或被其他视图替代时,可以删除。
  • 删除视图不会影响底层表的数据。
3. 示例

删除视图 HighSalaryEmployees

DROP VIEW HighSalaryEmployees;

四、视图的限制与注意事项

  1. 视图不能存储数据
    视图是基于查询结果的虚拟表,底层表的数据变化会直接影响视图结果。

  2. 视图不能直接使用 ORDER BY
    在创建视图的 SELECT 语句中不能包含 ORDER BY,除非配合 TOPLIMIT

    错误示例

    CREATE VIEW SortedView AS
    SELECT employee_id, first_name
    FROM employees
    ORDER BY first_name;  -- 错误
    
  3. 视图的更新限制

    • 并非所有视图都可以更新。例如,如果视图包含聚合函数或 DISTINCT,则无法通过视图直接更新数据。
    • 可更新视图要求查询中只涉及单个表,且没有使用复杂表达式。

五、视图的应用场景

1. 数据抽象

通过视图隐藏复杂的数据库结构。例如:

CREATE VIEW SalesSummary AS
SELECT region, SUM(sales) AS total_sales
FROM sales
GROUP BY region;

用户查询 SalesSummary 时无需关心底层表的详细信息。

2. 权限管理

限制用户访问敏感数据。例如:

CREATE VIEW PublicEmployees AS
SELECT first_name, last_name, department_id
FROM employees;

不给用户访问员工薪资信息的权限,但可以通过视图访问非敏感字段。

3. 提高查询效率

对于复杂查询,视图可以简化代码,减少重复编写逻辑。


六、小结

  • CREATE VIEW 用于创建视图,简化查询逻辑和数据管理。
  • ALTER VIEW 用于修改现有视图定义以适应需求变化。
  • DROP VIEW 用于删除不再需要的视图,不会影响底层表数据。
  • 通过合理使用视图,可以提高查询效率、增强数据安全性、减少重复代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/63865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JPG 转 PDF:免费好用的在线图片转 PDF 工具

JPG 转 PDF:免费好用的在线图片转 PDF 工具 在日常工作和生活中,我们经常需要将图片转换为 PDF 格式。无论是制作电子文档、准备演示材料,还是整理照片集,将图片转换为 PDF 都是一个常见的需求。今天为大家介绍一款完全免费、无需…

C++ webrtc开发(非原生开发,linux上使用libdatachannel库)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、libdatachannel库的下载和build二、开始使用 1.2.引入库3.开始使用 总结 前言 使用c开发webrtc在互联网上留下的资料甚少,经过我一段时间的探…

深入理解 Apache Shiro:安全框架全解析

亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在…

Coturn 实战指南:WebRTC 中的 NAT 穿透利器

1. 什么是 Coturn? Coturn 是一种开源的 TURN(Traversal Using Relays around NAT)服务器,用于解决 NAT 穿透问题。它帮助客户端在受限网络环境(例如防火墙或 NAT 后面)中实现双向通信,常用于 WebRTC 应用、VoIP、在线游戏等场景。 2. Cotur…

React的局限性是什么?

性能: 虚拟 DOM 虽然提高了渲染性能,但在某些情况下可能会造成性能瓶颈,尤其是在处理大量数据或复杂更新时。对于非UI任务(如计算密集型操作),React 本身并不擅长。 学习曲线: 对于初学者来说&a…

生信技能65 - SRA数据库公共数据自动化下载及SRA批量自动化拆分

根据NCBI Metadata数据表,实现SRA数据库公共数据自动化下载及SRA批量自动化拆分。 1. 程序逻辑 根据SraRunTable.csv自动从公共数据库下载SRA文件 ;模式0(默认)为下载模式,模式1为拆分模式,拆分支持进度显示;提取Metadata关键信息数据,重新写入新的文本文件。2. 运行示…

美化和定制你的Django Admin:使用SimpleUI

SimpleUI是一个简洁、美观的Django后台管理界面,它可以让你的Django Admin更加直观和易用。本文将指导你如何安装和配置SimpleUI,并进行自定义配置。 目录 安装Django创建Django项目创建Django app安装SimpleUI测试安装是否成功数据库迁移注册超级管理员登录验证自定义配置 …

python学习笔记—7—变量拼接

1. 字符串的拼接 print(var_1 var_2) print("supercarry" "doinb") name "doinb" sex "man" score "100" print("sex:" sex " name:" name " score:" score) 注意: …

datahub-postgres 连接

1、postgres 远程TCP/IP连接 1、修改postgres配置 /opt/homebrew/var/postgresql14/postgresql.conf #listen_addresses localhost, 127.0.0.1 # what IP address(es) to listen on;listen_addresses * # 增加这一条 2、修改/opt/homebrew/var/postgresql14/pg_hba.…

ElasticSearch 搜索、排序、分页功能

一、DSL 查询文档 ElasticSearch 的查询依然是基于 json 风格的 DSL 来实现的。 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/8.15/query-dsl.html 1.1 DSL 查询分类 常见的查询类型包括: 查询所有:查询出所有数…

Unreal Engine 5 (UE5) 中“变换“(Transform)类型变量

在 Unreal Engine 5 (UE5) 中,"变换"(Transform)类型变量是一个非常常见和重要的数据类型,它用于表示 对象的位置(Location)、旋转(Rotation) 和 缩放(Scale&a…

PyTorch 切片运算 (Slice Operator)

PyTorch 切片运算 {Slice Operator} 1. [:, -1, :]2. [:, [-1], :]References 1. [:, -1, :] https://github.com/karpathy/llama2.c/blob/master/model.py import torchlogits torch.arange(1, 16) print("logits.shape:", logits.shape) print("logits:\n&…

2025系统架构师(一考就过):选择题基础知识二

考点14:知识产权和标准化 真题1:甲软件公司受乙企业委托安排公司软件设计师开发了信息系统管理软件,由于在委托开发合同中未对软件著作权归属作出明确的约定,所以该信息系统管理软件的著作权由(甲) 享有。 真题2:根据…

【ubuntu18.04】ubuntu18.04安装EasyCwmp操作说明

参考链接 Tutorial – EasyCwmphttps://easycwmp.org/tutorial/ EasyCwmp 介绍 EasyCwmp 设计包括 2 个部分: EasyCwmp 核心:它包括 TR069 CWMP 引擎,负责与 ACS 服务器的通信。它是用 C 语言开发的。EasyCwmp DataModel:它包…

Jenkins流水线初体验(六)

DevOps之安装和配置 Jenkins (一) DevOps 之 CI/CD入门操作 (二) Sonar Qube介绍和安装(三) Harbor镜像仓库介绍&安装 (四) Jenkins容器使用宿主机Docker(五) Jenkins流水线初体验(六) 一、Jenkins流水线任务介绍 之前采用Jenkins的自由风格构建的项目,每个步骤…

CentOS 7.9 更换 YUM:解决宝塔安装困境的探索之旅

在进行网站搭建工作时,我满怀期待地准备安装宝塔面板,然而却遭遇了安装失败的挫折。经过一番排查与思考,我将目光聚焦到了系统的 YUM 上,怀疑它可能是导致问题的“罪魁祸首”。于是,我毅然决定对 CentOS 7.9 的 YUM 进…

如何解决垂直越权与水平越权问题

大家好,我是G探险者。 关于权限管理我们可能都了解过基于角色的访问控制RBAC技术。 但是关于水平越权和垂直越权的问题可能了解不多。 今天我们来聊聊垂直越权和水平越权的问题。 现在的Web应用和系统里,权限管理是确保数据安全和防止滥用的关键。垂直…

(SAST检测规则-8)连接字符串中的硬编码密码

严重等级:高危 缺陷详解: 在构建数据驱动的应用程序时,开发者通常需要通过数据库连接字符串与数据库进行交互。将敏感信息(如密码、服务器IP地址或加密密钥)硬编码在源代码中会带来以下风险: 信息暴露&a…

Spring Boot整合 RabbitMQ

文章目录 一. 引入依赖二. 添加配置三. Work Queue(工作队列模式)声明队列生产者消费者 四. Publish/Subscribe(发布订阅模式)声明队列和交换机生产者消费者 五. Routing(路由模式)声明队列和交换机生产者消费者 六. Topics(通配符模式)声明队列和交换机生产者消费者 一. 引入依…

Qwen 论文阅读记录

本文仅作自己初步熟悉大模型,梳理之用,慢慢会更改/增加/删除,部分细节尚未解释,希望不断学习之后,能够完善补充。若有同道之人,欢迎指正探讨。 关于后面的code-qwen and math-qwen,我个人认为依…