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 19 MySQL
MySql开发之自动同步表结构
May 28 MySQL
MySQL不使用order by实现排名的三种思路总结
Jun 02 MySQL
MySQL8.0无法启动3534的解决方法
Jun 03 MySQL
mysql left join快速转inner join的过程
Jun 30 MySQL
mysql优化之query_cache_limit参数说明
Jul 01 MySQL
MySQL的Query Cache图文详解
Jul 01 MySQL
Prometheus 监控MySQL使用grafana展示
Aug 30 MySQL
MySQL分区表管理命令汇总
Mar 21 MySQL
MySQL视图概念以及相关应用
Apr 19 MySQL
MySQL索引 高效获取数据的数据结构
May 02 MySQL
mysql函数之截取字符串的实现
Aug 14 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面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
PHP文件锁定写入实例解析
2014/07/14 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
[JS源码]超长文章自动分页(客户端版)
2007/01/09 Javascript
5 cool javascript apps
2007/03/24 Javascript
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
2013/12/10 Javascript
Chrome扩展页面动态绑定JS事件提示错误
2014/02/11 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
JS日期加减,日期运算代码
2015/11/05 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
运动检测ViBe算法python实现代码
2018/01/09 Python
python构建深度神经网络(DNN)
2018/03/10 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
2019/09/26 Python
使用apiDoc实现python接口文档编写
2019/11/19 Python
Python格式化输出--%s,%d,%f的代码解析
2020/04/29 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
JD Sports法国:英国篮球和运动时尚的领导者
2017/09/28 全球购物
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
交通志愿者活动总结
2014/06/27 职场文书
2015年七一建党节演讲稿
2015/03/19 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书
2019客服个人年终工作总结范文
2019/07/08 职场文书