Bootstrap

第九篇 SQL新手村通关秘籍:函数、谓词、CASE表达式真香指南(附实战代码)

目录

    • 🌟 先导故事:抽象法学SQL
      • 1.1 极简步骤:三步玩转函数
        • 🥛 生活小剧场:制作奶茶
      • 1.2 四类常用函数详解
      • 1.3 黑科技:处理NULL的妙招
      • 2.1 五大过滤神器使用指南
        • 🍜 场景:筛选面馆订单
      • 2.2 特别提醒:LIKE的妙用
      • 3.1 极简流程图
      • 3.2 三步上手案例:会员等级系统
      • 3.3 黑魔法:智能统计各等级人数
      • 🔥 实战挑战:
    • 🚀 学习加速器

🌟 先导故事:抽象法学SQL

想象你是个餐厅后厨新手 👩🍳

  • 函数 = 你的厨房工具(榨汁机、烤箱、菜刀)
  • 谓词 = 食材过滤器(筛掉烂菜叶,保留新鲜食材)
  • CASE表达式 = 智能开关(自动给菜品贴价格标签)
    接下来带你玩转这三个神器!

1. 函数:你的瑞士军刀

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. 避坑指南 🚨

新手常见坑正确姿势原理解释
用=判断NULLWHERE price IS NULLNULL是薛定谔的猫,要用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 → 未考试

答案见评论区


🚀 学习加速器

  1. 立即实践
    SQL在线练习平台测试文中的代码
  2. 扩展学习

下期预告:《集合运算》
互动话题:你遇到过最奇葩的SQL错误是什么?欢迎评论区留言讨论!
温馨提示:点击【关注】不迷路,每天持续输出


;