MySQL连接类型总结:内连接、外连接和自连接详解
创作时间:
作者:
@小白创作中心
MySQL连接类型总结:内连接、外连接和自连接详解
引用
CSDN
1.
https://blog.csdn.net/kaoyanjiayou0429/article/details/140615154
在数据库操作中,连接(JOIN)是提取和整合数据的关键操作之一。本文将详细介绍MySQL中的三种主要连接类型:内连接(INNER JOIN)、外连接(OUTER JOIN)和自连接(SELF JOIN),并通过实际案例帮助读者理解这些概念。
内连接(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;
总结
- 内连接: 提取匹配的记录。
- 外连接: 提取匹配的记录和一个表中的所有记录。
- 自连接: 用于比较同一表中的不同记录。
热门推荐
口腔溃疡的饮食调整:吃出健康,远离疼痛
口腔溃疡反复发作,有哪些有效的自我护理和治疗方法?
颜值与智慧并存 秦岭脚下的凤堰梯田你了解多少?
每天梳头百下:头皮养护的最佳方法,促进身心健康
皂荚的功效与作用
清华、上交、武大相继宣布本科扩招 中国高等教育改革迈入战略深水区
防孤岛保护装置在光伏并网柜中的重要性
光伏并网柜中的防孤岛保护装置安装指南
如何正确口服药物?这些服药误区要当心
2024年“全国药品安全宣传周” 公众十大用药提示
常见防火墙攻击和增强防火墙安全性措施
一文搞懂羽毛球场标准尺寸:从基础到进阶
中国掀起无人机表演热
交流之桥 文化之廊——廊桥在城乡建设中的当代运用
古代石拱桥的杰作——单桥
培养小小阅读者:家长如何激发孩子的阅读兴趣
国际金融理财师难考吗 国际金融理财师CFP报考条件
看国内婴幼儿饮食业重金属监管变革
如何建立医学数据库模型
世界5个长寿之乡饮食特点 世界长寿之乡的饮食秘密
银行理财产品的类型及特点全解析
面部肌肉痉挛时应该如何处理
面部肌肉痉挛是怎么回事?原因及缓解方法全解析
火葬普及与人口减少:灵魂无处安身的迷思与现实
拥有百年历史艺术名校——金斯顿大学,从排名到实力全面解析!2025最新!
有效退烧方法:缓解感冒和发烧症状的实用建议与注意事项
从《诗经》中汲取灵感:赋予女孩优雅动听的名字,诵读间尽显古典韵味
妄想症的10种常见表现
低值股投资策略:如何在市场中找到潜力股
Neuron最新综述:神经系统自身免疫性疾病——生物标志物、免疫机制和治疗靶点