当前位置: 首页 > article >正文

SQL表连接终于讲明白了:INNER JOIN、LEFT JOIN、RIGHT JOIN 一次学透

SQL表连接终于讲明白了INNER JOIN、LEFT JOIN、RIGHT JOIN 一次学透很多人学 SQL卡得最久的不是 SELECT、WHERE而是表连接JOIN。这篇就不绕弯直接把 SQL 表连接讲到能上手。一、为什么一定要学会表连接真实业务里数据通常不会全塞在一张表里。比如电商系统里用户信息在users表订单信息在orders表。你想查“每个订单是谁下的”“哪些用户没下单”就必须把多张表关联起来查。JOIN 的本质把不同表中有关联的数据按条件拼接起来。二、先记住 JOIN 的核心结构SELECT 列名 FROM 表A JOIN 表B ON 表A.关联字段 表B.关联字段;比如SELECT users.user_name, orders.order_id, orders.amount FROM users INNER JOIN orders ON users.user_id orders.user_id;ON说白了就是两张表到底凭什么配对。这个条件写错后面全白搭。三、INNER JOIN只要两边都能对上INNER JOIN只返回两张表中能够匹配成功的数据。SELECT users.user_name, orders.order_id, orders.amount FROM users INNER JOIN orders ON users.user_id orders.user_id;如果用户表里有小王、小李、小张订单表里只有小王和小李的订单那么结果中不会出现小张。一句人话总结能配上的留下配不上的滚。四、LEFT JOIN左边全保留右边能接上就接LEFT JOIN的逻辑是以左表为主左表的所有记录都保留右表匹配不上就补NULL。SELECT users.user_name, orders.order_id, orders.amount FROM users LEFT JOIN orders ON users.user_id orders.user_id;这时即使小张没有下单也会出现在结果中只不过订单相关字段是NULL。查“没有下单的用户”时这是高频写法SELECT users.user_id, users.user_name FROM users LEFT JOIN orders ON users.user_id orders.user_id WHERE orders.order_id IS NULL;五、RIGHT JOIN能不用就少用RIGHT JOIN和 LEFT JOIN 一样只是把“主表”换到了右边。大多数团队更习惯把主表写在左侧所以开发里通常更推荐统一使用 LEFT JOIN少用 RIGHT JOIN省得自己给自己上强度。六、FULL OUTER JOIN两边都要谁落单都留下FULL OUTER JOIN会保留左右两边全部记录匹配得上就拼起来匹配不上就补 NULL。这个在数据核对、对账时很好用。不过注意MySQL 不直接支持 FULL OUTER JOIN很多时候需要用UNION模拟。所以如果你是 MySQL 初学者先把 INNER JOIN 和 LEFT JOIN 吃透已经够用了。七、记 JOIN不如记这个问题别死背定义直接问自己一句我到底想保留哪张表的全部数据这个问题一问JOIN 类型通常就出来了INNER JOIN只要交集LEFT JOIN左边全保留RIGHT JOIN右边全保留FULL OUTER JOIN两边都保留八、初学者最容易踩的 4 个坑1忘了写 ON 条件SELECT * FROM users JOIN orders;这要么直接报错要么变成笛卡尔积。别查数据查着查着就把数据库现场炸成烟花。2关联字段不唯一结果重复一对多、多对多关系本来就会让结果行数膨胀。写 JOIN 前先搞清楚关系一对一一对多多对多否则你会以为是 SQL 抽风其实是你没想明白。3LEFT JOIN 后又在 WHERE 里把右表卡死SELECT users.user_name, orders.order_id FROM users LEFT JOIN orders ON users.user_id orders.user_id WHERE orders.amount 100;这会把右表为空的记录过滤掉效果更像 INNER JOIN。更稳的写法是把过滤条件写到ON里SELECT users.user_name, orders.order_id FROM users LEFT JOIN orders ON users.user_id orders.user_id AND orders.amount 100;4字段重名不加表前缀如果两张表里都有user_id那你裸写字段名数据库十有八九会回你一句字段不明确。老老实实写全或者直接上表别名SELECT u.user_name, o.order_id, o.amount FROM users u LEFT JOIN orders o ON u.user_id o.user_id;九、建议直接收藏的 4 个实战模板1查订单和对应用户名SELECT u.user_name, o.order_id, o.amount FROM users u INNER JOIN orders o ON u.user_id o.user_id;2查所有用户及其订单没有订单也显示SELECT u.user_name, o.order_id, o.amount FROM users u LEFT JOIN orders o ON u.user_id o.user_id;3查没有下单的用户SELECT u.user_id, u.user_name FROM users u LEFT JOIN orders o ON u.user_id o.user_id WHERE o.order_id IS NULL;4统计每个用户的订单数SELECT u.user_name, COUNT(o.order_id) AS order_count FROM users u LEFT JOIN orders o ON u.user_id o.user_id GROUP BY u.user_name;十、最后总结INNER JOIN只要匹配成功的数据LEFT JOIN左表全保留右表匹配不上就 NULL查“没有”优先想 LEFT JOIN IS NULLLEFT JOIN 右表过滤很多时候要写在 ON 里不要乱塞 WHERESQL 表连接不难它只是经常被讲得很绕。一旦你抓住“保留谁”这个核心JOIN 基本就顺了。

