【详解】MySQL JOINS大总结

2024-02-20 11:08

本文主要是介绍【详解】MySQL JOINS大总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

以下图结合例子,自己敲一遍。

SQL语句的JOIN连接在开发中非常常用。

先看下面这张图,包括了内连接inner join,左连接left join,右连接 right join等。

  以下两个表为例子,一个是tbl_emp,一个是tbl_dept。

CREATE TABLE `tbl_emp`(`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(20) DEFAULT NULL,`deptId` int(11) DEFAULT NULL,PRIMARY KEY(`id`),KEY `fk_dept_id`(`deptId`)
)ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET=UTF8;CREATE TABLE `tbl_dept`(`id` int(11) NOT NULL AUTO_INCREMENT,`deptName` varchar(30) DEFAULT NULL,`locAdd` VARCHAR(40) DEFAULT NULL,PRIMARY KEY(`id`) 
)ENGINE = INNODB AUTO_INCREMENT= 1 DEFAULT CHARSET=utf8;insert into tbl_dept(deptName,locAdd) values('RD',11);
insert into tbl_dept(deptName,locAdd) values('HR',12);
insert into tbl_dept(deptName,locAdd) values('MK',13);
insert into tbl_dept(deptName,locAdd) values('MIS',14);
insert into tbl_dept(deptName,locAdd) values('FD',15);insert into tbl_emp(NAME,deptId) values('z3',1);
insert into tbl_emp(NAME,deptId) values('z4',1);
insert into tbl_emp(NAME,deptId) values('z5',1);
insert into tbl_emp(NAME,deptId) values('w5',2);
insert into tbl_emp(NAME,deptId) values('w6',2);
insert into tbl_emp(NAME,deptId) values('s7',3);
insert into tbl_emp(NAME,deptId) values('s8',4);
insert into tbl_emp(NAME,deptId) values('s9',51);

①内连接 inner join:查询出两表之间公共的数据部分

SELECT * from tbl_emp e
INNER JOIN 
tbl_dept d
ON e.deptId = d.id;

 ②左连接left join:以左表为中心,查出左表所有的数据,右表中查询出符合条件的数据

SELECT * from tbl_emp e
left JOIN 
tbl_dept d
ON e.deptId = d.id;

③右连接right join:以右表为中心,查询出右表所有的数据,左表中查询出符合条件的数据

SELECT * from tbl_emp e
RIGHT JOIN 
tbl_dept d
ON e.deptId = d.id;

 

 左连接left join :

SELECT * from tbl_emp e
left JOIN 
tbl_dept d
ON e.deptId = d.id
WHERE d.id is NULL;

 ⑤右连接right join:查询出右表的独有部分。

SELECT * FROM tbl_emp e
RIGHT JOIN
tbl_dept d
ON e.deptId = d.id
WHERE e.id is NULL;

⑥全查询 union:查询出左表、右表的全部部分包括公共部分的去重。

 

# 两表的左查询
(SELECT * FROM tbl_emp e 
LEFT JOIN tbl_dept d
ON e.deptId = d.id)
UNION
# 两表的右查询
(SELECT * FROM tbl_emp e
RIGHT JOIN tbl_dept d
ON e.deptId = d.id);

 

 ⑦差查询 union:查询出左表独有的部分、右表独有的部分。

 

SELECT * FROM tbl_emp e 
LEFT JOIN tbl_dept d
ON e.deptId = d.id
WHERE d.id is null 
UNION
SELECT * FROM tbl_emp e 
RIGHT JOIN tbl_dept d
ON e.deptId = d.id
WHERE e.deptId is NULL

 

这篇关于【详解】MySQL JOINS大总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/728012

相关文章

MySQL数据库实现批量表分区完整示例

《MySQL数据库实现批量表分区完整示例》通俗地讲表分区是将一大表,根据条件分割成若干个小表,:本文主要介绍MySQL数据库实现批量表分区的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录一、表分区条件二、常规表和分区表的区别三、表分区的创建四、将既有表转换分区表脚本五、批量转换表为分区

宝塔安装的MySQL无法连接的情况及解决方案

《宝塔安装的MySQL无法连接的情况及解决方案》宝塔面板是一款流行的服务器管理工具,其中集成的MySQL数据库有时会出现连接问题,本文详细介绍两种最常见的MySQL连接错误:“1130-Hostisn... 目录一、错误 1130:Host ‘xxx.xxx.xxx.xxx’ is not allowed

Spring 缓存在项目中的使用详解

《Spring缓存在项目中的使用详解》Spring缓存机制,Cache接口为缓存的组件规范定义,包扩缓存的各种操作(添加缓存、删除缓存、修改缓存等),本文给大家介绍Spring缓存在项目中的使用... 目录1.Spring 缓存机制介绍2.Spring 缓存用到的概念Ⅰ.两个接口Ⅱ.三个注解(方法层次)Ⅲ.

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

Spring Cache注解@Cacheable的九个属性详解

《SpringCache注解@Cacheable的九个属性详解》在@Cacheable注解的使用中,共有9个属性供我们来使用,这9个属性分别是:value、cacheNames、key、key... 目录1.value/cacheNames 属性2.key属性3.keyGeneratjavascriptor

PyTorch中cdist和sum函数使用示例详解

《PyTorch中cdist和sum函数使用示例详解》torch.cdist是PyTorch中用于计算**两个张量之间的成对距离(pairwisedistance)**的函数,常用于点云处理、图神经网... 目录基本语法输出示例1. 简单的 2D 欧几里得距离2. 批量形式(3D Tensor)3. 使用不

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

Nginx 413修改上传文件大小限制的方法详解

《Nginx413修改上传文件大小限制的方法详解》在使用Nginx作为Web服务器时,有时会遇到客户端尝试上传大文件时返回​​413RequestEntityTooLarge​​... 目录1. 理解 ​​413 Request Entity Too Large​​ 错误2. 修改 Nginx 配置2.1

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

Java 的 Condition 接口与等待通知机制详解

《Java的Condition接口与等待通知机制详解》在Java并发编程里,实现线程间的协作与同步是极为关键的任务,本文将深入探究Condition接口及其背后的等待通知机制,感兴趣的朋友一起看... 目录一、引言二、Condition 接口概述2.1 基本概念2.2 与 Object 类等待通知方法的区别