MySQL JOIN的使用
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;
有图有真相
理解
- 左右表独有 = 左表独有 + 右表独有
MySQL JOIN的使用的更多相关文章
- mysql join 查询图
mysql join 查询,特别是对查两个表之间的差集,可以用table字段=null来做. 注意千万不是join on XX!=XX ,这样出来的结果是错误的.
- MySQL JOIN原理
先看一下实验的两张表: 表comments,总行数28856 表comments_for,总行数57,comments_id是有索引的,ID列为主键. 以上两张表是我们测试的基础,然后看一下索引,co ...
- MySQL Join算法与调优白皮书(三)
Batched Key Access Join Index Nested-Loop Join虽好,但是通过辅助索引进行链接后需要回表,这里需要大量的随机I/O操作.若能优化随机I/O,那么就能极大的提 ...
- 图解mysql join
原文:http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins 这个图文解释mysql join的各种技 ...
- 神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程(一)
开心一刻 我:嗨,老板娘,有冰红茶没 老板娘:有 我:多少钱一瓶 老板娘:3块 我:给我来一瓶,给,3块 老板娘:来,你的冰红茶 我:玩呐,我要冰红茶,你给我个瓶盖干哈? 老板娘:这是再来一瓶,我家卖 ...
- MySQL JOIN原理(转)
先看一下实验的两张表: 表comments,总行数28856 表comments_for,总行数57,comments_id是有索引的,ID列为主键. 以上两张表是我们测试的基础,然后看一下索引,co ...
- mysql JOIN关键字 语法
mysql JOIN关键字 语法 作用:用于根据两个或多个表中的列之间的关系,从这些表中查询数据.大理石量具 说明:数据库中的表可通过键将彼此联系起来.主键(Primary Key)是一个列,在这个列 ...
- 神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程(二)
开心一刻 一头母牛在吃草,突然一头公牛从远处狂奔而来说:“快跑啊!!楼主来了!” 母牛说:“楼主来了关我屁事啊?” 公牛急忙说:“楼主吹牛逼呀!” 母牛大惊,拔腿就跑,边跑边问:“你是公牛你怕什么啊? ...
- 神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程
问题背景 对于 MySQL 的 JOIN,不知道大家有没有去想过他的执行流程,亦或有没有怀疑过自己的理解(自信满满的自我认为!):如果大家不知道怎么检验,可以试着回答如下的问题 驱动表的选择 MySQ ...
- Python MySQL Join
章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...
随机推荐
- spring boot j集成seagger 加入拦截器后 swagger 不能访问
一开始我是这样排除拦截的,但是发现没用 后来我发现swagger的真实访问路径是这样的 转自: https://blog.csdn.net/ab1991823/article/details/7906 ...
- WPF教程五:附加依赖项属性
附加依赖项属性是一个属性本来不属于对象自己,但是某些特定场景其他的对象要使用该对象在这种场景下的值.这个值只在这个场景下使用.基于这个需求设计出来的属性.这里主要涉及到一个解耦问题.最大的优势是在特定 ...
- postman使用笔记
postman主要是用来做接口测试的工具,用来模拟客户端向服务器发起请求. 一.postman支持的请求类型 1.get请求 get请求是用来向服务器获取数据 get请求没有请求体,只有url和请求头 ...
- 自定义注解@MyBatisRepository
新建一个注解用作dao扫描 /** * @author fuguangli * @description 标识MyBatis的DAO,方便{@link org.mybatis.spring.mappe ...
- poj 折半搜索
poj2549 Sumsets 题目链接: http://poj.org/problem?id=2549 题意:给你一个含有n(n<=1000)个数的数列,问这个数列中是否存在四个不同的数a,b ...
- Redux-基本概念
相关文档 1) 英文文档: https://redux.js.org/ 2) 中文文档: http://www.redux.org.cn/ 3) Git ...
- Vue中Object和Array数据变化侦测原理
在学完Vue.js框架,完成了一个SPA项目后,一直想抽时间找本讲解Vue.js内部实现原理的书来看看,经过多方打听之后,我最后选择了<深入浅出Vue.js>这本书.然而惭愧的是,这本书已 ...
- 04 AOF日志:宕机了,Redis如何避免数据丢失
接下来两篇将记录Redis持久化存储两大技术:AOF日志.RDB快照 本篇重点 "AOF日志实现""AOF日志三种写回策略""AOF重写--避免日志过 ...
- bootstrap与vue的区别是什么?(十七)
Bootstrap Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML.CSS.JavaScript 开发的简洁.直观.强悍的前端开发框 ...
- STEVE JOBS: Stanford Commencement【Stay Hungry. Stay Foolish.】
In 2005, a year after he was first diagnosed with cancer, Apple CEO Steve Jobs made a candid speech ...