news 2026/2/4 2:51:01

mysql表的链接

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
mysql表的链接

在 MySQL 中,表连接(JOIN)是用于从多个表中根据关联字段提取数据的核心操作。根据业务需求不同,主要分为内连接、外连接、交叉连接、自连接四类,以下是详细说明和示例:

准备示例表

先创建两个测试表,方便后续演示:

sql

-- 商品分类表 CREATE TABLE category ( cid INT PRIMARY KEY, cname VARCHAR(50) NOT NULL -- 分类名称 ); -- 商品表 CREATE TABLE product ( pid INT PRIMARY KEY, pname VARCHAR(50) NOT NULL, price DECIMAL(10,2), cid INT, -- 关联分类表的cid FOREIGN KEY (cid) REFERENCES category(cid) ); -- 插入测试数据 INSERT INTO category VALUES (1, '电子产品'), (2, '生活用品'), (3, '食品'); INSERT INTO product VALUES (1, '手机', 2999.00, 1), (2, '牙刷', 9.90, 2), (3, '面包', 5.80, 3), (4, '耳机', 199.00, 1), (5, '毛巾', 15.90, 2), (6, '薯片', 8.50, NULL); -- 无分类的商品

一、内连接(INNER JOIN)

核心逻辑

只返回两个表中关联字段匹配成功的记录(交集),是最常用的连接方式。

语法

sql

-- 标准写法 SELECT 字段列表 FROM 表1 INNER JOIN 表2 ON 表1.关联字段 = 表2.关联字段; -- 简化写法(等价) SELECT 字段列表 FROM 表1, 表2 WHERE 表1.关联字段 = 表2.关联字段;
示例

查询所有有分类的商品及其分类名称:

sql

SELECT p.pid, p.pname, p.price, c.cname FROM product p INNER JOIN category c ON p.cid = c.cid;
结果
pidpnamepricecname
1手机2999.00电子产品
2牙刷9.90生活用品
3面包5.80食品
4耳机199.00电子产品
5毛巾15.90生活用品

二、外连接(OUTER JOIN)

返回一个表的所有记录 + 另一个表匹配的记录,未匹配的字段显示NULL,分为左外连接、右外连接、全外连接(MySQL 不直接支持全外连接,需变通实现)。

1. 左外连接(LEFT JOIN / LEFT OUTER JOIN)

核心逻辑

返回左表的所有记录,右表匹配的记录显示,未匹配则右表字段为NULL

语法

sql

SELECT 字段列表 FROM 左表 LEFT JOIN 右表 ON 左表.关联字段 = 右表.关联字段;
示例

查询所有商品(包括无分类的)及其分类名称:

sql

SELECT p.pid, p.pname, p.price, c.cname FROM product p LEFT JOIN category c ON p.cid = c.cid;
结果
pidpnamepricecname
1手机2999.00电子产品
2牙刷9.90生活用品
3面包5.80食品
4耳机199.00电子产品
5毛巾15.90生活用品
6薯片8.50NULL

2. 右外连接(RIGHT JOIN / RIGHT OUTER JOIN)

核心逻辑

返回右表的所有记录,左表匹配的记录显示,未匹配则左表字段为NULL

语法

sql

SELECT 字段列表 FROM 左表 RIGHT JOIN 右表 ON 左表.关联字段 = 右表.关联字段;
示例

查询所有分类(包括无商品的分类)及其商品:

sql

-- 先插入一个无商品的分类 INSERT INTO category VALUES (4, '玩具'); -- 右连接查询 SELECT p.pid, p.pname, c.cname FROM product p RIGHT JOIN category c ON p.cid = c.cid;
结果
pidpnamecname
1手机电子产品
4耳机电子产品
2牙刷生活用品
5毛巾生活用品
3面包食品
NULLNULL玩具

3. 全外连接(FULL JOIN)

MySQL 不直接支持FULL JOIN,需通过LEFT JOIN + UNION + RIGHT JOIN实现,返回两个表的所有记录,未匹配的字段为NULL

示例

sql

SELECT p.pid, p.pname, c.cname FROM product p LEFT JOIN category c ON p.cid = c.cid UNION SELECT p.pid, p.pname, c.cname FROM product p RIGHT JOIN category c ON p.cid = c.cid;

三、交叉连接(CROSS JOIN)

核心逻辑

返回两个表的笛卡尔积(所有组合),无关联条件时慎用(数据量 = 表 1 行数 × 表 2 行数)。

语法

sql

-- 写法1 SELECT 字段列表 FROM 表1 CROSS JOIN 表2; -- 写法2(等价) SELECT 字段列表 FROM 表1, 表2;
示例

sql

