视图(操作)

1. 定义和删除视图

​**(1) 创建视图**
-- 创建计算机系学生的视图(隐藏敏感字段 SEX)
CREATE VIEW CS_Students AS
SELECT SNO, SN, AGE, DEPT
FROM S
WHERE DEPT = '计算机系';

-- 创建带成绩统计的视图(关联 SC 和 C 表)
CREATE VIEW Course_Scores AS
SELECT SC.SNO, C.CN, SC.SCORE
FROM SC
JOIN C ON SC.CNO = C.CNO;
​**(2) 删除视图**
-- 删除视图 CS_Students
DROP VIEW CS_Students;

2. 查询视图

-- 查询计算机系学生的视图(像普通表一样使用)
SELECT * FROM CS_Students WHERE AGE > 20;

-- 查询课程成绩视图(带课程名称和分数)
SELECT CN, AVG(SCORE) AS Avg_Score
FROM Course_Scores
GROUP BY CN;

3. 更新视图

​**(1) 允许更新的视图示例**
-- 通过视图更新年龄(视图基于单表且不涉及聚合/连接)
UPDATE CS_Students
SET AGE = 22
WHERE SNO = 'S001';

-- 通过视图插入新记录(需满足基表约束)
INSERT INTO CS_Students(SNO, SN, AGE, DEPT)
VALUES ('S100', '李四', 19, '计算机系');
​**(2) 不允许更新的场景**

如果视图包含以下内容,则无法直接更新:

  • 聚合函数​(如 SUMAVG
  • 表连接​(如 JOIN
  • GROUP BY 或 DISTINCT
  • 子查询中的字段

例如,以下视图 ​无法更新

CREATE VIEW Course_Avg_Score AS
SELECT C.CN, AVG(SC.SCORE) AS Avg_Score
FROM SC
JOIN C ON SC.CNO = C.CNO
GROUP BY C.CN;

4. 视图的作用

​**(1) 简化复杂查询**
-- 直接查询视图代替多次 JOIN
SELECT * FROM Course_Scores WHERE CN = '数据库';
​**(2) 数据安全(隐藏敏感字段)​**
-- 创建不包含 SEX 字段的视图
CREATE VIEW Student_Info AS
SELECT SNO, SN, AGE, DEPT FROM S;
​**(3) 逻辑独立性**
-- 即使基表结构改变,视图可保持接口稳定
CREATE VIEW Student_Dept AS
SELECT SNO, SN, DEPT FROM S;  -- 若基表新增字段,视图无需修改
​**(4) 数据抽象(自定义逻辑)​**
-- 创建包含年龄分段的视图
CREATE VIEW Student_Age_Group AS
SELECT SNO, SN, 
  CASE 
    WHEN AGE < 20 THEN '新生'
    ELSE '老生'
  END AS Age_Group
FROM S;
​**(5) 合并多表数据**
-- 创建学生选课详细视图(合并 S、SC、C 表)
CREATE VIEW Student_Course_Details AS
SELECT S.SN, C.CN, SC.SCORE
FROM S
JOIN SC ON S.SNO = SC.SNO
JOIN C ON SC.CNO = C.CNO;

总结

操作语法要点
创建视图CREATE VIEW 视图名 AS SELECT ...
删除视图DROP VIEW 视图名
查询视图与普通表一致(SELECT * FROM 视图名 WHERE ...
更新视图仅限简单单表视图(无聚合、连接、分组等)
视图作用简化查询、数据安全、逻辑独立、数据抽象、多表合并

注意事项

  1. 视图是虚拟表,不存储实际数据,查询时动态生成。
  2. 更新视图时需确保基表约束(如主键、非空字段)。
  3. 复杂视图可能导致性能问题(避免嵌套多层视图)。
  4. 权限控制:可通过视图限制用户访问特定字段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值