【MySQL✨】MySQL 入门之旅 · 第十一篇:MySQL 表连接(JOIN)基础

本篇文章将介绍 MySQL 中的 表连接(JOIN),帮助你掌握如何将多个表的数据通过不同的条件联合查询,以便获取更复杂的查询结果。


目录

  1. [JOIN 基础概念](#JOIN 基础概念)
  2. [内连接(INNER JOIN)](#内连接(INNER JOIN))
  3. [左连接(LEFT JOIN)](#左连接(LEFT JOIN))
  4. [右连接(RIGHT JOIN)](#右连接(RIGHT JOIN))
  5. [全连接(FULL JOIN)](#全连接(FULL JOIN))
  6. [自连接(SELF JOIN)](#自连接(SELF JOIN))
  7. [JOIN 常见示例对照表](#JOIN 常见示例对照表)
  8. 小结

JOIN 基础概念

在 MySQL 中,JOIN 用于将两个或更多表的数据通过特定条件联合起来,以便查询和分析多个表中的相关数据。常见的 JOIN 类型有:

  • INNER JOIN:返回两个表中匹配的数据
  • LEFT JOIN:返回左表所有数据以及匹配的右表数据
  • RIGHT JOIN:返回右表所有数据以及匹配的左表数据
  • FULL JOIN:返回两个表中所有数据
  • SELF JOIN:将表与其自身连接

内连接(INNER JOIN)

INNER JOIN 是最常用的 JOIN 类型,它返回两个表中满足匹配条件的记录。如果表中某行没有匹配项,它就不会出现在结果集中。

语法

sql 复制代码
SELECT columns
FROM table1
INNER JOIN table2
ON table1.column = table2.column;

示例

customers表:

orders表:

sql 复制代码
SELECT orders.id, customers.name
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.id;

查询 orders 表和 customers 表中匹配的记录,只返回那些有匹配 customer_id 的订单。


左连接(LEFT JOIN)

LEFT JOIN 返回左表中的所有记录,以及右表中匹配的记录。如果右表没有匹配项,结果中会显示 NULL。

语法

sql 复制代码
SELECT columns
FROM table1
LEFT JOIN table2
ON table1.column = table2.column;

示例

sql 复制代码
SELECT orders.id, customers.name
FROM orders
LEFT JOIN customers
ON orders.customer_id = customers.id;

查询所有订单,并显示相应的客户姓名。如果某些订单没有客户,则显示 NULL。


右连接(RIGHT JOIN)

RIGHT JOIN 返回右表中的所有记录,以及左表中匹配的记录。如果左表没有匹配项,结果中会显示 NULL。

语法

sql 复制代码
SELECT columns
FROM table1
RIGHT JOIN table2
ON table1.column = table2.column;

示例

sql 复制代码
SELECT orders.id, customers.name
FROM orders
RIGHT JOIN customers
ON orders.customer_id = customers.id;

查询所有客户,以及他们的订单。如果某些客户没有订单,则订单部分显示 NULL。


全连接(FULL JOIN)

FULL JOIN 返回两个表中所有的记录。如果某个表没有匹配项,结果中会显示 NULL。但是,MySQL 本身不支持 FULL JOIN,你可以通过 UNION 来模拟 FULL JOIN。

示例

sql 复制代码
SELECT orders.id, customers.name
FROM orders
LEFT JOIN customers
ON orders.customer_id = customers.id
UNION
SELECT orders.id, customers.name
FROM orders
RIGHT JOIN customers
ON orders.customer_id = customers.id;

通过 UNION 将 LEFT JOIN 和 RIGHT JOIN 的结果合并,模拟 FULL JOIN。


自连接(SELF JOIN)

SELF JOIN 是将表与其自身连接。通常用于处理与自身有关系的数据。


语法

sql 复制代码
SELECT columns
FROM table1 AS t1, table1 AS t2
WHERE t1.column = t2.column;

示例

sql 复制代码
SELECT e1.name AS Employee, e2.name AS Manager
FROM employees e1
INNER JOIN employees e2
ON e1.manager_id = e2.id;

查询每个员工的姓名和经理的姓名,employees 表在这里自连接,e1 和 e2 是两个别名。


JOIN 常见示例对照表

操作 SQL 示例 说明
内连接 SELECT orders.id, customers.name FROM orders INNER JOIN customers ON orders.customer_id = customers.id; 返回匹配的订单和客户数据
左连接 SELECT orders.id, customers.name FROM orders LEFT JOIN customers ON orders.customer_id = customers.id; 返回所有订单和匹配客户,缺少匹配时返回 NULL
右连接 SELECT orders.id, customers.name FROM orders RIGHT JOIN customers ON orders.customer_id = customers.id; 返回所有客户和匹配订单,缺少匹配时返回 NULL
全连接 SELECT orders.id, customers.name FROM orders LEFT JOIN customers ON orders.customer_id = customers.id UNION SELECT orders.id, customers.name FROM orders RIGHT JOIN customers ON orders.customer_id = customers.id; 模拟返回所有客户和所有订单
自连接 SELECT e1.name AS Employee, e2.name AS Manager FROM employees e1 INNER JOIN employees e2 ON e1.manager_id = e2.id; 查询员工及其经理

小结

本篇文章介绍了 MySQL 中的 表连接(JOIN) ,包括 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN 和 SELF JOIN 等常见连接方式。掌握这些基本操作,你将能够更高效地处理多表查询的需求。


📘 下一篇,我们将学习 MySQL 数据库设计与规范,帮助你设计高效且易于维护的数据库架构。

相关推荐
paopaokaka_luck1 小时前
心理咨询管理系统(WebSocket实时沟通、基于用户的协同过滤、 ECharts多维分析、 预约业务流程、预约校验与定时处理)
java·vue.js·spring boot·mysql·spring·echarts·1024程序员节
码士集团小青1 小时前
面霸篇:高频 Java 基础问题(核心卷一)
linux·服务器·数据库·redis·缓存·1024程序员节
2301_32241428041 小时前
springboot农产品交易平台的设计与实现08055-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·spring boot·redis·mysql·tomcat·maven·mybatis
LMT流氓兔2 小时前
第五单元——第十二课:把脚本整理成项目
java·数据库·python·langchain·1024程序员节
cuijiecheng20182 小时前
WeFlow 无法使用怎么办?一次数据库组件到期问题的排查与修复
数据库·oracle
一条泥憨鱼3 小时前
【Redis | 黑马点评】附近商铺功能源码解读
数据库·redis·缓存
ha_lydms3 小时前
AnalyticDB MySQL 技术架构
大数据·hadoop·mysql·adb·spark·dataworks·1024程序员节
念何架构之路4 小时前
Go reflect 包:结构体反射 —Field、Tag 与 VisibleFields
java·数据库·golang
EnCi Zheng4 小时前
PostgreSQL 实战指南:安装配置、数据类型、索引选型、MVCC 事务与高可用备份全解析
数据库·sql·postgresql·索引·1024程序员节
泡海椒5 小时前
JQuick-SQL REST API 数据接入:应用层调用接口后注册分析表
数据库·sql·1024程序员节