相关文章:

SQL表连接终于讲明白了:INNER JOIN、LEFT JOIN、RIGHT JOIN 一次学透

SQL表连接终于讲明白了:INNER JOIN、LEFT JOIN、RIGHT JOIN 一次学透 很多人学 SQL,卡得最久的不是 SELECT、WHERE,而是表连接(JOIN)。这篇就不绕弯,直接把 SQL 表连接讲到能上手。 一、为什么一定要学会表…...

如何在 Superset Docker 容器中安装 MySQL 驱动

如何在 Superset Docker 容器中安装 MySQL 驱动 Apache Superset 是一款功能强大的开源数据挖掘与可视化平台,支持多种数据源连接、自定义仪表盘和细粒度权限控制,广泛应用于数据运维与分析场景。由于 Superset 官方 Docker 镜像未默认集成 MySQL 驱动&…...

从零实现PyTorch风格迁移:剖析VGG19特征提取与损失函数设计

1. 风格迁移的核心原理与VGG19的选择 第一次看到梵高风格的风景照时,我完全被这种技术震撼了。后来才知道,这背后的核心是特征分离与重组——把内容图像的结构信息与风格图像的纹理信息拆解后重新组合。而VGG19之所以成为风格迁移的经典选择,…...

数据库事务的坑:@Transactional注解的隐藏陷阱

一、问题现场还原 那是一个月黑风高的夜晚,小王正准备下班,突然运营群里炸了: 【运营】重大bug!用户下单成功了,但没扣库存! 【运营】已有多名用户反馈... 【运维】涉及金额已达¥12,580... 小…...

手把手教你用Qwen-Image:小白也能轻松制作带文字的创意海报

手把手教你用Qwen-Image:小白也能轻松制作带文字的创意海报 你是不是也遇到过这样的烦恼?想为活动做个海报,脑子里有画面,但打开设计软件就傻眼——字体怎么选?排版怎么弄?背景图去哪找?折腾半…...

Apache SeaTunnel Web 初体验:从零开始搭建大数据流处理可视化平台(含避坑指南)

Apache SeaTunnel Web 初体验:从零开始搭建大数据流处理可视化平台(含避坑指南) 作为一名长期与命令行打交道的数据工程师,第一次接触Apache SeaTunnel Web时,那种"终于不用再记复杂参数"的解脱感至今难忘。…...

LaserGRBL激光雕刻软件终极指南:从零开始掌握专业雕刻技巧

LaserGRBL激光雕刻软件终极指南:从零开始掌握专业雕刻技巧 【免费下载链接】LaserGRBL Laser optimized GUI for GRBL 项目地址: https://gitcode.com/gh_mirrors/la/LaserGRBL LaserGRBL是一款专为GRBL控制器优化的专业激光雕刻软件,通过直观的图…...

3步掌握微信数据解密:本地安全解密方案的终极指南

3步掌握微信数据解密:本地安全解密方案的终极指南 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 当微信聊天记录被加密存储在数据库中,你是否曾感到束手无策?那些珍贵…...

