目录
- 🌟 先导故事:抽象法学SQL
- 1.1 极简步骤:三步玩转函数
- 🥛 生活小剧场:制作奶茶
- 1.2 四类常用函数详解
- 1.3 黑科技:处理NULL的妙招
- 2.1 五大过滤神器使用指南
- 🍜 场景:筛选面馆订单
- 2.2 特别提醒:LIKE的妙用
- 3.1 极简流程图
- 3.2 三步上手案例:会员等级系统
- 3.3 黑魔法:智能统计各等级人数
- 🔥 实战挑战:
- 🚀 学习加速器
🌟 先导故事:抽象法学SQL
想象你是个餐厅后厨新手 👩🍳
- 函数 = 你的厨房工具(榨汁机、烤箱、菜刀)
- 谓词 = 食材过滤器(筛掉烂菜叶,保留新鲜食材)
- CASE表达式 = 智能开关(自动给菜品贴价格标签)
接下来带你玩转这三个神器!
1. 函数:你的瑞士军刀
1.1 极简步骤:三步玩转函数
- 选工具 → 2. 喂数据 → 3. 拿结果
🥛 生活小剧场:制作奶茶
-- 原料:牛奶(200ml) + 茶(150ml) → 总容量?
SELECT 200 + 150; -- 算术函数加法
-- 客人姓名拼接:"张" + "三" → 显示全名
SELECT CONCAT('张', '三'); -- 字符串拼接
-- 今日特价菜:自动获取当天日期
SELECT CURRENT_DATE(); -- 日期函数
1.2 四类常用函数详解
函数类型 | 工具说明 | 生活场景 | 代码示例 |
---|---|---|---|
算术函数 | 数字计算器 | 计算菜品利润(收入-成本) | SELECT 25-18; → 7 |
字符串 | 文字拼接器 | 合并地址(省+市+区) | SELECT CONCAT('北京','市朝阳区') |
日期函数 | 智能日历 | 计算会员有效期(今天+30天) | SELECT DATE_ADD(CURRENT_DATE, INTERVAL 30 DAY); |
转换函数 | 万能变形器 | 把文字"100"变成数字 | SELECT CAST('100' AS SIGNED); → 100 |
1.3 黑科技:处理NULL的妙招
/* 🧀 场景:显示用户地址(未知地址显示"暂未登记") */
SELECT COALESCE(address, '暂未登记') FROM users;
-- 效果演示:
-- 原始数据:NULL → 显示结果:暂未登记
-- 原始数据:"北京市" → 显示结果:北京市
2. 谓词:智能筛子
2.1 五大过滤神器使用指南
🍜 场景:筛选面馆订单
-- (1) LIKE:找包含"牛肉"的菜品(%代表任意字符)
SELECT * FROM menu WHERE name LIKE '%牛肉%';
-- (2) BETWEEN:选择20-30元的菜品
SELECT * FROM menu WHERE price BETWEEN 20 AND 30;
-- (3) IS NULL:查找未定价的新菜品
SELECT * FROM menu WHERE price IS NULL;
-- (4) IN:筛选经典面食(牛肉面/炸酱面/热干面)
SELECT * FROM menu WHERE name IN ('牛肉面', '炸酱面', '热干面');
-- (5) EXISTS:查找已下单的菜品(关联订单表)
SELECT * FROM menu m
WHERE EXISTS (SELECT 1 FROM orders WHERE dish_id = m.id);
2.2 特别提醒:LIKE的妙用
-- 🚨 注意:要查找包含"20%"的折扣信息(需要转义符)
SELECT * FROM promo WHERE discount LIKE '%20\%%' ESCAPE '\';
/* 解释:
- 第一个%表示前面可以有任意字符
- 20\% 匹配准确的20%文字
- 第二个%表示后面可以有任意字符
*/
3. CASE表达式:自动贴标机
3.1 极简流程图
输入数据 → 判断条件 → 贴标签 → 输出结果
3.2 三步上手案例:会员等级系统
SELECT username,
CASE
WHEN purchase_total >= 1000 THEN '钻石会员'
WHEN purchase_total >= 500 THEN '黄金会员'
ELSE '普通会员'
END AS member_level
FROM users;
3.3 黑魔法:智能统计各等级人数
SELECT
SUM(CASE WHEN score >= 90 THEN 1 ELSE 0 END) AS 优,
SUM(CASE WHEN score >= 80 THEN 1 ELSE 0 END) AS 良,
SUM(CASE WHEN score < 80 THEN 1 ELSE 0 END) AS 及格
FROM students;
4. 避坑指南 🚨
新手常见坑 | 正确姿势 | 原理解释 |
---|---|---|
用=判断NULL | WHERE price IS NULL | NULL是薛定谔的猫,要用IS判断 |
数字模糊匹配 | CAST(number AS CHAR) LIKE | 数字和文字是不同物种 |
CASE忘记END | 检查每个CASE都要有END | 就像句子必须要有句号 |
5. 课后作业 📝
🔥 实战挑战:
-- 创建学生成绩表
CREATE TABLE students (
id INT,
name VARCHAR(20),
score INT
);
INSERT INTO students VALUES
(1, '张三', 85),
(2, '李四', 92),
(3, '王五', NULL);
-- 你的任务:查询所有学生成绩等级
-- 要求:
-- >=90 → 优
-- >=80 → 良
-- <80 → 及格
-- NULL → 未考试
答案见评论区
🚀 学习加速器
下期预告:《集合运算》
互动话题:你遇到过最奇葩的SQL错误是什么?欢迎评论区留言讨论!
温馨提示:点击【关注】不迷路,每天持续输出