当前位置: 首页 > news >正文

SQL 视图

视图就像是一个虚拟的表,它是从一个或多个实际表中提取数据后形成的一种“窗口”。通过这个“窗口”,你可以按照特定的需求查看和使用数据,但视图本身并不实际存储数据,数据仍然存储在原来的表中。

比如,你有一个包含员工信息的表,里面有员工的姓名、年龄、工资、部门等各种字段。但有时候,你只需要查看某个部门员工的姓名和工资信息,不想看到其他无关的内容。这时,你就可以创建一个视图,让它只显示你关心的这个部门员工的姓名和工资这两列数据。这样,每次你查询这个视图时,就好像在查询一个只包含姓名和工资的新表一样,但实际上它是从原来的员工信息表中获取的数据。

使用视图有很多好处,比如可以简化复杂的查询,你可以把一些经常需要使用的复杂查询语句定义成视图,以后直接查询视图就可以了,不用每次都写长长的查询语句;还可以提高数据的安全性,通过视图可以只让用户看到他们有权限查看的数据,而隐藏其他敏感信息。

以下以 SQL Server 为例, T_ERRLIGHT 表,为你展示如何创建和使用视图。假设我们还存在一个名为 T_ERROR_CODE 的表,用于存储错误代码和对应的错误描述信息,表结构如下:

-- 创建 T_ERROR_CODE 表
CREATE TABLE T_ERROR_CODE
(
    ERROR_ID int NOT NULL PRIMARY KEY IDENTITY(1,1),
    ERROR_CODE int NOT NULL,
    ERROR_DESC NVARCHAR(200) NOT NULL
);

现在,我们要创建一个视图,用于展示 T_ERRLIGHT 表和 T_ERROR_CODE 表关联后的部分信息,比如 IDROWCOLERROR_CODEERROR_DESC。以下是创建视图的 SQL 语句:

-- 创建视图 V_ERRLIGHT_INFO
CREATE VIEW V_ERRLIGHT_INFO
AS
SELECT 
    T_ERRLIGHT.ID,
    T_ERRLIGHT.ROW,
    T_ERRLIGHT.COL,
    T_ERROR_CODE.ERROR_CODE,
    T_ERROR_CODE.ERROR_DESC
FROM 
    T_ERRLIGHT
JOIN 
    T_ERROR_CODE 
ON 
    T_ERRLIGHT.ID = T_ERROR_CODE.ERROR_ID;

代码解释

  • 视图名称V_ERRLIGHT_INFO 是视图的名称,通常在命名视图时,会以 V_ 作为前缀,方便识别这是一个视图。
  • CREATE VIEW 语句:用于创建视图。
  • AS 关键字:用于分隔视图的定义和实际的查询语句。
  • 查询语句:从 T_ERRLIGHT 表和 T_ERROR_CODE 表中选取所需的列,通过 JOIN 子句将两个表根据 IDERROR_ID 进行关联。

使用视图

创建好视图后,就可以像查询普通表一样查询视图,示例如下:

-- 查询视图 V_ERRLIGHT_INFO
SELECT * FROM V_ERRLIGHT_INFO;

注意事项

  • 视图本身不存储数据,每次查询视图时,实际上是执行视图定义中的查询语句从基表中获取数据。
  • 对视图的修改(如插入、更新、删除)通常会受到一定限制,具体取决于视图的定义和基表的结构。

通过使用视图,可以简化复杂的查询,提高数据的安全性和可维护性。例如,在上述示例中,我们将两个表的关联查询封装在视图中,后续需要获取相关信息时,只需查询视图即可,无需每次都编写复杂的 JOIN 查询语句。

相关文章:

  • linux,防火墙,firewall,常用命令
  • FastAPI系列02:FastAPI程序结构与生命周期
  • Web Workers优化 Web 网站的性能
  • Unity2D 五子棋 + Photon联网双人对战
  • Postman 如何发送 JSON 格式的 API 请求?
  • 2025-03-24 学习记录--C/C++-PTA 习题7-4 求矩阵各行元素之和
  • 关于Qt的各类问题
  • MOSN(Modular Open Smart Network)-08-MOSN 扩展机制解析
  • Three.js 快速入门教程【十八】射线拾取模型——鼠标点击屏幕选中模型或物体
  • 和鲸科技医疗智能体上线联想擎天平台:赋能医疗服务效率与质量
  • 车载以太网网络测试 -24【SOME/IP概述】
  • SpringBoot3.0不建议使用spring.factories,使用AutoConfiguration.imports新的自动配置方案
  • RabbitMQ 学习整理1 - 基础使用
  • C++中的explicit关键字
  • STM32收发数据包中间件——ProtoFlow,更方便的打包解包助手
  • SpringCloud入门、搭建、调试、源代码
  • 洛谷题单1-B2002 Hello,World!-python-流程图重构
  • 【QT继承QLabel实现绘制矩形、椭圆、直线、多边形功能,并且支持修改大小,移动位置,复制,粘贴,删除功能】
  • 后端学习day1-Spring(八股)--还剩9个没看
  • Pytorch学习笔记(八)Learn the Basics - Save and Load the Model
  • 铁路上海站五一假期预计发送446万人次,同比增长8.4%
  • 持续更新丨伊朗内政部长:港口爆炸已致8人死亡750人受伤
  • 俄罗斯称已收复库尔斯克州,普京发表讲话
  • 持续更新丨伊朗港口爆炸事件已致406人受伤
  • 年客流超2500万,九岁的上海国际旅游度假区有哪些文旅商体实践?
  • 甘肃张掖至重庆航线开通,串起西北与西南文旅“黄金走廊”