MySQL JOIN 操作:数据表的联谊派对指南

news/2025/4/1 15:16:38/文章来源:https://www.cnblogs.com/geeklab/p/18800308

MySQL JOIN 操作:数据表的"联谊派对指南" 🎭

数据也有社交需求!在 MySQL 的世界里,孤独的表想要邂逅另一张表时,就需要参加一场 JOIN 派对...

什么是 JOIN 操作?🤔

JOIN 操作就是让两张或多张表建立临时关系,从而能够在一次查询中获取多个表的数据。简单来说:这是数据表们的"联谊活动",为了凑在一起创造出新的信息组合。

JOIN 派对的五种邀请函 🎟️

1️⃣ INNER JOIN - "严格对等交友派对"

场景:大学同学会
组织者:"只有同时出现在毕业照和通讯录上的人,才能入场!"
表A的数据:"我在毕业照上有名字!"
表B的数据:"我在通讯录上有电话!"
组织者:"你们都符合条件,请进!其他人都不准进!"

特点:只返回两表中匹配的行。这是最严格的 JOIN,就像一场只邀请共同好友的派对。

SELECT * FROM 表A
INNER JOIN 表B ON 表A.列 = 表B.列;

2️⃣ LEFT JOIN - "以 A 为主的开放派对"

场景:公司年会
老板:"我们部门全员必须参加!其他部门有对接的也可以来!"
表A的员工:"太好了,我们都可以参加!"
表B的员工:"只有和你们部门有业务往来的才能去..."

特点:返回左表的所有行,即使右表中没有匹配。就像一场"我方全员到场,对方随意"的派对。

SELECT * FROM 表A
LEFT JOIN 表B ON 表A.列 = 表B.列;

3️⃣ RIGHT JOIN - "以 B 为主的开放派对"

场景:产品发布会
市场部:"所有媒体朋友都会参加,我们公司只派相关负责人出席!"
表A的员工:"只有产品经理和我们几个去..."
表B的媒体:"我们全都要来采访!"

特点:与 LEFT JOIN 相反,返回右表的所有行。LEFT JOIN 的镜像版本。

SELECT * FROM 表A
RIGHT JOIN 表B ON 表A.列 = 表B.列;

4️⃣ FULL JOIN (MySQL 需用 UNION 模拟) - "全员大联欢"

场景:社区联谊会
社区主任:"两个小区的居民,不管认不认识对方,都可以来参加!"
表A的居民:"太棒了,我们全来!"
表B的居民:"我们也是,无论认不认识你们!"

特点:返回左表和右表中的所有行。是最包容的 JOIN,相当于 LEFT JOIN 和 RIGHT JOIN 的并集。

-- MySQL中模拟FULL JOIN
SELECT * FROM 表A
LEFT JOIN 表B ON 表A.列 = 表B.列
UNION
SELECT * FROM 表A
RIGHT JOIN 表B ON 表A.列 = 表B.列;

5️⃣ CROSS JOIN - "混乱的相亲大会"

场景:盲目相亲
红娘:"不管合不合适,每个男士都要见每个女士一次!"
表A的数据:"这也太乱了吧?我要见100个人?"
表B的数据:"排队排到腿软..."

特点:返回两个表的笛卡尔积 - 即左表的每一行与右表的每一行的所有组合。数据量爆炸!

SELECT * FROM 表A
CROSS JOIN 表B;

JOIN 派对效果图 🖼️

INNER JOIN               LEFT JOIN                RIGHT JOIN
┌─────┐ ┌─────┐         ┌─────┐ ┌─────┐         ┌─────┐ ┌─────┐
│  A  │ │  B  │         │  A  │ │  B  │         │  A  │ │  B  │
└─────┘ └─────┘         └─────┘ └─────┘         └─────┘ └─────┘┌─────┐               ┌─────┐                        ┌─────┐│A ∩ B│               │  A  │                        │  B  │└─────┘               └─────┘                        └─────┘FULL JOIN                CROSS JOIN
┌─────┐ ┌─────┐         ┌─────┐     ┌─────┐
│  A  │ │  B  │         │  A  │     │  B  │
└─────┘ └─────┘         └─────┘     └─────┘
┌───────────┐            ┌─────────────┐
│  A ∪ B   │            │    A × B    │
└───────────┘            └─────────────┘

JOIN 使用场景示例 🌟

常见数据表关系

-- 用户表(users)和订单表(orders)的关系
用户ID(user_id) [PK] <-----> 用户ID(user_id) [FK]

INNER JOIN 案例:查询有订单的用户

-- 查询:哪些用户下过订单?
SELECT u.username, o.order_id, o.amount
FROM users u
INNER JOIN orders o ON u.user_id = o.user_id;-- 结果:只返回下过订单的用户

适用场景:相亲后成功牵手的配对结果

LEFT JOIN 案例:统计所有用户的订单情况

-- 查询:所有用户的订单情况,包括没下单的
SELECT u.username, IFNULL(COUNT(o.order_id), 0) AS order_count
FROM users u
LEFT JOIN orders o ON u.user_id = o.user_id
GROUP BY u.username;-- 结果:包含所有用户,没下单的显示0

适用场景:班级点名,缺席的也要记录

JOIN 的常见陷阱 ⚠️

1. 无限增长的行数

经理:"为什么这个报表有1000万行?我们只有1000个用户!"
开发者:"我...可能用了CROSS JOIN..."
经理:"收拾东西走人吧!"

避免方法:始终使用连接条件!除非你真的需要笛卡尔积。

2. 慢查询地狱

用户:"为什么这个页面加载这么慢?"
开发者:"可能是因为我们JOIN了10张表..."
DBA:"你确定不是在写论文吗?"

避免方法:尽量减少 JOIN 的表数量,特别是在大表之间。

