MySQL七大JOIN的具体使用


Posted in MySQL onFebruary 28, 2022
目录

简介

MySQL七大JOIN的具体使用

  • A的独有+AB的公有
  • B的独有+AB的公有
  • AB的公有
  • A的独有
  • B的独有
  • A的独有+B的独有+AB的公有
  • A的独有+B的独有

练习

建表

部门表

DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
	`dept_id` int(11) NOT NULL AUTO_INCREMENT,
    `dept_name` varchar(30) DEFAULT NULL,
    `dept_number` int(11) DEFAULT NULL,
    PRIMARY KEY (`dept_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

INSERT INTO `dept` VALUES ('1', 'AA', '100');
INSERT INTO `dept` VALUES ('2', 'BB', '200');
INSERT INTO `dept` VALUES ('3', 'CC', '300');
INSERT INTO `dept` VALUES ('4', 'DD', '400');
INSERT INTO `dept` VALUES ('5', 'HH', '500');

员工表

DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
    `emp_id` int(11) NOT NULL AUTO_INCREMENT,
    `emp_name` varchar(30) DEFAULT NULL,
    `emp_age` int(11) DEFAULT NULL,
    `dept_id` int(11) NOT NULL,
    PRIMARY KEY (`emp_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

INSERT INTO `emp` VALUES('1', 'zhangsan', '20', '1');
INSERT INTO `emp` VALUES('2', 'lisi', '25', '6');
INSERT INTO `emp` VALUES('3', 'wangwu', '19', '4');
INSERT INTO `emp` VALUES('4', 'zhaoliu', '29', '5');
INSERT INTO `emp` VALUES('5', 'xiaohong', '30', '2');
INSERT INTO `emp` VALUES('6', 'xiaohu', '26', '3');
INSERT INTO `emp` VALUES('7', 'zhangle', '23', '3');
INSERT INTO `emp` VALUES('8', 'qingtian', '38', '3');
INSERT INTO `emp` VALUES('9', 'xiayutian', '36', '2');
INSERT INTO `emp` VALUES('10', 'fangjia', '40', '1');
情景分析

1.左连接(left join)

A的独有+AB的公有

SELECT * from emp e LEFT JOIN dept d ON e.dept_id=d.dept_id;

MySQL七大JOIN的具体使用

2.右连接(right join)

B的独有+AB的公有

SELECT * from emp e RIGHT JOIN dept d ON e.dept_id=d.dept_id;

MySQL七大JOIN的具体使用

3.内连接(inner join)

AB的公有

SELECT * from emp e INNER JOIN dept d ON e.dept_id=d.dept_id;

MySQL七大JOIN的具体使用

4.左外连接(left join且右表=null)

A的独有

SELECT * from emp e LEFT JOIN dept d ON e.dept_id=d.dept_id WHERE d.dept_id is null;

MySQL七大JOIN的具体使用

5. 右外连接(right join且左表=null)

B的独有

SELECT * from emp e RIGHT JOIN dept d ON e.dept_id=d.dept_id WHERE e.dept_id is null;

MySQL七大JOIN的具体使用

6. 全连接(full outer join)

A的独有+B的独有+AB的公有

注意:MySQL不支持FULL OUTER JOIN(在ORACLE支持)。

因此使用UNION的方式来实现,可以**合并+去重**

应用场景:

要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时

特点:

1、要求多条查询语句的查询列数是一致的

2、要求多条查询语句的查询的每一列的类型和顺序最好一致

3、union关键字**默认去重,如果使用union all 可以包含重复项**

SELECT * from emp e LEFT JOIN dept d ON e.dept_id=d.dept_id UNION SELECT * FROM emp e RIGHT JOIN dept d ON e.dept_id=d.dept_id;

MySQL七大JOIN的具体使用

7. 全外连接(full outer join且左右表=null)

A的独有+B的独有

SELECT * from emp e LEFT JOIN dept d ON e.dept_id=d.dept_id WHERE d.dept_id is null UNION SELECT * FROM emp e RIGHT JOIN dept d ON e.dept_id=d.dept_id WHERE e.dept_id is null;

MySQL七大JOIN的具体使用

 到此这篇关于MySQL七大JOIN的具体使用的文章就介绍到这了,更多相关MySQL JOIN使用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
如何设计高效合理的MySQL查询语句
May 26 MySQL
MySQL查看表和清空表的常用命令总结
May 26 MySQL
Navicat for MySQL的使用教程详解
May 27 MySQL
浅谈MySQL next-key lock 加锁范围
Jun 07 MySQL
mysql 索引合并的使用
Aug 30 MySQL
如何避免mysql启动时错误及sock文件作用分析
Jan 22 MySQL
解决Mysql多行子查询的使用及空值问题
Jan 22 MySQL
MySQL创建管理RANGE分区
Apr 13 MySQL
Golang连接并操作MySQL
Apr 14 MySQL
CentOS MySql8 远程连接实战
Apr 19 MySQL
详解Mysql数据库平滑扩容解决高并发和大数据量问题
May 25 MySQL
mysqldump进行数据备份详解
Jul 15 MySQL
一文弄懂MySQL索引创建原则
一文了解MySQL二级索引的查询过程
Mysql数据库表中为什么有索引却没有提高查询速度
教你如何让spark sql写mysql的时候支持update操作
Feb 15 #MySQL
一文弄懂MySQL中redo log与binlog的区别
Feb 15 #MySQL
Mysql Innodb存储引擎之索引与算法
深入讲解数据库中Decimal类型的使用以及实现方法
You might like
PHP 采集程序原理分析篇
2010/03/05 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
2018/05/21 PHP
PHP PDOStatement::nextRowset讲解
2019/02/01 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
jquery实现html页面 div 假分页有原理有代码
2014/09/06 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
JavaScript之underscore_动力节点Java学院整理
2017/07/03 Javascript
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
vue+axios实现post文件下载
2019/09/25 Javascript
Node.js API详解之 V8模块用法实例分析
2020/06/05 Javascript
jQuery 移除事件的方法
2020/06/20 jQuery
Vue.js原理分析之nextTick实现详解
2020/09/07 Javascript
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
Python 中 list 的各项操作技巧
2017/04/13 Python
Python生成数字图片代码分享
2017/10/31 Python
python类的方法属性与方法属性的动态绑定代码详解
2017/12/27 Python
对web.py设置favicon.ico的方法详解
2018/12/04 Python
django之自定义软删除Model的方法
2019/08/14 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
Python request操作步骤及代码实例
2020/04/13 Python
Django如何使用redis作为缓存
2020/05/21 Python
波兰数码相机及配件网上商店: Cyfrowe.pl
2017/06/19 全球购物
酒店管理专业毕业生推荐信
2013/11/10 职场文书
菜篮子工程实施方案
2014/03/08 职场文书
华清池导游词
2015/02/02 职场文书
2015年小学重阳节活动总结
2015/07/29 职场文书
小学教师师德培训心得体会
2016/01/09 职场文书
《青山不老》教学反思
2016/02/22 职场文书