当前位置:网站首页 > 技术博客 > 正文

oracle视图怎么写



目录

视图的概念:

     视图的优点:

    视图的缺点:

   视图与表的区别:

视图的创建及用法:

1.创建视图的语法:

2. 创建简单视图:

3.带条件的视图:

4.更新视图(可更新视图):

5.删除视图:

视图的示例:

示例一(简单视图):

    示例二(复杂视图):

解释:

使用视图:

示例结果:

关键点:

   总结:

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

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

        在 Oracle 数据库中,视图(View)是一种虚拟表,它并不存储数据,而是通过查询基础表中的数据生成的。视图可以简化复杂查询、提高数据的安全性、为用户隐藏复杂的表结构等。

     视图的优点:

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

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

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

    视图的缺点:

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

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

                单表视图:增删改查

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

   视图与表的区别:

       1. 视图不占用物理空间,但表占用物理空间。

       2. 表存储数据内容,而视图仅是数据的展现方式。

       3. 创建或删除视图只会影响视图本身,不会影响基础表。

下面是关于 Oracle 数据库中视图的概念及创建的详细教程。

1.创建视图的语法:

 
  

 语法详解:

  • :用于创建一个新视图。
  • :可选项,若视图已存在则替换。
  • :视图名称,必须唯一。
  • 语句:定义视图的查询逻辑。
  • 子句:条件筛选,定义从基础表中查询哪些数据。

2. 创建简单视图:

例如,我们有一个名为 的表,包含以下字段:

我们希望创建一个只显示 、 和 的视图,可以使用以下 SQL:

 
  

3.带条件的视图:

如果希望创建一个只显示薪水大于 5000 的员工视图,可以加上 条件:

 
  

4.更新视图(可更新视图):

有些视图是可更新的,即可以通过视图对基础表的数据进行插入、更新或删除。为了视图可更新,通常需要满足以下条件:

  • 视图只基于一张表。
  • 视图中不包含聚合函数(如 )。
  • 不使用
  • 没有

例如,以下视图是可更新的:

 
  

可以通过该视图更新基础表中的 列:

 
  

5.删除视图:

如果不再需要某个视图,可以使用 删除它:

 
  

例如,删除 视图:

 
  

示例一(简单视图):

假设我们有两张表:(员工表)和 (部门表),我们希望创建一个显示每个员工名字、薪资及其部门名称的视图:

 
  

通过这个视图,可以简化查询操作:

 
  

    示例二(复杂视图):

复杂视图通常涉及多个表的联结()、子查询、聚合函数( 等)和条件过滤等操作。为了演示复杂视图,假设我们有以下三个表:

  1. employees(员工表)
    • :员工ID
    • :名字
    • :姓氏
    • :部门ID
    • :薪水
  2. departments(部门表)
    • :部门ID
    • :部门名称
    • :部门经理ID
  3. projects(项目表)
    • :项目ID
    • :项目名称
    • :负责该项目的部门ID

目标:我们想创建一个视图,展示每个部门的员工总数、部门名称、部门经理名字、该部门员工的平均薪水,以及负责的项目名称。

SQL 代码:

 
  
解释:
  1. 基本查询结构
    • 是主表。
    • 通过 连接了 ,使得每个部门与它的员工关联起来。
    • 通过 连接了 ,从而获取该部门经理的信息(通过 和 的关联)。
    • 通过 连接了 ,获取每个部门负责的项目名称。
  2. 聚合函数
    • :统计每个部门的员工总数。
    • :计算每个部门的员工平均薪水。
  3. 字符串拼接(LISTAGG)
    • :将同一部门的多个项目名称拼接成一行,以逗号分隔,并按项目名称排序。
  4. GROUP BY
    • 根据 和部门经理的名字()进行分组,这样我们可以对每个部门进行聚合操作。
使用视图:

我们可以通过视图查询每个部门的概要信息:

 
  
示例结果:
department_name manager_name total_employees average_salary project_names IT Alice Johnson 10 7000 Project A, Project B, Project C HR Bob Smith 5 5500 Employee Onboarding Sales Carol Miller 8 6200 Client Acquisition, Sales Drive
关键点:
  • 复杂性:视图涉及多个表的联结,使用了聚合函数、字符串拼接等复杂操作。
  • 性能:如果涉及的数据量较大,复杂视图的性能可能会受影响,尤其是 操作较多时。
  • 可读性:将复杂的 SQL 逻辑封装在视图中,能够提高代码的可读性,简化查询操作。

视图是数据库开发中非常有用的工具,能够简化复杂查询、提升数据安全性和增强数据库的灵活性。在使用视图时,需要考虑其性能和可更新性问题,根据实际业务场景合理使用。

版权声明


相关文章:

  • dmesg命令详解 时间段2025-08-08 08:01:05
  • formdata object2025-08-08 08:01:05
  • 宿舍管理系统2025-08-08 08:01:05
  • form传参到后端2025-08-08 08:01:05
  • 结构体在c语言中是什么意思2025-08-08 08:01:05
  • 怎么设置鼠标悬停时的提示文字2025-08-08 08:01:05
  • 01背包问题是什么2025-08-08 08:01:05
  • 微信小程序回调2025-08-08 08:01:05
  • python课程教学2025-08-08 08:01:05
  • vscode远程连接服务器并使用服务器环境2025-08-08 08:01:05