你不知道的 ,MySQL中的七种SQL JOINS的实现,满外连接
七种SQL JOINS的实现,满外连接
每博一文案
英国作家摩姆说过,我们每个人在世界上都是孤独的,因此
我们只能孤独地行走,尽管身体相互依傍,却并不在一起。
既不了解别的人,也不能为别人所了解。
当一个人受尽了委屈,不会把难处逢人就说,
而是一个人一言不发,是哀莫,待遇心思
愿你所有的义无反顾都能换来流星般的灿烂,
也祝你尝尽世间冷漠。仍有一颗炙热的心,无惧风雨苦乐自尝———————————— 一禅心灵庙语
文章目录
- 七种SQL JOINS的实现,满外连接
- 每博一文案
- 满外连接
- 七种SOL JOINS的实现
- 总结:
- 最后:
满外连接
满外连接的结果是:左右表匹配的数据 + 左表没有匹配到的数据 + 右表没有匹配到的数据,就是上图 SQL JOINS图 中的左下图
与 UNION 并集,操作的作用一样
在 SQL99语法中满外连接(FULL OUTER JOIN) 同样其中的 OUTER可以省略不写,
但是我们的 MySQL 不支持 FULL JOIN ,我们可以使用 左外连接 + 右外连接 的拼接实现,(LEFT JOIN UNION RIGHT JOIN) 代替 ,但是个人不建议使用 UNION 去重复的拼接,因为它在去重复的这件事上比较消耗性能,
所以我个人建议使用 UNION ALL 的不去重复的拼接,我们可以从算法上到达去重复的效果,而不会消耗性能,做到性能上的优化,如上图SQL JOINS 中的
左中图 + 右上图 以及
具体的Mysql语句实现
SELECT emp.`department_id`, dep.`department_name`
FROM employees AS emp
LEFT JOIN departments AS dep /*表的左外连接*/
ON dep.`department_id` = emp.`department_id` /*表之间的连接条件*/
WHERE dep.`department_id` IS NULL
UNION ALL /*UNION ALL 类型,列数一致*/
SELECT emp.`department_id`, dep.`department_name`
FROM employees AS emp
RIGHT JOIN departments AS dep /*表的右外连接*/
ON emp.`department_id` = dep.`department_id`; /*表之间的连接条件*/
右中图 + 左上图 之间的拼接,就可以达到去重复的效果
具体的Mysql语句的实现
SELECT emp.`department_id`, dep.`department_name`
FROM employees AS emp
LEFT JOIN departments AS dep /*表的左外连接*/
ON dep.`department_id` = emp.`department_id` /*表之间的连接条件*/
UNION ALL /*UNION ALL 类型,列数一致*/
SELECT emp.`department_id`, dep.`department_name`
FROM employees AS emp
RIGHT JOIN departments AS dep /*表的右外连接*/
ON dep.`department_id` = emp.`department_id` /*表之间的连接条件*/
WHERE emp.`department_id` IS NULL; /*表连接后的进一步的筛选*/
七种SOL JOINS的实现
首先我们把图中的A表 认为是我们的 employees表 ,B表 认为是我们的 departments表
- 中图实现,内连接:查询符合连接条件的
SELECT emp.`department_id`, dep.`department_name`
FROM employees AS emp
JOIN departments AS dep /*表的连接*/
ON emp.`department_id` = dep.`department_id`; /*表之间的连接条件*/
- 左上图,左外连接:匹配条件的记录 +左表的所有记录
SELECT emp.`department_id`, dep.`department_name`
FROM employees AS emp
LEFT JOIN departments AS dep /*表的左外连接*/
ON emp.`department_id` = dep.`department_id`; /*表之间的连接条件*/
- 右上图的,右外连接,:匹配符合条件的 + 右表的所有记录
SELECT emp.`department_id`, dep.`department_name`
FROM employees AS emp
RIGHT JOIN departments AS dep /*表的右外连接*/
ON emp.`department_id` = dep.`department_id`; /*表之间的连接条件*/
- 左中图,查询A表中不含有符合连接条件的记录
SELECT emp.`department_id`, dep.`department_name`
FROM employees AS emp
LEFT JOIN departments AS dep /*表的左外连接*/
ON emp.`department_id` = dep.`department_id` /*表之间的连接条件*/
WHERE dep.`department_id` IS NULL; /*表连接后的进一步筛选*/
- 右中图,查询右表中不含有符合连接条件的记录
SELECT emp.`department_id`, dep.`department_name`
FROM employees AS emp
RIGHT JOIN departments AS dep /*表的右外连接*/
ON emp.`department_id` = dep.`department_id` /*表之间的连接条件*/
WHERE emp.`department_id` IS NULL; /*表连接后的进一步筛选*/
- 左下图,满外连接,左表记录 + 符合条件记录 + 右表记录
第一种方式:左中图 UNION ALL 右上图
SELECT emp.`department_id`, dep.`department_name`
FROM employees AS emp
LEFT JOIN departments AS dep /*表的左外连接*/
ON dep.`department_id` = emp.`department_id` /*表之间的连接条件*/
WHERE dep.`department_id` IS NULL
UNION ALL /*UNION ALL 类型,列数一致*/
SELECT emp.`department_id`, dep.`department_name`
FROM employees AS emp
RIGHT JOIN departments AS dep /*表的右外连接*/
ON emp.`department_id` = dep.`department_id`; /*表之间的连接条件*/
第二种方式: 左上图 UNION ALL 右中图
SELECT emp.`department_id`, dep.`department_name`
FROM employees AS emp
LEFT JOIN departments AS dep /*表的左外连接*/
ON dep.`department_id` = emp.`department_id` /*表之间的连接条件*/
UNION ALL /*UNION ALL 类型,列数一致*/
SELECT emp.`department_id`, dep.`department_name`
FROM employees AS emp
RIGHT JOIN departments AS dep /*表的右外连接*/
ON dep.`department_id` = emp.`department_id` /*表之间的连接条件*/
WHERE emp.`department_id` IS NULL; /*表连接后的进一步的筛选*/
- 右下图:不要符合条件的
左中图 UNION ALL 右中图
SELECT emp.`department_id`, dep.`department_name`
FROM employees AS emp
LEFT JOIN departments AS dep /*表的左外连接*/
ON emp.`department_id` = dep.`department_id` /*表之间的连接条件*/
WHERE dep.`department_id` IS NULL /*表连接后的进一步筛选*/
UNION ALL /*UNIION ALl 列数,类型的一致*/
SELECT emp.`department_id`, dep.`department_name`
FROM employees AS emp
RIGHT JOIN departments AS dep /*表的右外连接*/
ON emp.`department_id` = dep.`department_id` /*表之间的连接条件*/
WHERE emp.`department_id` IS NULL; /*表连接后进一步的筛选条件*/
总结:
- Mysql 不支持 SQL99语法中的满外连接关键字 FULL JOIN ,我们使用 UNION ALL 代替,不用 UNION 去重复影响性能,使用 UNION ALL 配合算法实现去重复,优化性能
- 注意 UNION ALL的使用注意事项 类型一致,列数一致
- 外连接与内连接 拼接会失去外连接的作用,注意使用,外连接与外连接的拼接
最后:
限于自身水平,其中存在的错误 ,希望大家给予指教,韩信点兵——多多益善,谢谢大家,后会有期,江湖再见!
你不知道的 ,MySQL中的七种SQL JOINS的实现,满外连接相关推荐
- MySQL:七种 SQL JOINS 的实现(图文详解)
MySQL:7种SQL JOINS的实现 前言 一.图示表示 二.代码举例 1.INNER JOIN(内连接) 2.LEFT JOIN(左连接) 3.RIGHT JOIN(右连接) 4.OUTER J ...
- Mysql中的七种常用查询连接详解
目录 一.概述 二.连接查询的分类 三.七种常用连接查询详解 1.笛卡尔积: 2.内连接 2.1隐式与显式连接 ?2.2等值连接 ?2.3非等值连接 ?2.4自连接 3外连接 3.1左外连接: ?3. ...
- MySQL实现7种 SQL JOINS
MySQL实现7种 SQL JOINS 文章目录 MySQL实现7种 SQL JOINS UNION 和 UNION ALL 关键字使用 7种SQL JOIN 实现 UNION 和 UNION ALL ...
- 7种SQL JOINS 的实现
Table A设置如下: Table B设置如下: 在Table A和Table B的基础上实现MySQL的七种JOINS # 7种 Sql JOIN的实现# 1.中图 : 内连接 SELECT em ...
- SQL 7种SQL JOINS的实现
以下介绍皆为SQL语言 99语法 mysql 7种SQL JOINS 包括: departments 表 (注意看都有那些列) employees 表(注意都有那些列) 1.内连接: 内连接是通过 ...
- mysql中的四种注释
mysql中的四种注释 NO1:-- 注释内容 这种注释方法不能够实现多行注释,要注意的是 --后面是有一个空格的.(-- 后面的内容将不会被识别,因此需要在下一行加上分号来结束该语句) NO2:#注 ...
- mysql数据类型double,double在数据库怎么定义 mysql中double类型在sql中用什么类型
sql定义一个double变量怎么定义? 局部变量 声明:DECLARE @local_variable data_type @local_variable 是变量的名称.变量名必须以 at 符 (@ ...
- 会mysql不会sql_不是吧,不会有人还不知道MySQL中具实用的SQL语句
原标题:不是吧,不会有人还不知道MySQL中具实用的SQL语句 目录 实用的SQL 1.插入或替换 2.插入或更新 3.插入或忽略 4.SQL中的if-else判断语句 5.指定数据快照或备份 6.写 ...
- LINUX中的七种文件类型
在liunx下一切皆文件. LINUX中的七种文件类型 d 目录文件. l 符号链接(指向另一个文件,类似于window下的快捷方式): s 套接字文件: b 块设备文件,二进制文件: c 字符设备文 ...
最新文章
- ubuntu 大小写指示的小工具
- js 缺少标识符、字符串或数字
- android EditView
- python po设计模式_(Python)PO设计模式
- NSThread详解
- 20171108 模拟题 T1
- pl sql入门比较好的书_面试官问你SQL?这几本书足够了
- StringBuffer与StringBuilder的作用与区别
- 【转】解决win7下重装winXP 系统启动选择菜单消失 问题
- 什么情况下使用多线程
- 《移动通信原理与系统》——第二章《移动通信电波传播与传播预测模型》——笔记
- SaaS微信小程序电商系统,一键生成小程序【源码分享】
- 【寒江雪】点到直线的最短距离
- 西奥电梯服务器故障维修,干货│西奥电梯故障分析和技术文件
- 商务网站建设与维护【2】
- [Pyhon大数据分析] 五.人民网新闻话题抓取及Gephi构建主题知识图谱
- 服务器硬盘与普通硬盘有什么区别?
- 电感RDC、IDC值是什么意思?或DCR DCI
- nginx搭建反向代理配置并测试
- Z-INDEX: 999
热门文章
- matlab绘图插图_几十年来,制图师一直在瑞士官方地图中隐藏秘密插图
- 找回旧帖:谢谢斩月,谢谢monkeycz,谢谢dtcser,谢谢超级大BUG
- 更新Edge后百度网盘找不到倍速看这里
- 排序算法的总结 排序算法及其稳定性
- 企业付款到零钱微信API请求报错:error:0909006C:PEM routines:get_name:no start line
- articulate storyline 导出html5,Articulate Storyline 3详解与交互学习资源制作
- Android四大组件-Service
- 對谷詞翻譯機器人(trans@xiaoi.com)的兩點建議
- 样本偏度(skewness)与随机变量的偏度及三阶统计量之间的关系和计算估计
- 关于TCS230颜色传感器的使用