彻底理解SQL中的JOIN

news2024/10/7 10:20:50

数据准备

-- 建表语句
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;


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;

-- 插入数据
INSERT INTO tbl_dept (deptName, locAdd) VALUES ('工程部', '11');
INSERT INTO tbl_dept (deptName, locAdd) VALUES ('财务部', '12');
INSERT INTO tbl_dept (deptName, locAdd) VALUES ('开发部', '13');
INSERT INTO tbl_dept (deptName, locAdd) VALUES ('营销部', '14');
INSERT INTO tbl_dept (deptName, locAdd) VALUES ('人事部', '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');

# 确认数据插入完成
SELECT * FROM `tbl_emp`;
SELECT * FROM `tbl_dept`;

1、 inner join

# inner join 结果显示a表和b表共有的部分
SELECT *
FROM tbl_emp a
INNER JOIN tbl_dept b ON b.id = a.deptId

 

 2、left join

# left join 结果显示a表和b表共有的部分+a表独有的部分
SELECT *
FROM  tbl_emp a
LEFT JOIN tbl_dept b ON b.id = a.deptId;

 

3、right join

# right join 结果显示a表和b表共有的部分+b表独有的部分
SELECT * 
FROM tbl_emp  a 
RIGHT JOIN tbl_dept b ON b.id=a.deptId

 

4、left join + where 

# left join + where  结果显示为a独有部分,与left join的区别在于去掉了a表与b表的共有部分
SELECT * 
FROM tbl_emp  a 
LEFT JOIN tbl_dept b ON b.id = a.deptId 
WHERE b.id IS NULL

5、right join + where

# right join + where 结果显示为b独有部分,与right join的区别在于去掉了a表与b表的共有部分
SELECT * 
FROM tbl_emp  a 
RIGHT JOIN tbl_dept b ON b.id= a.deptId
WHERE a.id IS NULL

6、full outer join

# full outer join 结果显示:a表与b表共有部分 + a表独有部分 + b表独有部分
# mysql不支持full outer join语法 oracle支持此语法
SELECT * 
FROM tbl_emp  a 
FULL OUTER JOIN tbl_dept b ON  b.id=a.deptId
# 解决办法:union(合并+去重)
SELECT * FROM tbl_emp  a LEFT JOIN tbl_dept b ON  b.id = a.deptId
UNION 
SELECT * FROM tbl_emp  a RIGHT JOIN tbl_dept b ON b.id = a.deptId

7、full outer join+where

# full outer join + where  结果显示: a表独有部分 + b表独有部分
# mysql不支持full outer join语法 oracle支持此语法
SELECT *
FROM tbl_emp a
FULL OUTER JOIN tbl_dept b  ON  b.id = a.deptId
WHERE b.id IS NULL OR a.id is NULL
SELECT * FROM tbl_emp  a LEFT JOIN tbl_dept b ON  b.id = a.deptId WHERE b.id IS NULL
UNION
SELECT * FROM tbl_emp  a RIGHT JOIN tbl_dept b ON b.id = a.deptId WHERE a.id  IS NULL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/669491.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【运维知识进阶篇】zabbix5.0稳定版详解4(用脚本自定义监控项+监控MySQL状态信息)

我们在做自定义监控项的时候,一个一个取比较麻烦,取出一个数值,就要把该数值相关信息以一定格式写入/etc/zabbix/zabbix_agentd.d/下的配置文件里,当遇到需要取很多数值的时候,这样的操作会很繁琐,当有一种…

前端程序员必须要知道的跨域问题以及解决方法

大厂面试题分享 面试题库 前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 web前端面试题库 VS java后端面试题库大全 前言 前端程序员必须要知道的跨域问题以及解决方法 node 代理 原理 同源策略发生在浏览…

基于Java+socket实现多线程聊天室-控制台版

基于Javasocket实现多线程聊天室-控制台版 一、系统介绍二、功能展示1.运行效果 三、代码展示四、其它1.其他系统实现2.获取源码 一、系统介绍 首先启动server端,然后启动client端。任意一个client发送给server的消息都将会被转发给所有在线的client,实…

C++基础(16)——STL常用算法(排序、拷贝和集合)

前言 本文介绍了C中STL常用排序、拷贝和集合算法 9.3:常见的排序算法(sort、random_shuffle、merge、reverse) 9.3.1:sort 9.3.2:random_shuffle 将容器中的数据位置重新打乱,可以配合随机数种子使用 9…

【Java】Java核心要点总结 69