一道KMP统考真题彻底讲透:nextval与滑动距离的本质皆

一、各自优势和对比 这是检索出来的数据,据说是根据第三方评测与企业数据,三款产品在代码生成质量上各有侧重: 产品 语言优势 场景亮点 核心差异 百度 Comate C核心代码质量第一;Python首生成率达92.3% SQL生成准确率提升35%&…...

SEAL库CKKS实战:手把手教你调参避开‘scale out of bounds’报错(附8192模数配置)

SEAL库CKKS实战:手把手教你调参避开‘scale out of bounds’报错(附8192模数配置) 在同态加密的实际应用中,微软SEAL库的CKKS方案因其支持浮点数运算的特性而备受开发者青睐。然而,许多初入门的开发者在尝试实现复杂计…...

5个高效技巧:掌握EmojiOne彩色表情字体完全指南

5个高效技巧:掌握EmojiOne彩色表情字体完全指南 【免费下载链接】emojione-color OpenType-SVG font of EmojiOne 2.3 项目地址: https://gitcode.com/gh_mirrors/em/emojione-color EmojiOne Color是一款由Adobe开发的开源彩色字体,采用OpenType…...

Cursor Pro免费激活终极指南:突破API限制的完整技术解决方案

Cursor Pro免费激活终极指南:突破API限制的完整技术解决方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached yo…...

智赋学术・真实赋能|虎贲等考 AI:全流程论文写作辅助平台,以真文献・真数据・真工具重构学术创作

