目录
- 一、视图:给复杂查询装个「快捷按钮」🎯
- 1. 什么是视图?
- 2. 极简操作步骤
- 3. 深层解析
- 二、子查询:SQL里的「临时便签」📝
- 1. 一句话理解子查询
- 2. 万能使用场景
- 3. 标量子查询(返回单一值)
- 三、关联子查询:按组PK的智能裁判🤖
- 1. 经典案例:找出每个部门的薪资高手
- 2. 极简代码模板
- 3. 避坑指南
- 🎮 互动练习场
- **1. 数据表结构**
- **2. 示例数据**
- 🔥 高效学习路径
本文适合人群:会写简单SQL但被复杂查询难住的萌新 | 想高效管理数据的程序员
你将收获:视图省事技巧、子查询万能公式、关联查询核心套路 → 附完整代码!
学习效果:学完立刻能优化公司报表查询!🚀
一、视图:给复杂查询装个「快捷按钮」🎯
1. 什么是视图?
想象你每天都要在Excel筛选「价格>100且库存>50的商品」,每次都重复操作很麻烦。
视图就是把这个筛选条件保存成「虚拟表」,下次直接打开就能用!
2. 极简操作步骤
-- ① 创建视图(保存查询)
CREATE VIEW 畅销商品 AS
SELECT 商品名, 价格, 库存
FROM 商品表
WHERE 价格 > 100 AND 库存 > 50;
-- ② 使用视图(像普通表一样查!)
SELECT * FROM 畅销商品 WHERE 库存 < 100;
3. 深层解析
特性 | 普通表 | 视图 |
---|---|---|
存储 | 实际数据(占硬盘) | 查询逻辑(不占空间) |
更新 | 直接修改 | 多数情况只能查不能改 |
性能 | 快 | 稍慢(动态生成数据) |
避坑指南🚨:
- ❌ 视图里不能写
ORDER BY
(排序交给查询时做) - ❌ 避免多层视图嵌套(像俄罗斯套娃,难维护)
二、子查询:SQL里的「临时便签」📝
1. 一句话理解子查询
把一次查询的结果作为另一次查询的条件或数据源
2. 万能使用场景
场景:找出比平均价贵的商品
传统方法:先查平均价 → 再手动输入数值
子查询法:一步到位!
SELECT 商品名, 价格
FROM 商品表
WHERE 价格 > (SELECT AVG(价格) FROM 商品表); -- 括号内就是子查询
3. 标量子查询(返回单一值)
规则:必须且只能返回1行1列
高级用法:动态计算列
SELECT
商品名,
价格,
(SELECT AVG(价格) FROM 商品表) AS 平均价, -- 每行都显示平均价
价格 - (SELECT AVG(价格) FROM 商品表) AS 差价
FROM 商品表;
三、关联子查询:按组PK的智能裁判🤖
1. 经典案例:找出每个部门的薪资高手
需求:显示比所在部门平均工资高的员工
难点:每个部门单独计算平均值 → 普通子查询做不到!
2. 极简代码模板
SELECT 员工名, 部门, 工资
FROM 员工表 e1
WHERE 工资 > (
SELECT AVG(工资)
FROM 员工表 e2
WHERE e1.部门 = e2.部门 -- 关键!关联两个表
);
执行过程:
- 外层逐行读取员工数据(如「张三,销售部,8000」)
- 内层计算「销售部」的平均工资(如6000)
- 比较:8000 > 6000 → 保留该行
3. 避坑指南
- ✅ 关联条件必须写在子查询内
- ❌ 不要忘记给表起别名(e1、e2)
🎮 互动练习场
用关联子查询实现:每个品类中价格排名前3的商品
(如果价格相同,都计入前3)
1. 数据表结构
表名:products
字段名 | 类型 | 示例值 |
---|---|---|
product_id | INT | 1 |
name | VARCHAR(50) | “无线耳机” |
category | VARCHAR(20) | “电子产品” |
price | DECIMAL | 299.00 |
2. 示例数据
-- 建表语句
CREATE TABLE products (
product_id INT PRIMARY KEY,
name VARCHAR(50),
category VARCHAR(20),
price DECIMAL(10,2)
);
-- 插入数据
INSERT INTO products VALUES
(1, '无线耳机', '电子产品', 299),
(2, '机械键盘', '电子产品', 450),
(3, '蓝牙音箱', '电子产品', 199),
(4, '运动T恤', '服装', 89),
(5, '牛仔裤', '服装', 120),
(6, '羽绒服', '服装', 599),
(7, '薯片', '食品', 8.5),
(8, '巧克力', '食品', 15),
(9, '矿泉水', '食品', 2);
提示:需要用到COUNT
统计比当前商品贵的数量
(答案见评论区置顶,欢迎晒出你的解法!)
🔥 高效学习路径
下期预告:《函数、谓词、case表达式》
互动话题:你在学习SQL时遇到过哪些坑?欢迎评论区留言讨论!
温馨提示:我是[随缘而动,随遇而安], 一个喜欢用生活案例讲技术的开发者。如果觉得有帮助,点赞关注不迷路🌟