3. NULL 值迷宫

初级开发者:"为什么我的LEFT JOIN返回不对?"
高级开发者:"你的连接条件里有NULL值比较..."
初级开发者:"NULL == NULL不是true吗?"
高级开发者:"在SQL中,NULL不等于任何值,包括它自己!"

避免方法:使用 IS NULL 而不是=NULL,或者用 COALESCE/IFNULL 函数处理。

优化 JOIN 的小技巧 💡

  1. 索引连接字段 - 没有索引的 JOIN 就像没有地址的派对,大家都找不到门在哪

  2. 小表驱动大表 - 让记录少的表做驱动表,减少循环次数

  3. 用 EXPLAIN 分析 - 给 JOIN 操作做"体检",看看它健不健康

  4. 适当反范式化 - 有时候,适当冗余比复杂 JOIN 更高效


"JOIN 操作就像是数据表的社交网络 - 不同的表通过共同的字段找到彼此,结交新朋友,然后一起创造价值。"

—— 匿名数据建模师


下次面试官问你 MySQL 的 JOIN,放轻松!记住:那不过是在问数据表们喜欢什么样的派对而已!🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/908008.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读DAMA数据管理知识体系指南35数据仓库和商务智能活动

读DAMA数据管理知识体系指南35数据仓库和商务智能活动1. 活动 1.1. 理解需求1.1.1. 构建一个数据仓库与开发一套业务系统不同1.1.2. 业务系统的开发取决于精确的、具体的业务需求1.1.3. 数据仓库建设则是把数据汇集在一起,再以各种不同的方式使用这些数据1.1.4. 要考虑业务目标…

『Plotly实战指南』--饼图绘制基础篇

在数据可视化的世界里,饼图是一种直观且广泛使用的图表类型。 它能够将数据各个部分占整体的比例关系清晰地展现出来,适用于诸如市场占有率分析、调查结果分布、预算分配等多个领域。 饼图以扇形面积比例直观展示数据分布,适合用于:分类数据的占比分析(如市场份额、用户画…

可视化图解算法: 二叉树的前序遍历

对于二叉树的相关算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。1. 题目 描述 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 数据范围:二叉树的节点数量满足 0≤n≤100 ,二叉树节点的…

2025成都.NET开发者Connect圆满结束

2025年成都.NET开发者Connect线下聚会活动于3月29日圆满结束,本次活动吸引了约30位.NET开发者朋友参与,他们分别来自成都各家技术公司,相聚城南华府国际A座24楼会议区,共同探讨.NET+AIGC & Agile101相关话题。大家好,我是Edison。 2025年成都.NET开发者Connect线下聚会…

阿里云矢量图

阿里云矢量图 子比主题集成阿里云矢量图标库完整指南 最后更新:2025年03月29日 | 适用版本:子比主题7.3+一、阿里云项目配置 1.1 创建图标项目访问阿里云矢量图标库并登录搜索图标 → 加入购物车 → 创建新项目时设置: FontClass/Symbol前缀:zb- # 与主题CSS类名兼容 Font…

AMD GPU上对比语言图像预训练(CLIP)模型的交互(下)

3. 步骤3:检查图像和文本 将COCO数据集中的8幅样本图像及其文本描述输入模型,并比较相应特征之间的相似性。 import os import matplotlib.pyplot as plt from PIL import Image# 使用COCO数据集中的图像及其文本描述 image_urls = ["*/6/8378612_34ab6787ae_z.jpg&quo…

AMD GPU上对比语言图像预训练(CLIP)模型的交互(上)

AMD GPU上对比语言图像预训练(CLIP)模型的交互 3.1.1 介绍 对比语言图像预训练(CLIP)是一种连接视觉和自然语言的多模态深度学习模型。它是在OpenAI的论文从自然语言监督中学习可转移的视觉模型(2021)中介绍的,并在大量(4亿)图像字幕对的网络抓取数据上进行了对比训练…

推荐关注《AI芯片开发核心技术详解》(1)、《智能汽车传感器:原理设计应用》(2)、《TVM编译器原理与实践》(3)、《LLVM编译器原理与实践》(4),谢谢

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

惊!Docker Desktop竟然不会自动释放磁盘空间,C盘告急!

Docker Desktop竟然不会自动释放磁盘占用 > > 操作系统:Windows 11 家庭中文版 (23H2,22631.4037)16GB > > Docker Desktop 版本:v4.34.3 > 1. 缘起 docker pull docker-0.unsee.tech/savatar101/omniparse:0.1 拉取镜像,某个片段卡住,我主动取消了改操…

深入掌握FastAPI与OpenAPI规范的高级适配技巧

title: 深入掌握FastAPI与OpenAPI规范的高级适配技巧 date: 2025/03/30 01:16:11 updated: 2025/03/30 01:16:11 author: cmdragon excerpt: OpenAPI规范是RESTful API的标准描述格式,FastAPI通过自动化Schema生成机制将Pydantic模型和路径操作转换为标准OpenAPI文档,实现实…

‌Docker Desktop启动后自动加载Ubuntu WSL,docker-desktop-data WSL消失问题解析

‌Docker Desktop启动后自动加载Ubuntu WSL,docker-desktop-data WSL消失问题解析操作系统:Windows 11 家庭中文版 (23H2,22631.4037)16GB Docker Desktop 版本:v4.34.3如果赶时间,可以直接看结论。 Docker Desktop用的频次不是很高,记得之前安装完,用wsl --list -v命…

Prometheus的标签管理

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.标签概述1.什么是标签2.标签主要有两种表现形式3.Prometheus对数据处理的流程二.relabel_configs修改target标签案例1.为targets自定义打标签案例2.使用target_label新增标签2.relabel_configs替换标签…