虎贲等考 AI 智能写作(https://www.aihbdk.com/)是一款基于人工智能深度模型研发的论文写作辅助工具,专注服务于本专科、硕士、博士等各阶段学生与科研人员,以全流程覆盖、真实学术资源、硬核实证工具、高度合规安全为核心定位&am…...

Shell 脚本:别让你的自动化变成“自爆化”

太长不看版(老鸟)脚本头:#!/bin/bash 写死,别用 #!/bin/sh(坑太多)。调试:bash -x script.sh 能看到每一行执行过程。变量引用:永远用双引号包起来 "$var",否则…...

macOS Monterey安装OpenClaw避坑指南:千问3.5-9B适配

macOS Monterey安装OpenClaw避坑指南:千问3.5-9B适配 1. 为什么选择OpenClaw千问3.5-9B组合 去年换装M1 Max芯片的MacBook Pro后,我一直在寻找能充分发挥ARM架构性能的本地AI方案。直到遇见OpenClaw这个开源的自动化智能体框架,配合千问3.5…...

WebStorm高效开发Vue3+TypeScript项目:配置与实战技巧

1. WebStorm与Vue3TypeScript开发环境搭建 WebStorm作为JetBrains旗下的前端开发利器,对Vue3和TypeScript的支持堪称完美。最新版本甚至内置了Volar语言服务,让类型推断和代码补全更加精准。先说说我的踩坑经历:第一次用WebStorm创建Vue3项目…...

DAMO-YOLO TinyNAS模型评估全攻略:mAP/PR曲线

DAMO-YOLO TinyNAS模型评估全攻略:mAP/PR曲线 1. 为什么模型评估比训练更重要 刚跑通DAMO-YOLO TinyNAS的训练流程时,很多人会直接跳到部署环节,觉得“能出结果就行”。但实际项目中,我见过太多团队在交付前才发现模型在真实场景…...

当AI学会“动手”,架构师如何为它“刹车”?

当AI Agent开始自主执行文件读写、邮件收发、系统操作,你交给它的权限,到底是“效率工具”还是“失控炸弹”? 2026年开年,OpenClaw引爆了AI Agent领域——大模型从“会聊天”迈入“能行动”的时代。Meta安全专家的一条指令&#x…...

【网络安全】从零开始:15种常见网络攻击类型及防御措施全解析,小白必备!建议收藏学习!

【网络安全】从零开始:15种常见网络攻击类型及防御措施全解析,小白必备!建议收藏学习! 随着攻击者效率和复杂性的提高,网络犯罪每年都在急剧增加。[网络攻击]的发生有多种不同的原因和多种不同的方式。但是&#xff0c…...

IMX6ULL开发板实战:NFS挂载报错No route to host的5种修复方法

IMX6ULL开发板NFS挂载故障排查指南:从"No route to host"到稳定连接 嵌入式开发过程中,NFS挂载几乎是每位开发者都会遇到的基础操作。但当开发板突然提示"No route to host"时,那种调试过程中的挫败感我深有体会——明明…...

InfixPDFEditor:解决PDF文本编辑与添加水印的实用指南

在日常办公中,你是否收到过一份PDF合同,发现里面有一个错别字却无法修改;或者需要给几十页的PDF文件批量加上公司logo水印,却只能一页页截图;又或者需要对比两个版本的PDF文档差异,肉眼逐行比对眼睛都快看花…...

从“词元”到“符元”:Token中文定名的再思考——以概念精确性与长期稳定性为视角

近日,全国科学技术名词审定委员会发布公告,推荐将人工智能领域中的“Token”译为“词元”,并面向社会试用。随后,《人民日报》发文《专家解读token中文名为何定为“词元”》,对这一命名从专业角度进行了系统阐释。文中…...

云原生应用开发最佳实践:构建现代化的云原生系统

云原生应用开发最佳实践:构建现代化的云原生系统 前言 作为一个在数据深渊里捞了十几年 Bug 的女码农,我深知云原生应用开发在现代企业中的重要性。随着云技术的快速发展,传统的应用开发方式已经难以满足需求。今天,我就来聊聊云原…...

WinISO:解决光盘镜像编辑与制作的三大实际问题

在日常工作中,你是否遇到过这样的场景:下载了一个 ISO 镜像文件,想往里面添加几个补丁或删除一个无用文件,却只能解压后再重新打包;或者你有一个旧版 Windows 安装盘,想替换其中的 install.wim 文件来制作集…...

SITS2026平台深度拆解:如何用1套配置实现92%业务场景零代码交付?(附Gartner验证的ROI测算模型)

第一章:SITS2026平台深度拆解:如何用1套配置实现92%业务场景零代码交付?(附Gartner验证的ROI测算模型) 2026奇点智能技术大会(https://ml-summit.org) SITS2026并非传统低代码平台的简单迭代,而是基于语义…...

AI驱动的知识管理平台构建全路径(从零到生产级上线的12个关键决策点)

第一章:AI原生软件研发知识管理平台的范式跃迁 2026奇点智能技术大会(https://ml-summit.org) 传统知识管理平台以文档为中心,依赖人工归档、关键词检索与静态权限控制,难以应对AI原生研发中高频迭代、多模态产出(如提示工程日志…...

ROS2 Humble下Cartographer纯定位不成功?别急,可能是你的.lua配置文件少了这行关键代码

ROS2 Humble下Cartographer纯定位失败的深度排查与解决方案 当你在RViz中看到地图显示正常,但激光雷达点云始终无法与地图正确匹配时,那种挫败感我深有体会。去年在部署仓库AGV项目时,我花了整整三天时间排查类似问题,最终发现是.…...

【仅限SITS2026参会者解封】:AI微服务弹性扩缩容决策引擎设计手册(含动态负载预测模型Python实现+K8s HPA自定义指标CRD YAML)

第一章:SITS2026分享:AI原生微服务架构设计 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026现场,来自全球头部AI基础设施团队的实践者共同提出“AI原生微服务”范式——它并非传统微服务的简单迁移,而是围绕模型生命周…...

从稀疏重构到精准定位:l1-SVD算法的核心思想与工程实现

1. 稀疏信号重构与DOA估计的困境 想象你站在一个嘈杂的会议室里,试图通过几个麦克风确定说话人的方位。这就是DOA(波达方向)估计的典型场景。传统方法如MUSIC算法在理想环境下表现优异,但当信源间距过小或快拍数不足时&#xff0c…...

如何高效掌握DeepONet:5步快速上手非线性算子深度学习实战指南

如何高效掌握DeepONet:5步快速上手非线性算子深度学习实战指南 【免费下载链接】deeponet Learning nonlinear operators via DeepONet based on the universal approximation theorem of operators 项目地址: https://gitcode.com/gh_mirrors/de/deeponet D…...