【趣学SQL】第二章:高级查询技巧 2.1 复杂的 JOIN 操作——数据库世界的“社交达人“修炼手册

第二章:高级查询技巧

2.1 复杂的 JOIN 操作------数据库世界的"社交达人"修炼手册

如果说数据库是《老友记》里的中央咖啡馆,那么JOIN操作就是让角色们产生交集的经典对话!今天我们将化身"SQL社交大师",用一场虚拟的"咖啡店相亲局"和"披萨店黑帮风云",揭秘JOIN操作的终极奥义。☕️🔍


2.1.1 INNER JOIN------精准匹配的咖啡相亲局

sql 复制代码
-- 找出成功配对的情侣(有共同爱好)  
SELECT  
  boys.name AS 男生,  
  girls.name AS 女生,  
  boys.favorite_coffee  
FROM coffee_dating_boys AS boys  
INNER JOIN coffee_dating_girls AS girls  
  ON boys.favorite_coffee = girls.favorite_coffee;  

输出示例:

复制代码
+--------+--------+------------------+  
| 男生   | 女生   | favorite_coffee  |  
+--------+--------+------------------+  
| 小明   | 小美   | 燕麦拿铁         |  
| 阿强   | 莉莉   | 生椰冷萃         |  
+--------+--------+------------------+  

经典台词:INNER JOIN就像婚介所说:"只展示有共同话题的配对,其他人都当不存在!"


2.1.2 LEFT JOIN------保留所有男生的悲情故事

sql 复制代码
-- 查看所有男生(即使没匹配到女生)  
SELECT  
  boys.name,  
  girls.name AS match_result  
FROM coffee_dating_boys AS boys  
LEFT JOIN coffee_dating_girls AS girls  
  ON boys.favorite_coffee = girls.favorite_coffee;  

扎心输出:

复制代码
+--------+--------------+  
| name   | match_result |  
+--------+--------------+  
| 小明   | 小美         |  
| 阿强   | 莉莉         |  
| 大雄   | NULL         | ← 爱喝美式的大雄无人问津  
+--------+--------------+  

应用场景:

  • 查找没有订单的顾客
  • 统计部门缺勤人员
  • 发现滞销商品

2.1.3 RIGHT JOIN & FULL JOIN------被遗忘的江湖秘术

sql 复制代码
-- RIGHT JOIN(保留所有女生)  
SELECT *  
FROM boys  
RIGHT JOIN girls ON boys.coffee = girls.coffee;  

-- MySQL实现FULL JOIN的魔法(LEFT + RIGHT + UNION去重)  
SELECT * FROM boys LEFT JOIN girls ON ...  
UNION  
SELECT * FROM boys RIGHT JOIN girls ON ...;  

冷知识:

  • 90%的RIGHT JOIN都可以改写为LEFT JOIN(只是调换表顺序)
  • 真正的FULL JOIN就像"全员吃瓜大会"------不管有没有匹配,所有记录都出来露脸

2.1.4 SELF JOIN------披萨黑帮的家族关系网

sql 复制代码
-- 查找同一家族的披萨配方(共享秘制酱料)  
SELECT  
  A.pizza_name AS 披萨A,  
  B.pizza_name AS 披萨B,  
  A.secret_sauce  
FROM pizza_recipes AS A  
INNER JOIN pizza_recipes AS B  
  ON A.secret_sauce = B.secret_sauce  
  AND A.pizza_id != B.pizza_id;  

输出惊悚剧透:

复制代码
+------------------+------------------+----------------+  
| 披萨A            | 披萨B            | secret_sauce   |  
+------------------+------------------+----------------+  
| 西西里火山       | 黑手党特供       | 魔鬼辣椒酱     |  
+------------------+------------------+----------------+  

黑帮暗语:SELF JOIN就像照镜子,让你发现"原来另一个自己也在用同款口红!"


2.1.5 多表 JOIN------咖啡店宇宙的终极联动

sql 复制代码
-- 查询订单详情(顾客+咖啡+店员)  
SELECT  
  c.name AS 顾客,  
  o.order_time,  
  cof.name AS 咖啡,  
  s.name AS 店员  
FROM orders o  
INNER JOIN customers c ON o.customer_id = c.id  
INNER JOIN coffees cof ON o.coffee_id = cof.id  
LEFT JOIN staff s ON o.staff_id = s.id;  

执行顺序解密:

  1. 先让orders和customers牵手成功
  2. 带着这对情侣去找coffees三方会谈
  3. 最后邀请staff加入群聊(没店员也算)

2.1.6 优化 JOIN 性能------拒绝卡顿的秘技

技巧1:索引黄金三件套
sql 复制代码
-- 为关联字段创建索引  
CREATE INDEX idx_customer ON orders(customer_id);  
CREATE INDEX idx_coffee ON orders(coffee_id);  
技巧2:EXPLAIN 诊断书
sql 复制代码
EXPLAIN  
SELECT * FROM A  
JOIN B ON A.id = B.a_id  
WHERE A.create_time > '2023-01-01';  

关键指标:

  • rows: 预估扫描行数(越小越好)
  • Extra: Using index(索引覆盖爽翻天)
技巧3:分阶段JOIN
sql 复制代码
-- 先过滤再JOIN  
SELECT *  
FROM (SELECT * FROM A WHERE create_time > '2023-01-01') AS filtered_A  
JOIN B ON filtered_A.id = B.a_id;  

血泪案例 :

某程序员用5个表JOIN查询,结果执行时间从0.5秒变成15分钟------后来发现有个表忘记加索引,就像让咖啡师用脚磨咖啡豆!


课后彩蛋:JOIN冷知识

  • 最早的JOIN操作需要手动写嵌套循环(1970年代的程序员头发就是这么没的)
  • 如果《哈利波特》人物表做JOIN:哈利 LEFT JOIN 父母 ON... 结果永远是NULL(泪目)
  • 在分布式数据库中,JOIN可能比霍格沃茨的楼梯还难搞

现在你已经成为"JOIN操作界的社交恐怖分子"!下一章我们将进入《子查询的高级用法------SQL世界的"俄罗斯套娃"艺术》的玄学领域,记得给你的数据库准备护肝片------性能优化是场持久战! 🚀

相关推荐
小徐不徐说2 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
论文复现现场3 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
Decay__4 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
心梦缘-雪雁5 小时前
SQL Server 查询数据存在哪个表里
数据库
lusklusklusk6 小时前
Python 巡检脚本:进程运行状态、数据库写入时效检查及邮件通知与告警
数据库·python·oracle
GeW6 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
SelectDB6 小时前
Doris Arrow Flight SQL 高速读取协议实战:与 Snowflake 客户端取数链路对照
大数据·数据库·数据分析
曼岛_6 小时前
[图解密码学]第4章 古典密码
java·数据库·密码学
瀚高PG实验室7 小时前
HGDB V9.0.5 .pgpass 免密登录提示 IsEncryptNon-base64 encoding 警告处理
数据库·postgresql·瀚高数据库
龙腾AI白云8 小时前
大模型检索增强生成(RAG)的技术原理与架构设计
数据库·python·机器学习·知识图谱