MySQL连接类型详解:内连接、外连接与自连接
创作时间:
作者:
@小白创作中心
MySQL连接类型详解:内连接、外连接与自连接
引用
CSDN
1.
https://blog.csdn.net/kaoyanjiayou0429/article/details/140615154
在数据库查询中,连接(JOIN)操作是数据检索的核心技术之一。MySQL支持多种连接类型,包括内连接、外连接和自连接。本文将详细介绍这三种连接类型的基本概念、使用场景,并通过一个实际案例帮助读者理解它们的具体应用。
内连接(INNER JOIN)
- 定义: 只返回两个表中匹配的记录。
- 用法: 当需要从两个表中提取匹配的数据时使用。
- SQL 示例:
SELECT columns FROM table1 INNER JOIN table2 ON table1.common_field = table2.common_field;
外连接(OUTER JOIN)
- 定义: 返回两个表中匹配的记录以及一个表中的所有记录(即使在另一个表中没有匹配项)。外连接分为左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN)。
- 左外连接(LEFT JOIN): 返回左表的所有记录,以及右表中匹配的记录。
- 右外连接(RIGHT JOIN): 返回右表的所有记录,以及左表中匹配的记录。
- SQL 示例:
-- 左外连接
SELECT columns
FROM table1
LEFT JOIN table2 ON table1.common_field = table2.common_field;
-- 右外连接
SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.common_field = table2.common_field;
自连接(SELF JOIN)
- 定义: 一个表与其自身连接,通常用于查找表中与其他记录相关的数据。
- 用法: 当表中记录之间存在关系,需要比较同一表中的不同记录时使用。
- SQL 示例:
SELECT a.columns, b.columns
FROM table a
JOIN table b ON a.common_field = b.related_field;
案例示例
假设我们有两个表:employees和departments。employees表记录了员工的信息,而departments表记录了部门的信息。每个员工有一个部门ID,指向departments表。
表结构
-- 创建 departments 表
CREATE TABLE departments (
department_id INT PRIMARY KEY AUTO_INCREMENT,
department_name VARCHAR(50) NOT NULL
);
-- 创建 employees 表
CREATE TABLE employees (
employee_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(department_id)
);
插入数据
-- 插入部门数据
INSERT INTO departments (department_name) VALUES ('Sales'), ('Marketing'), ('HR'), ('IT'), ('Finance');
-- 插入员工数据
INSERT INTO employees (name, department_id) VALUES ('Alice', 1), ('Bob', 2), ('Charlie', 3), ('David', 1), ('Eva', 4),
('Frank', 2), ('Grace', 5), ('Hannah', 4), ('Ivy', NULL), ('Jack', 3);
- 内连接(INNER JOIN)
查询每个员工及其所在的部门名称。
SELECT e.name AS employee_name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.department_id;
- 左外连接(LEFT JOIN)
查询每个员工及其所在的部门名称,包括那些没有部门的员工。
SELECT e.name AS employee_name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;
- 自连接(SELF JOIN)
查询每个员工及其部门中其他员工的名字(例如,寻找与同部门员工相关的记录)。
SELECT e1.name AS employee_name, e2.name AS colleague_name
FROM employees e1
JOIN employees e2 ON e1.department_id = e2.department_id
WHERE e1.employee_id != e2.employee_id;
总结
- 内连接: 提取匹配的记录。
- 外连接: 提取匹配的记录和一个表中的所有记录。
- 自连接: 用于比较同一表中的不同记录。
热门推荐
你的名字,真的会影响你的人生吗?
全球命名文化的多样性:从西方到东方的独特魅力
甲钴胺一般吃多久见效?了解这3点让你事半功倍
然乌隧道贯通!自驾游西藏迎来新选择
痛风患者的饮食金字塔:八个关键要点
冬日暖心:鲜虾豌豆砂锅粥的做法分享
豌豆焖大虾:一道色香味俱全的春季美味
铁路运输装备:产业链、市场规模与发展趋势
2025年最新解析:火车老人票收费标准及优惠政策全知道!
西门子油烟机手动清洗指南(简单易行的清洗步骤与技巧)
什么是电动车安全系统
错峰出游更划算,节后机票价格“跳水”至最低200元
初中生不是学生?家长:为啥不让买高铁学生票!网友:想占便宜没个够
学生票购买指南:优惠条件、变更区间、使用次数全攻略
窦性心律不齐怎么恢复正常
“矜”字的读音、本义与演变:从矛柄到怜悯自大的多义词
儿科专家详解:孟鲁司特钠的正确使用方法
FDA再发警告:孟鲁司特钠对孩子心理影响大吗?
哮喘患者服用孟鲁司特钠期间的饮食注意事项
布地奈德与孟鲁司特钠:儿童哮喘治疗的新选择?
李子柒又营业了,传统文化与现代生活的美妙融合
优化卡车售后维护:战略方法
警校2025年重大变化!分数要暴涨?考警校更难了吗?
徐悲鸿《会狮京东图》:一头雄狮的抗战怒吼
2025年购车攻略:政策红利与车企混战下的理性选择
你的梦境有何玄机?解析梦境背后的含义和影响
地铁建设新突破:北京轨道交通迎来大升级
专家科普:来自生命远古的感知——嗅觉
一根主线,看懂哪吒形象演变背后的中国抗争精神!
上海“地铁19号线”启动,引发拆迁热潮?