【趣学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操作会复杂到冒火星!

posted @   爱上编程技术  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示