多表关联查询入门:LEFT JOIN、INNER JOIN一文搞懂|转行学DB第6天

本文涉及的产品
RDS Agent(兼容OpenClaw),2核4GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 本文通俗易懂地讲解了数据库多表查询的三种JOIN操作:INNER JOIN(内连接)只返回两表匹配的数据,适用于查询交集数据;LEFT JOIN(左连接)保留左表所有记录并匹配右表数据,适用于查询主表完整信息;RIGHT JOIN(右连接)则保留右表所有记录。

🤔 为什么查询数据要"连表"?一张图说清多表查询的底层逻辑!

大家好呀!我是数据库小学妹👋一个正在从设计转行学数据库的"萌新"。

昨天学完主键、外键和约束后,我就在想一个问题:

"我有学生表,也有成绩表,怎么一次性查出'每个学生的姓名和成绩'?"

但现实中的数据往往分散在多个表里! 这时候,就需要用到多表关联查询了!

今天这篇,我就用最直白的话,把INNER JOIN、LEFT JOIN、RIGHT JOIN讲清楚!
保证你一看就懂!


一、为什么需要多表关联查询?

先看个实际场景:

学生表(students)

id name age
1 张三 18
2 李四 19
3 王五 20

成绩表(scores)

id student_id subject score
1 1 数学 90
2 1 英语 85
3 2 数学 78

需求​:查出每个学生的姓名数学成绩

❌ ​错误做法​:分别查两个表,然后手动匹配
✅ ​正确做法​:用JOIN把两个表"连"起来!

💡 ​核心逻辑​:通过​外键关联​,把分散在不同表的数据"拼"在一起!


二、INNER JOIN:只查"都有"的数据

INNER JOIN = 内连接 = 只返回两个表都有的数据

✨ 适用场景:

  • 查"既有学生信息又有成绩记录"的数据
  • 查"既有订单又有用户"的数据

🛠️ 语法:

SELECT students.name, scores.score
FROM students
INNER JOIN scores ON students.id = scores.student_id;

📊 效果:

稿定设计-1.jpg

结果:只返回张三和李四(王五没成绩,不显示)

💡 ​我的理解​:

INNER JOIN就像​交集​——只保留两个表都有的部分!


三、LEFT JOIN:以左表为主,查"左边所有"

LEFT JOIN = 左连接 = 返回左表所有数据 + 右表匹配的数据

✨ 适用场景:

  • 查"所有学生",包括没有成绩的
  • 查"所有用户",包括没有订单的

🛠️ 语法:

SELECT students.name, scores.score
FROM students
LEFT JOIN scores ON students.id = scores.student_id;

📊 效果图:

稿定设计-2.jpg

结果:张三、李四、王五都显示(王五成绩为NULL)

💡 ​我的理解​:

LEFT JOIN就像​左表的全部 + 右表的匹配部分​!
"左"字诀:左边的都要,右边的有就拿,没有就NULL!


四、RIGHT JOIN:以右表为主,查"右边所有"

RIGHT JOIN = 右连接 = 返回右表所有数据 + 左表匹配的数据

✨ 适用场景:

  • 查"所有成绩",包括没有学生信息的(数据异常时用)
  • 查"所有订单",包括没有用户信息的

🛠️ 语法:

SELECT students.name, scores.score
FROM students
RIGHT JOIN scores ON students.id = scores.student_id;

📊 效果图:

稿定设计-3.jpg

结果:所有成绩都显示(如果成绩表有学生表没有的数据,也会显示)

💡 ​我的理解​:

RIGHT JOIN和LEFT JOIN相反,"右"字诀:右边的都要,左边的有就拿,没有就NULL!


五、一张图说清三种JOIN的区别

图片排版设计 (1).png


六、实战案例:学生管理系统查询

案例1:查所有学生的数学成绩(包括没成绩的)

SELECT students.name, scores.score
FROM students
LEFT JOIN scores 
    ON students.id = scores.student_id 
    AND scores.subject = '数学';

案例2:查有成绩记录的学生

SELECT students.name, scores.score
FROM students
INNER JOIN scores ON students.id = scores.student_id;

案例3:查所有成绩记录(包括异常数据)

SELECT students.name, scores.score
FROM students
RIGHT JOIN scores ON students.id = scores.student_id;

七、常见误区

