MySQL 七种 JOIN 写法,这次终于搞懂了!
java1234
共 3423字,需浏览 7分钟
· 2021-08-30
点击上方蓝色字体,选择“标星公众号”
优质文章,第一时间送达
JOIN的使用
JOIN 理论
MySQL 七种 JOIN 的 SQL 编写
环境搭建
# 创建部门表
CREATE TABLE tbl_dept (
id INT NOT NULL AUTO_INCREMENT,
deptName VARCHAR (30) DEFAULT NULL,
locAdd VARCHAR (40) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT chharset = utf8 ;
# 创建员工表
CREATE TABLE tbl_emp (
id INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR (20) DEFAULT NULL,
deptId INT (11) DEFAULT NULL,
PRIMARY KEY (id),
KEY fk_dept_id (deptId) CONSTRAINT fk_dept_id FORREIGN KEY (deptId) REFERENCES tbl_dept (id)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = uttf8 ;
# 插入部门信息
INSERT INTO tbl_dept(deptName,locAdd) VALUES('RD',11),('HR',12),('MK',13),('MIS',14),('FD',15);
# 插入员工信息
INSERT INTO tbl_emp(`name`,deptId) VALUES('z3',1),('z4',1),('z5',1),('w5',2),('w6',2),('s7',3),('s8',4),('s9',51);
1.内连接(INNER JOIN)
语句
SELECT * FROM tbl_dept a INNER JOIN tbl_emp b ON a.id = b.deptId;
有图有真相
理解
可以理解为两个集合的交集
2.左(外)连接(LEFT JOIN)
语句
SELECT * FROM tbl_dept a LEFT JOIN tbl_emp b ON a.id = b.deptId;
有图有真相
理解
LEFT JOIN
返回左表的全部行和右表满足ON
条件的行,如果左表的行在右表中没有匹配,那么这一行右表中对应数据用NULL
代替
3.右(外)连接(RIGHT JOIN)
语句
SELECT * FROM tbl_dept a RIGHT JOIN tbl_emp b ON a.id = b.deptId;
有图有真相
理解
RIGHT JOIN
返回右表的全部行和左表满足ON
条件的行,如果右表的行在左表中没有匹配,那么这一行左表中对应数据用NULL
代替。
4.左表独有
语句
SELECT * FROM tbl_dept a LEFT JOIN tbl_emp b ON a.id = b.deptId WHERE b.deptId IS NULL;
有图有真相
理解
查询左表独有的数据 (注意:左表独有,右表 key 为空)
5.右表独有
语句
SELECT * FROM tbl_dept a RIGHT JOIN tbl_emp b ON a.id = b.deptId WHERE a.id IS NULL;
有图有真相
理解
查询右表独有的数据 (注意:右表独有,左表 key 为空)
6.全连接
语句
SELECT * FROM tbl_dept a LEFT JOIN tbl_emp b ON a.id = b.deptId
UNION
SELECT * FROM tbl_dept a RIGHT JOIN tbl_emp b ON a.id = b.deptId;
有图有真相
理解
在
mysql
中不支持FULL JOIN
进行全连接,可以用 一个左连接UNION
一个右连接
7.左右表独有
语句
SELECT * FROM tbl_dept a LEFT JOIN tbl_emp b ON a.id=b.deptId WHERE b.deptId IS NULL
UNION
SELECT * FROM tbl_dept a RIGHT JOIN tbl_emp b ON a.id=b.deptId WHERE a.id IS NULL;
有图有真相
理解
左右表独有 = 左表独有 + 右表独有
作者 | 这行代码没Bug
来源 | cnblogs.com/likeyou99315/p/15172229.html
评论
真心建议大家搞个香港身份,再不冲就晚了
香港一直有“互联网荒漠”之称,疫情这三年,香港开始大力扶持互联网 科技工程 /IT产业,公布了《香港智慧城市蓝图》。目前规划已经覆盖到交通、医疗、经济、教育、环境等多个方面。目前在智能制造,5G网络、智慧城市等领域人才,通过香港优才计划入境都极具优势。什么是香港优才计划优才计划,全称优秀人才入境计划
公子龙
0
面试官:MySQL 上亿大表,如何深度优化?
来源:cnblogs.com/YangJiaXin/p/10828244.html背景分析测试实施索引优化后delete大表优化为小批量删除总结前段时间刚入职一家公司,就遇上这事!背景XX实例(一主一从)xxx告警中每天凌晨在报SLA报警,该报警的意思是存在一定的主从延迟(若在此时发生主从切换,需要
好好学java
0
MySQL 巨坑:永远不要在 MySQL 中使用 UTF-8!!
来源:网络👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0 版本完结啦, 演示链接:http://116.62.199.48/ ,新项目
小哈学Java
10
终于!卷进阿里了!!
这是来自R哥一个粉丝的反馈:我这几年一直坚持在运营这个Java面试库,能帮到他这么多,我也很欣慰,也让我觉得很有意义在做一件事情。Java面试库从 0 一直更新到现在 2500+,几乎覆盖了所有主流面试题,还有大厂面试真题,支持自测练习,花费我巨量心血,堪称面试速成神器!如果你还没用过这个
Java技术栈
0
8种专坑运维的 SQL 写法,性能降低100倍,您不来看看?
来源:机器之心1、LIMIT 语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般 DBA 想到的办法是在 type,name, create_time 字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。SELECT *FROM opera
良许Linux
0
50条MySQL常用脚本
关注公众号,SQL干货及时获取后台回复:1,进SQL技术交流群SQL面试专栏《SQL145题第2版》花时间整理了50条常用的MySQL脚本,查漏补缺,希望对大家有所帮助。-- 1、插入数据INSERT INTO example_table (name, age) VALUES&n
SQL数据库开发
0
iOS 模拟器终于上架,手慢无,附300+游戏
AltStore开发者放大招!首款Delta游戏模拟器正式问世,就在今天凌晨,AltStore自签工具开发者,推出了Delta游戏模拟器,更是为我们带来了一个充满怀旧与乐趣的游戏世界! Delta 游戏模拟器支持的游戏主机如下方图片,我都进行了翻译方便大家查看,只需下载相应的游戏
宅哥技术
0
终于来了,2024 最新版 SpringCloud 教程,收藏好,慢慢看
2024 最新版 SpringCloud 最强教程来了,目录如下,文末附教程地址。SpringCloud-前言闲聊开篇简介01_SpringBoot和SpringCloud版本选型02_SpringCloud是什么能干吗03_SpringCloud各组件的停更升级替换说明04_项目实战之需求说明05
路人甲Java
0