文章目录 1. BIO NIO AIO2. 多线程3. 线程的生命周期和状态4. sleep() ⽅法和 wait() ⽅法对比5. 为什么 wait() ⽅法不定义在 Thread 中? 1. BIO NIO AIO 在Java中,BIO、NIO和AIO是针对网络编程的不同I/O模型: BIO(Blocking I/O…

【kotlin】使用MPAndroidChart实现PieChart(饼图)并设置每个数据的颜色、标签等属性

概述 MPAndroidChart 是 Android 上一个非常流行的开源图表库,它提供了多种类型的图表,包括折线图、柱状图、饼图等。 MPAndroidChart 实现饼图 下面是一个使用 MPAndroidChart 实现饼图的示例代码: 首先,需要在项目的 build.…

Makerbase CANable V2.0 产品简介

一、产品介绍 MKS CANable V2.0模块为MKS CANable V1.0升级版本。CANable 2.0是一款小型低成本开源 USB转CAN分析仪。CANable枚举为您计算机上的虚拟串行端口,并充当 CAN总线接口的串行线路。使用candleLight固件时,CANable在Linux上枚举为本地CAN接口。…

MySQL中float、double以及decimal的用法

1、浮点型和定点型 1.1 浮点型: 浮点型能够表示更大的数据范围,但是容易发生精度的问题 float和double属于浮点型,其取值范围与java中的浮点类型的取值范围相同,float占用4字节,double占用8字节 1.2 定点型&#xf…

springboot校园疫情防控管理与数据可视化系统-计算机毕设 附源码84534

springboot校园疫情防控管理与数据可视化系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针…

实战之如何在VUE中播放RTSP实时推流播放解决方案

一、知识点 常见的直播协议有以下几种 RTMP(Real-Time Messaging Protocol)实时消息传输协议:是一种用于互联网应用中的协议,最初由 Adobe 公司设计,用于 Flash Player 向 Flash Media Server 或其他支持 RTMP 的服务…

三、Docker命令及基本使用

学习参考:尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 前言一、帮助启动类命令1.1 启动docker1.2 停止docker1.3 重启docker1.4 查看docker状态1.5 开机启动1.6 查看docker概要信息1.7 查看docker总体帮助文档1.8 查看docker命令…

模板文件导出Excel【EasyPoi实战系列】- 第478篇

​历史文章(文章累计470) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 …

慎投!6月有3本SCIE期刊被剔除!(附SCI/SSCI目录下载)

期刊动态:2023年6月SCI、SSCI期刊目录更新 2023年6月20日,科睿唯安更新了WOS期刊目录,继上次5月WOS期刊目录剔除4本SCIE&SSCI期刊之后,此次6月更新又有3本SCIE期刊发生变动,其中有1本期刊被踢出SCIE数据库&#x…

Python基础(18)——Python推导式

Python基础(18)——Python推导式 文章目录 Python基础(18)——Python推导式目标一. 列表推导式1.1 快速体验1.2 带if的列表推导式1.3 多个for循环实现列表推导式 二. 字典推导式1 快速体验 三. 集合推导式四. 总结 目标 列表推导…

PowerShell系列(七)PowerShell当中的Provider介绍

往期回顾PowerShell系列(一):PowerShell介绍和cmd命令行的区别 PowerShell系列(二):PowerShell和Python之间的差异介绍 PowerShell系列(三):PowerShell发展历程梳理 P…

管理类联考——写作——素材篇——论说文——写作素材05——志篇:奉献·公益06——制篇:原则·准则

管理类专业学位联考 (写作能力) 论说文素材 05——志篇:奉献公益 论文说材料: 自己活着,就是为了使别人过得更美好。 ——雷锋 一:道理论据 成人善事,其功更倍;动人善愿,其量无涯。——陈龙正 凡人为善…

谷歌tryOnDiffusion实现了高度逼真的虚拟试穿;ChatGPT 或将推出 AI 应用商店

🦉 AI新闻 🚀 ChatGPT Plus 用户已支持联网和插件功能,OpenAI 或将推出 AI 应用商店 摘要:OpenAI 宣布 ChatGPT Plus 用户已支持联网和插件功能。据外媒 The Information 报道,OpenAI 正考虑为 AI 软件创建一个应用商…

postgresql snapshot快照源码解析, 快照内容生成规则, 可见性是这样判断的

postgresql snapshot快照源码解读 ​专栏内容:postgresql内核源码分析 个人主页:我的主页 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 概述 本文主要介绍数据库事务快照,分别从源码实…

VisualSVN Server 5.1.5 Crack

特征 VisualSVN Server 提供以下主要功能。 Active Directory 单点登录 允许用户使用他们当前的 Active Directory 域凭据访问 VisualSVN Server。使用安全 Kerberos V5 或 NTLM 身份验证协议。支持双因素身份验证和智能卡。 多站点存储库复制 使用 VisualSVN 分布式文件系统…

【FPGA入门】第七篇、FPGA实现VGA接口驱动

目录 第一部分、实验结果 1、横的三色彩条效果 2、竖的三色彩条效果 第二部分、VGA驱动基本知识 1、VGA分辨率问题 2、VGA驱动波形 2.1、工业标准的时序波形图 2.2、比上面那张图更容易理解的图 2.3、每个区域对应的时间 2.4、不同分辨率的表格 3、VGA扫描范…