热门标签 | 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;





推荐阅读
  • 主调|大侠_重温C++ ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
  • Java多线程实现:从1到100分段求和并汇总结果
    本文介绍如何使用Java编写一个程序,通过10个线程分别计算不同区间的和,并最终汇总所有线程的结果。每个线程负责计算一段连续的整数之和,最后将所有线程的结果相加。 ... [详细]
  • 深入解析ESFramework中的AgileTcp组件
    本文详细介绍了ESFramework框架中AgileTcp组件的设计与实现。AgileTcp是ESFramework提供的ITcp接口的高效实现,旨在优化TCP通信的性能和结构清晰度。 ... [详细]
  • 本文将详细介绍如何在没有显示器的情况下,使用Raspberry Pi Imager为树莓派4B安装操作系统,并进行基本配置,包括设置SSH、WiFi连接以及更新软件源。 ... [详细]
  • 本文介绍如何通过SQL查询来统计不同职位类型的员工当前薪资的平均值,并将结果按照平均薪资升序排列。 ... [详细]
  • Python + Pytest 接口自动化测试中 Token 关联登录的实现方法
    本文将深入探讨 Python 和 Pytest 在接口自动化测试中如何实现 Token 关联登录,内容详尽、逻辑清晰,旨在帮助读者掌握这一关键技能。 ... [详细]
  • 本文介绍了 Python 的 Pmagick 库中用于图像处理的木炭滤镜方法,探讨其功能和用法,并通过实例演示如何应用该方法。 ... [详细]
  • 本章详细介绍SP框架中的数据操作方法,包括数据查找、记录查询、新增、删除、更新、计数及字段增减等核心功能。通过具体示例和详细解析,帮助开发者更好地理解和使用这些方法。 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • Android 6.0 切换指定 Wi-Fi 的解决方案
    本文详细介绍了在 Android 6.0 系统中切换到指定 Wi-Fi 的方法,包括常见的问题、原因分析及解决方案。通过官方文档和代码示例,帮助开发者更好地理解和实现这一功能。 ... [详细]
  • 深入解析RDMA中的队列对(Queue Pair)
    本文将详细探讨RDMA架构中的关键组件——队列对(Queue Pair,简称QP),包括其基本概念、硬件与软件实现、QPC的作用、QPN的分配机制以及用户接口和状态机。通过这些内容,读者可以更全面地理解QP在RDMA通信中的重要性和工作原理。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • Linux环境下进程间通信:深入解析信号机制
    本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
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社区 版权所有