-- 查询分类和商品的所有组合(仅演示,实际少用) SELECT c.cname, p.pname FROM category c CROSS JOIN product p LIMIT 5; -- 限制结果数

四、自连接(SELF JOIN)

核心逻辑

将表自身作为另一个表连接,需给表起别名,用于查询表内层级关系(如部门上下级、分类父子级)。

示例

先修改分类表,增加父分类字段:

sql

-- 新增父分类字段 ALTER TABLE category ADD COLUMN parent_cid INT; -- 更新数据:电子产品/生活用品是一级分类,手机/耳机属于电子产品子分类 UPDATE category SET parent_cid = NULL WHERE cid IN (1,2,3,4); INSERT INTO category VALUES (5, '手机配件', NULL, 1), (6, '快充头', NULL, 5); -- 自连接查询子分类和父分类名称 SELECT c1.cname AS 子分类, c2.cname AS 父分类 FROM category c1 LEFT JOIN category c2 ON c1.parent_cid = c2.cid;

五、连接的注意事项

  1. 关联字段类型一致:关联的字段需为相同 / 兼容类型(如 INT 和 INT,VARCHAR 和 VARCHAR)。
  2. 使用别名简化语句:多表连接时给表起别名(如product p),避免字段名冲突。
  3. 索引优化:关联字段(如product.cid)建议建立索引,提升连接查询效率。
  4. 避免笛卡尔积:内连接 / 外连接必须加ON条件,否则等价于交叉连接。
  5. NULL 值处理:外连接中未匹配的字段为NULL,可通过IFNULL()替换:

    sql

    SELECT p.pname, IFNULL(c.cname, '未分类') AS cname FROM product p LEFT JOIN category c ON p.cid = c.cid;

以上是 MySQL 表连接的核心用法,实际开发中需根据业务场景选择合适的连接方式,优先使用内连接和左 / 右外连接,避免不必要的笛卡尔积和全外连接。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/3 1:42:10

我终于找到替代手写 CRUD 的方法:XinServer

我终于找到替代手写 CRUD 的方法:XinServer 不知道你们有没有这种感觉,每次启动一个新项目,最烦人的不是想创意、画原型,而是打开 IDE,准备开始写那一套“增删改查”的后台代码。建数据库、设计表结构、写实体类、配 M…

作者头像 李华
网站建设 2026/1/24 9:58:23

LangFlow企业级应用场景探索:金融、医疗与教育领域实例

LangFlow企业级应用场景探索:金融、医疗与教育领域实例 在AI技术加速渗透专业领域的今天,一个现实问题摆在许多企业的面前:如何让大语言模型(LLM)真正落地到高合规、强专业性的业务流程中?不是写几个prompt…

作者头像 李华
网站建设 2026/2/1 13:25:52

在 SAP 中,销售发货后成本分录自动关联成本中心的配置,主要通过 “成本要素默认分配(OKB9)”+“自动记账(OBYC)”+“销售订单 / 移动类型的科目分配” 实现

在 SAP 中,销售发货后成本分录自动关联成本中心的配置,主要通过 “成本要素默认分配(OKB9)”“自动记账(OBYC)”“销售订单 / 移动类型的科目分配” 实现,具体逻辑和配置路径如下:一…

作者头像 李华
网站建设 2026/1/25 3:48:41

在 SAP SD 模块中,销售合同发货后生成的 Dr 主营业务成本 Cr 库存商品 会计分录,是由物料主数据配置、移动类型配置、科目确定配置三层逻辑共同决定的

在 SAP SD 模块中,销售合同发货后生成的 Dr 主营业务成本 Cr 库存商品 会计分录,是由物料主数据配置、移动类型配置、科目确定配置三层逻辑共同决定的,核心是通过移动类型触发科目确定,最终联动 FI 生成凭证。以下是详细的配置逻辑…

作者头像 李华
网站建设 2026/1/30 16:14:15

LangFlow镜像部署教程:快速启动本地可视化LLM开发环境

LangFlow镜像部署教程:快速启动本地可视化LLM开发环境 在大模型时代,越来越多的开发者和业务人员希望快速验证一个AI应用的想法——比如构建一个能自动回答企业文档问题的智能客服,或者设计一个可以根据用户输入生成营销文案的助手。但现实是…

作者头像 李华
网站建设 2026/2/1 3:16:57

37、Visual Studio .NET:全面开发解决方案解析

Visual Studio .NET:全面开发解决方案解析 1. Visual Studio .NET 概述 Visual Studio .NET 是微软推出的新一代开发产品。它的设计目标包括构建下一代互联网、快速高效地创建强大应用程序以及跨越任何平台或设备。它是唯一为 XML Web 服务从头构建的开发环境,允许应用程序…

作者头像 李华