MySQL连接类型总结:内连接、外连接和自连接详解
创作时间:
作者:
@小白创作中心
MySQL连接类型总结:内连接、外连接和自连接详解
引用
CSDN
1.
https://blog.csdn.net/kaoyanjiayou0429/article/details/140615154
在 MySQL 中,连接(JOIN)操作用于从两个或多个表中检索相关数据。主要的连接类型包括内连接(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;
总结
- 内连接: 提取匹配的记录。
- 外连接: 提取匹配的记录和一个表中的所有记录。
- 自连接: 用于比较同一表中的不同记录。
热门推荐
“如何正确安装SIM卡及注意事项”
莫干山风景区怎么玩最好?莫干山游玩攻略指南
BB飲食營養|栗子營養豐富 控制血糖+助發育+增强免疫力 唯過量會消化不良
S31王者荣耀苏烈怎么出装,苏烈双主动技灵活星冰流上分
如何让销售目标与销售过程管理有效咬合
人类有没有可能被高维度的生物操控?这种可能性真的存在!
羊奶的营养成分、营养特点与保健价值
多重共线性检测:相关性系数矩阵和方差膨胀系数(VIF)分析详解
计算级数时能否改变加法顺序?绝对收敛与条件收敛的区别
大运河考古10年有哪些重要成果——遗址遗迹,揭示江苏千年历史变迁
头皮护理怎么做?掌握5个头皮保养指南,打造健康的头皮环境
大涨172%,阿根廷股市卫冕冠军!来看2024年全球股市最全盘点
第18届全国热管会议举办,积鼎科技分享「环路热管相变传热仿真」前沿实践
七巧板小学数学讲解攻略:易学步骤与教学技巧揭秘
猪血煮多久才正好呢
如何确定山地车链条的合适长度?
卡尺读数方法注意事项有哪些?精准测量的关键技巧
A股大幅下调,机构看好市场韧性
如何测raid
二战风云背景之二:美国经济大萧条与胡佛总统的应对
创建raid0如何设置提高速度
哪些瘤患者适合采用中医药辅助治疗?
如何轻松查看你的 Windows 版本? 检查电脑Windows版本号五种方法
如何预测狗狗成年后会长多大?实用指南来了
职场新人如何在工作中不断学习和提升自己的专业技能?
送您一份春季养生粥谱,滋养身心,唤醒春天的活力!
Science | 张晓明研究组合作揭示肿瘤浸润B细胞应答模式及免疫治疗新方向
中国百年企业的文化基础与创新研究
选择及验证服务器RAID级别指南:保障数据安全与性能优化策略
如何理解国际黄金交易的规则?这种规则对投资者有哪些要求?