MySQL的JOIN大家在日常工作中都用得很多 , 今天小朱老师就给大家整理了MySQL七种JOIN类型的用法 , 一起来深入了解一下吧 。数据分析优质社群 , 等你加入哦~
首先创建需要JOIN的两个表:
CREATE TABLE `tbl_emp` (`id` INT(11) NOT NULL AUTO_INCREMENT,`name` VARCHAR(30) DEFAULT NULL,`deptID` VARCHAR(40) DEFAULT NULL,PRIMARY KEY (`id`)) 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;
我们可以看到数据的呈现:
文章插图
1、A ∩ B
文章插图
SELECT * FROM tbl_emp a INNER JOIN tbl_dept b # 共有 ON a.deptID = b.ID
文章插图
2、A ( = A ∩ B + A* )
文章插图
SELECT * FROM tbl_emp a LEFT JOIN tbl_dept b ON a.deptID = b.ID
文章插图
3、B ( = A ∩ B + B* )
文章插图
SELECT * FROM tbl_emp a RIGHT JOIN tbl_dept b ON a.deptID = b.ID
文章插图
4. A* ( = A - A ∩ B )
文章插图
SELECT * FROM tbl_emp a LEFT JOIN tbl_dept bON a.deptID = b.ID # ON时主表保留 WHERE B.ID IS NULL # 筛选A表数据
文章插图
5. B* ( = B - A ∩ B )
文章插图
SELECT * FROM tbl_emp a RIGHT JOIN tbl_dept bON a.deptID = b.ID # ON时主表保留 WHERE a.deptID IS NULL # 筛选B表数据
文章插图
6. A ∪ B
文章插图
SELECT < select_list > FROM TableA A FULL OUTER JOIN TableB B ## FULL OUTER 仅oracle支持 ON A.Key = B.Key-- MySQL格式 SELECT * FROM tbl_emp a LEFT JOIN tbl_dept bON a.deptID = b.IDUNION SELECT * FROM tbl_emp a RIGHT JOIN tbl_dept bON a.deptID = b.ID
文章插图
7. A ∪ B - A ∩ B
文章插图
SELECT < select_list > FROM TableA A FULL OUTER JOIN TableB B ON A.Key = B.Key WHERE A.Key IS NULL OR B.Key IS NULL-- MySQL格式 SELECT * FROM tbl_emp a LEFT JOIN tbl_dept bON a.deptID = b.IDUNION SELECT * FROM tbl_emp a RIGHT JOIN tbl_dept bON a.deptID = b.ID WHERE a.deptID IS NULL OR b.ID IS NULL
文章插图
以上就是其中JOIN类型的介绍 , 大家可以用起来了哦 。
【MySQL七种JOIN类型,终于学明白了】
推荐阅读
- MySQL崩溃-修复损坏的innodb:innodb_force_recovery
- MySQL的select流程
- canal+Kafka实现mysql与redis数据同步
- oracle 和 mysql 自动按照日期备份数据库脚本
- MySQL 使用 Mysqldump 备份导入数据导致主从异常
- Docker如何构建mysql主从?
- 分享MySQL记录锁、间隙锁、临键锁小案例演示,你学废了吗
- 百万级数据下的mysql深度解析
- Mysql数据库tinyint,int,bigint,char,varchar究竟用哪个?
- 预示你有艳遇七种梦