⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

SQL VIEW 视图

学习创建和使用视图 · 难度:高级 · +15XP

SQL VIEW 视图

视图(View)是一种虚拟表,它不存储实际数据,只是一个被保存的 SQL 查询语句。当你查询视图时,数据库会动态执行视图关联的 SELECT 语句并返回结果。视图就像是给复杂查询起了一个名字,之后你可以像操作普通表一样从这个名字中查询数据,大大简化了复杂查询的复用和管理。

视图的核心优势

  1. 简化复杂查询:将多表 JOIN、聚合计算等复杂逻辑封装为视图,使用时只需简单的 SELECT
  2. 安全性:隐藏表的某些列,只暴露必要字段给不同用户
  3. 逻辑独立性:表结构变化时只需修改视图定义,应用层代码无需改动
  4. 数据一致性:所有使用视图的地方看到的都是同一套逻辑,避免各处重复编写查询

创建视图

-- 基本语法
CREATE VIEW 视图名 AS
SELECT 列1, 列2, ... FROM 表名 WHERE 条件;

-- 示例:创建一个高分学生视图 CREATE VIEW top_students AS SELECT name, score FROM students WHERE score >= 85;

-- 示例:创建包含多表JOIN的视图 CREATE VIEW student_course AS SELECT s.name, c.course_name, sc.score FROM students s JOIN scores sc ON s.id = sc.student_id JOIN courses c ON sc.course_id = c.id;

使用视图

视图创建后,你可以像查询普通表一样使用它:

-- 查询视图
SELECT * FROM top_students;

-- 对视图加条件过滤 SELECT * FROM top_students WHERE score > 90;

-- 视图也可以参与 JOIN SELECT t.name, t.score, c.course_name FROM top_students t JOIN scores sc ON t.name = sc.student_name JOIN courses c ON sc.course_id = c.id;

修改和删除视图

-- 修改视图定义
CREATE OR REPLACE VIEW top_students AS
SELECT name, score, age FROM students WHERE score >= 80;

-- 删除视图 DROP VIEW top_students;

-- 删除视图(如果存在才删除,避免报错) DROP VIEW IF EXISTS top_students;

可更新视图的条件

并非所有视图都可以执行 INSERT/UPDATE/DELETE。可更新视图必须满足:

  1. 视图基于单表(无 JOIN)
  2. SELECT 中不包含聚合函数、DISTINCT、GROUP BY、HAVING
  3. 视图包含了表中所有 NOT NULL 且无默认值的列

实战任务

  1. 创建一个包含学生姓名和分数的视图
  2. 通过视图查询分数大于等于 85 的学生
  3. 尝试修改视图定义,增加年龄列
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 146 篇
0 完成
🔥 0