PostgreSQL从入门到进阶
🏠 首页
  • 开始学习

    • PostgreSQL介绍
    • 安装配置
  • 基础教程

    • 数据库与表
    • 数据类型
    • CRUD操作
    • WHERE条件
  • 进阶查询

    • 联表查询
    • 聚合函数
    • 子查询
    • 视图
  • 性能优化

    • 索引优化
    • 查询优化
    • EXPLAIN分析
  • 事务处理
  • 触发器
  • 存储过程
  • JSON数据
  • 博客系统
  • 用户管理系统
  • 最佳实践
🔗 编程指南
🏠 首页
  • 开始学习

    • PostgreSQL介绍
    • 安装配置
  • 基础教程

    • 数据库与表
    • 数据类型
    • CRUD操作
    • WHERE条件
  • 进阶查询

    • 联表查询
    • 聚合函数
    • 子查询
    • 视图
  • 性能优化

    • 索引优化
    • 查询优化
    • EXPLAIN分析
  • 事务处理
  • 触发器
  • 存储过程
  • JSON数据
  • 博客系统
  • 用户管理系统
  • 最佳实践
🔗 编程指南
  • 开始之前

    • 教程介绍
    • 什么是PostgreSQL?
    • 安装PostgreSQL
  • 基础入门

    • 数据库和表的概念
    • 数据类型详解
    • 增删改查操作(CRUD)
    • 查询条件WHERE
  • 进阶查询

    • 多表联查JOIN
    • 聚合函数
    • 子查询
    • 视图VIEW
  • 性能优化

    • 索引详解
    • 查询优化
    • 执行计划分析
  • 高级特性

    • 事务处理
    • 触发器
    • 存储过程
    • JSON数据
  • 实战项目

    • 实战项目:博客系统
    • 实战项目:用户管理系统
    • 最佳实践

视图VIEW

嗨!我是长安。视图是虚拟表,能简化复杂查询!

🎯 什么是视图?

视图是保存的SQL查询,像一个虚拟表:

-- 创建视图
CREATE VIEW user_posts AS
SELECT 
    u.username,
    p.title,
    p.created_at
FROM users u
JOIN posts p ON u.id = p.user_id;

-- 使用视图(就像查询表一样)
SELECT * FROM user_posts;

📝 视图的优点

✅ 简化复杂查询
✅ 提高安全性(隐藏敏感列)
✅ 保持数据独立性
✅ 重用SQL逻辑

💡 实战例子

-- 活跃用户视图
CREATE VIEW active_users AS
SELECT * FROM users
WHERE is_deleted = FALSE
  AND last_login > NOW() - INTERVAL '30 days';

-- 商品统计视图
CREATE VIEW product_stats AS
SELECT 
    p.id,
    p.name,
    COUNT(oi.id) as order_count,
    SUM(oi.quantity) as total_sold
FROM products p
LEFT JOIN order_items oi ON p.id = oi.product_id
GROUP BY p.id, p.name;

-- 使用视图
SELECT * FROM product_stats
WHERE total_sold > 100
ORDER BY total_sold DESC;

🔄 可更新视图

简单视图可以INSERT/UPDATE/DELETE:

-- 简单视图(可更新)
CREATE VIEW beijing_users AS
SELECT * FROM users WHERE city = '北京';

-- 可以插入(会插入到原表)
INSERT INTO beijing_users (username, city)
VALUES ('测试', '北京');

-- 复杂视图(不可更新)
CREATE VIEW user_stats AS
SELECT user_id, COUNT(*) FROM posts GROUP BY user_id;
-- 这个不能INSERT/UPDATE

🛠️ 视图管理

-- 修改视图
CREATE OR REPLACE VIEW active_users AS
SELECT * FROM users WHERE is_active = TRUE;

-- 删除视图
DROP VIEW active_users;

-- 查看所有视图
\dv

📚 下一步

掌握了视图,你可以更好地组织SQL代码了!

接下来学习索引,提升性能!


长安的话:视图是很好的抽象工具,但别滥用,嵌套太多会影响性能!🎯

最近更新: 2025/12/1 18:21
Prev
子查询