常见错误 正确做法
忘记写 ON 条件 会产生​笛卡尔积​(A表每行 × B表每行),数据爆炸
ON 条件写错(比如 s.id = sc.id 仔细检查关联字段是不是外键关系
列名重复不指定表名 表名.列名 或别名区分
用 INNER JOIN 查不到没有匹配的数据 如果想查所有学生(即使没成绩),用 LEFT JOIN

我踩过的坑:忘记写 ON,结果学生表3行 × 成绩表3行 = 9行,完全乱了套。后来才知道那叫“笛卡尔积”,吓得我赶紧加上条件。


八、学习心得

📝 ​核心总结​:

  1. INNER JOIN = 都要有 = 交集
  2. LEFT JOIN = 左表全 = 左边的都要
  3. RIGHT JOIN = 右表全 = 右边的都要

💡 ​实用建议​:

  • 80%的场景用LEFT JOIN​(查主表所有数据)
  • INNER JOIN用于筛选​(只查匹配的数据)
  • RIGHT JOIN用得少​(可以用LEFT JOIN反过来写)

👋 我是数据库小学妹,一个每天都在和SQL语句"较劲"的数据库小白。我们一起把看似复杂的技术,变得简单有趣!💪

相关文章
|
1月前
|
SQL 关系型数据库 MySQL
主键、外键和约束:让数据库“有规矩”才能不出错!|转行学DB第5天
本文用通俗易懂的语言讲解了主键(数据的唯一标识)、外键(表间关联)以及唯一约束、非空约束等其他常见约束规则。通过具体SQL示例展示了各种约束的使用方法,并分享了新手容易踩的坑和实用建议。
|
27天前
|
SQL 关系型数据库 MySQL
5款好用的免费MySQL客户端,新手必备!
告别枯燥命令行!数据库小学妹精选5款免费MySQL图形化工具:Workbench(官方全能)、phpMyAdmin(免安装Web版)、DBeaver(多库支持)、HeidiSQL(Windows轻量之选)、TablePlus(高颜值跨平台)。小白友好,语法高亮、自动补全、可视化结构一应俱全,助你高效学SQL!
|
24天前
|
存储 JSON 缓存
告别数据混乱!数据库设计三范式从入门到实践
数据库小学妹带你轻松入门三范式!用“建房打地基”比喻,讲清1NF(列不可分)、2NF(消除部分依赖)、3NF(消除传递依赖),直击数据冗余、更新异常等痛点。附实战拆表案例与反范式化提醒,助你设计出结构清晰、稳定高效的数据库!
|
1月前
|
SQL NoSQL 关系型数据库
数据库分类一次讲清|转行学DB第2天
数据库小学妹(UI转行萌新)用通俗语言拆解数据库分类:从关系型(MySQL/Oracle)、NoSQL(Redis/MongoDB/Cassandra)、NewSQL(TiDB)到2026年爆火的向量数据库(Pinecone/Milvus),按数据模型、部署架构、业务负载三大维度梳理,配场景化案例与选学路径,助新手轻松入门。
|
1月前
|
SQL 关系型数据库 MySQL
WHERE、ORDER BY、LIMIT三大神器,让你的查询精准又高效!
本文介绍了SQL查询中的三大核心语句:WHERE(条件过滤)、ORDER BY(排序)和LIMIT(限制结果数)。通过电商订单查询、用户活跃度分析等实际案例,展示了如何组合使用这些语句实现精准查询。文章还分享了常见避坑技巧(如字符串引号使用、NULL值判断)和性能优化建议(如索引使用、分页查询优化)。
|
1月前
|
SQL 关系型数据库 MySQL
数据量大查询慢?索引让你的SQL秒级响应!|转行学DB第9天
用生活化比喻(如字典目录)详解索引原理:它通过B+树结构加速查询,避免全表扫描;涵盖创建、查看、删除索引方法,联合索引的最左前缀原则,以及读写平衡等实战要点——让查询从“等几秒”变“秒出”!
数据量大查询慢?索引让你的SQL秒级响应!|转行学DB第9天
|
26天前
|
SQL 人工智能 安全
AI圈开始“养马”了?聊聊龙虾退位、爱马仕登基
AI智能体“龙虾”(OpenClaw)的衰落与“爱马仕”(Hermes Agent)的崛起:前者因API限策与高危漏洞(CVSS 9.9)式微;后者以持久记忆、技能自生成、跨平台互通等实用能力破圈,成技术圈新“拐杖”。但技术无银弹,懂你的工具才是真助力。
|
4天前
|
canal 缓存 NoSQL
数据库扛不住高并发?Redis缓存+双写一致性:给你的系统装上“涡轮增压”
数据库小学妹带你破解Redis缓存一致性难题!面对高并发,如何确保Redis与数据库数据同步?详解“先更库后删缓”“延时双删”“Binlog异步同步”等4大方案,直击雪崩、击穿、穿透三座大山,助你构建又快又稳的数据库架构.
|
25天前
|
SQL 关系型数据库 MySQL
SQL优化十大技巧,查询速度提升10倍!
数据库小学妹带你轻松提速SQL!10个实战优化技巧:精简SELECT、善用LIMIT、巧用EXPLAIN、合理建索引、避开函数索引失效、JOIN优于子查询、IN替代OR、批量操作、EXISTS优化大子查询、定期OPTIMIZE。附避坑指南,新手也能秒上手!