【趣学SQL】第一章:SQL 基础与进阶 1.1 SQL 基础回顾——从“披萨店“到“世界500强“的语法奇旅
第一章:SQL 基础与进阶
1.1 SQL 基础回顾——从"披萨店"到"世界500强"的语法奇旅
大家好,欢迎来到「SQL生存训练营」!今天我们要用一家虚拟披萨店的经营故事,带你在笑声中重温SQL基础语法。准备好了吗?戴上厨师帽,我们出发!
1.1.1 SELECT 语句——披萨菜单大公开
-- 查看所有披萨配方(表结构)
DESCRIBE pizza_menu;
-- 展示所有披萨的必杀技(查询全表)
SELECT * FROM pizza_menu;
-- 只想知道披萨名称和价格?
SELECT pizza_name, price
FROM pizza_menu;
输出示例:
+---------------------+-------+
| pizza_name | price |
+---------------------+-------+
| 芝士核弹 | 88 |
| 夏威夷菠萝风暴 | 78 |
| 意大利黑手党特供 | 108 |
+---------------------+-------+
小贴士:
SELECT *
就像点外卖时喊"老板随便来",虽然方便但可能导致"数据肥胖症",建议明确字段!
1.1.2 WHERE 子句——素食主义者的尊严之战
-- 找出所有素食披萨(蔬菜含量>50%)
SELECT pizza_name
FROM pizza_menu
WHERE vegetable_ratio > 0.5;
-- 查找价格在80-100元的爆款披萨
SELECT *
FROM pizza_menu
WHERE price BETWEEN 80 AND 100
AND is_hot_seller = 1;
幽默案例:
某程序员试图用WHERE pizza_name = '夏威夷披萨'
,结果发现表中名称是"夏威夷菠萝风暴"——这就是为什么我们需要模糊查询(后续章节揭晓)!
1.1.3 JOIN 操作——当订单遇到顾客
-- 查看订单详情(关联顾客信息)
SELECT orders.order_id, customers.name, orders.total_price
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.id;
-- 左连接保留所有顾客(哪怕没下过单)
SELECT customers.name, orders.order_id
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id;
输出彩蛋:
+------------+------------+
| 张三 | O1001 |
| 李四 | NULL | ← 这位顾客在购物车犹豫了3天...
+------------+------------+
比喻时刻:JOIN就像相亲——INNER JOIN是双方看对眼,LEFT JOIN是"我条件在这,有没有对象随缘"。
1.1.4 GROUP BY 与聚合函数——销量统计大作战
-- 统计每种披萨的销售总量
SELECT pizza_id, SUM(quantity) AS total_sold
FROM order_details
GROUP BY pizza_id;
-- 找出单笔订单最高消费(聚合函数嵌套)
SELECT MAX(total_price)
FROM orders;
真实案例:
某新手曾写SELECT pizza_id, price FROM pizza_menu GROUP BY pizza_id
,结果数据库怒吼:“请告诉我price要怎么合并!”——记住:非聚合字段必须出现在GROUP BY中!
1.1.5 ORDER BY 与 LIMIT 子句——销量排行榜
-- 按价格降序查看高端披萨
SELECT *
FROM pizza_menu
ORDER BY price DESC
LIMIT 3;
-- 分页查询(每页5条)
SELECT *
FROM customers
ORDER BY registration_date
LIMIT 5 OFFSET 10; -- 第三页数据
幽默注释:
LIMIT 1
是程序员的自我保护机制——当老板说"随便给我看条数据"时,防止不小心查询出十万条记录导致系统爆炸。
1.1.6 子查询——披萨界的俄罗斯套娃
-- 找出比平均价贵的披萨
SELECT pizza_name
FROM pizza_menu
WHERE price > (
SELECT AVG(price)
FROM pizza_menu
);
-- 在WHERE中使用子查询
SELECT name
FROM customers
WHERE id IN (
SELECT DISTINCT customer_id
FROM orders
);
思维训练:
这个查询就像让店长做市场调研:“先算全店平均价(子查询),再筛选比这个价高的披萨(外层查询)”。
1.1.7 事务与锁——披萨店资金保卫战
START TRANSACTION;
-- 顾客下单
UPDATE inventory SET stock = stock - 2 WHERE pizza_id = 101;
INSERT INTO orders (customer_id, total_price) VALUES (202, 176);
COMMIT;
-- 如果发生异常
ROLLBACK;
经典场景:
当两个顾客同时购买最后一份"芝士核弹"时,事务就像保安大叔:“一个个来!我先锁住库存,你们别想同时修改!”
课后彩蛋:SQL冷知识
- 最早的SQL原型叫SEQUEL(结构化英语查询语言),因为商标问题改名
- 在1974年,编写一条SQL查询需要打孔卡片——写错一个字母就要重做
- MySQL的"MY"取自创始人Michael Widenius女儿的名字"My"
现在你已经是SQL基础课的幸存者了!下次课我们将进入:索引优化——数据库世界的"闪电侠"训练营"的魔幻进阶之旅,记得带护目镜——因为JOIN操作会复杂到冒火星!
代码学习,前言技术分享,深度分析编程技术,普及科普编程技术,天天都要敲代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)