热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析MySQL中的七种JOIN查询

本文详细介绍了MySQL中常用的七种JOIN查询方法,包括内连接、左外连接、右外连接、全外连接以及排除连接等,并通过实例进行说明。

篇首语:本文将深入探讨MySQL中常用的七种JOIN查询方法,帮助读者更好地理解和应用这些查询技术。






目录


一、内连接(INNER JOIN)


二、左外连接(LEFT OUTER JOIN)


三、右外连接(RIGHT OUTER JOIN)


四、全外连接(FULL OUTER JOIN)


五、左排除连接(LEFT EXCLUDING JOIN)


六、右排除连接(RIGHT EXCLUDING JOIN)


七、双侧排除连接(OUTER EXCLUDING JOIN)




构建环境:



create table t_employees(
id int primary key,
name varchar(20),
dept_id int
);

create table t_departments(
id int primary key,
name varchar(20)
);

insert into t_departments(id, name) values(1, '设计部');
insert into t_departments(id, name) values(2, '开发部');
insert into t_departments(id, name) values(3, '测试部');

insert into t_employees(id, name, dept_id) values(1, '张三', 1);
insert into t_employees(id, name, dept_id) values(2, '李四', 2);
insert into t_employees(id, name, dept_id) values(3, '王五', 0);

为了方便说明,我们将t_employees表称为A表,t_departments表称为B表。


一、内连接(INNER JOIN)

SELECT * FROM t_employees e INNER JOIN t_departments d ON  e.dept_id = d.id;


二、左外连接(LEFT OUTER JOIN)

SELECT * FROM t_employees e LEFT JOIN t_departments d ON e.dept_id = d.id;


三、右外连接(RIGHT OUTER JOIN)

SELECT * FROM t_employees e RIGHT JOIN t_departments d ON e.dept_id = d.id;


四、全外连接(FULL OUTER JOIN)

SELECT * FROM t_employees e LEFT JOIN t_departments d ON e.dept_id = d.id UNION SELECT * FROM t_employees e RIGHT JOIN t_departments d ON e.dept_id = d.id;


五、左排除连接(LEFT EXCLUDING JOIN)

SELECT * FROM t_employees e LEFT JOIN t_departments d ON e.dept_id = d.id WHERE d.id is null;


六、右排除连接(RIGHT EXCLUDING JOIN)

SELECT * FROM t_employees e RIGHT JOIN t_departments d ON e.dept_id = d.id WHERE e.id is null;


七、双侧排除连接(OUTER EXCLUDING JOIN)

SELECT * FROM t_employees e LEFT JOIN t_departments d ON e.dept_id = d.id WHERE d.id is null
UNION
SELECT * FROM t_employees e RIGHT JOIN t_departments d ON e.dept_id = d.id WHERE e.id is null;





推荐阅读
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文介绍如何使用 Python 将一个字符串按照指定的行和元素分隔符进行两次拆分,最终将字符串转换为矩阵形式。通过两种不同的方法实现这一功能:一种是使用循环与 split() 方法,另一种是利用列表推导式。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • 本文详细介绍了C语言中链表的两种动态创建方法——头插法和尾插法,包括具体的实现代码和运行示例。通过这些内容,读者可以更好地理解和掌握链表的基本操作。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
author-avatar
易_拉罐
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有