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

MySQL 的各种关联查询(JOIN)

1. 准备示例数据

我们先创建两张表:employees(员工表) 和 departments(部门表)

CREATE TABLE departments (dept_id INT PRIMARY KEY,dept_name VARCHAR(50)
);CREATE TABLE employees (emp_id INT PRIMARY KEY,emp_name VARCHAR(50),dept_id INT
);INSERT INTO departments VALUES
(1, '研发部'),
(2, '市场部'),
(3, '人事部');INSERT INTO employees VALUES
(101, '张三', 1),
(102, '李四', 1),
(103, '王五', 2),
(104, '赵六', NULL);

2. 各种关联查询类型

2.1 INNER JOIN(内连接)

作用:只返回两个表中匹配的记录

SELECT e.emp_id, e.emp_name, d.dept_name
FROM employees e
INNER JOIN departments d
ON e.dept_id = d.dept_id;

结果

emp_idemp_namedept_name
101张三研发部
102李四研发部
103王五市场部

2.2 LEFT JOIN(左连接)

作用:返回左表的所有记录,即使右表没有匹配,也会显示(右表字段为 NULL)。

SELECT e.emp_id, e.emp_name, d.dept_name
FROM employees e
LEFT JOIN departments d
ON e.dept_id = d.dept_id;

结果

emp_idemp_namedept_name
101张三研发部
102李四研发部
103王五市场部
104赵六NULL

2.3 RIGHT JOIN(右连接)

作用:返回右表的所有记录,即使左表没有匹配,也会显示(左表字段为 NULL)。

SELECT e.emp_id, e.emp_name, d.dept_name
FROM employees e
RIGHT JOIN departments d
ON e.dept_id = d.dept_id;

结果

emp_idemp_namedept_name
101张三研发部
102李四研发部
103王五市场部
NULLNULL人事部

2.4 FULL JOIN(全连接)

作用:返回左右表的所有记录(MySQL 不直接支持 FULL JOIN,需要用 UNION 模拟)。

SELECT e.emp_id, e.emp_name, d.dept_name
FROM employees e
LEFT JOIN departments d
ON e.dept_id = d.dept_id
UNION
SELECT e.emp_id, e.emp_name, d.dept_name
FROM employees e
RIGHT JOIN departments d
ON e.dept_id = d.dept_id;

结果

emp_idemp_namedept_name
101张三研发部
102李四研发部
103王五市场部
104赵六NULL
NULLNULL人事部

2.5 CROSS JOIN(交叉连接 / 笛卡尔积)

作用:返回左右表的所有组合(没有 ON 条件)。

SELECT e.emp_name, d.dept_name
FROM employees e
CROSS JOIN departments d;

结果:每个员工和每个部门都会组合一次(4×3=12 行)。


2.6 SELF JOIN(自连接)

作用:同一张表自己关联自己,常用于层级结构查询。
假设我们有一个 manager_id 字段表示上级:

ALTER TABLE employees ADD manager_id INT;UPDATE employees SET manager_id = NULL WHERE emp_id = 101;
UPDATE employees SET manager_id = 101 WHERE emp_id IN (102, 103, 104);SELECT e.emp_name AS 员工, m.emp_name AS 上级
FROM employees e
LEFT JOIN employees m
ON e.manager_id = m.emp_id;

结果

员工上级
张三NULL
李四张三
王五张三
赵六张三

3. 总结对比表

类型作用是否显示不匹配记录
INNER JOIN只显示匹配记录
LEFT JOIN显示左表全部记录是(右表为 NULL)
RIGHT JOIN显示右表全部记录是(左表为 NULL)
FULL JOIN显示左右表全部记录
CROSS JOIN笛卡尔积全部组合
SELF JOIN自己关联自己取决于条件
http://www.dtcms.com/a/529274.html

相关文章:

  • h5游戏免费下载:水果忍者
  • 有什么网站可以做微信支付宝支付宝视频模板免费制作
  • 基于单片机的智能厨房环境控制系统设计
  • 某公司网站建设策划书html中文美食网站模板
  • 多源bfs
  • ESP32使用笔记(基于IDF):小智AI项目ESP32二次开发指南
  • RT-Thread Nano版本在GD32F527I-EVAL评估板的移植
  • 网站的优势是什么意思杭州网站建设哪家快速上线
  • AI大模型:(二)6.2 YOLO模型训练实践及目标跟踪
  • 手机端网站关键词排名内衣网站建设推广
  • Python第三方库pip和conda指令无法下载某些库解决办法
  • 网站套餐表格模板怎么做蛋糕店的网站
  • 哪里建设网站最好用做图的兼职网站
  • 为歌手做的个人网站seo编辑培训
  • 学习从0开始使用内网穿透工具cpolar(个人记录、详细图解)
  • wordpress模板免费win7优化大师官网
  • Linux 文本处理“三剑客”:sed命令完全指南
  • Graph + Agents 融合架构:2025年七大创新路径
  • 临沂网站制作费用如何做自己公司网站
  • STM32H723ZGT6 ADC+DMA多通道-老是进入DMA中断错误函数且不进入adc回调函数总结
  • 成毅李一桐《天地剑心》今日开播 热血群像演绎东方英雄故事
  • Atlas 200I A2 加速模块-GPU适配
  • 石家庄职业技术学院教务网络管理系统三明网站优化
  • 【经典书籍】C++ Primer 第18章如何设计一个“好用、好看、好改”的函数精华讲解
  • Qt Creator:避免QRunnable和QObject多重继承
  • 抽奖机网站怎么做wordpress小工具是哪个文件夹
  • 简述网站推广的方法做一个app需要多少成本
  • JsonRpc框架介绍和环境搭建
  • 网站右下角悬浮窗口js代码 兼容各浏览器如何看还在建设的网站
  • qq浏览器收录网站提交入口wordpress 博客 视频