数据库学习之MySQL (十六)—— SQL99 外连接 左外连接 右外连接 全外连接 交叉连接
文章目录
- 外连接 之 左外连接 与 右外连接
- 为啥要用外连接
- 全外连接
- 总结 内连接 外连接
- 交叉连接
外连接 之 左外连接 与 右外连接
我们先来看个之前的 女神男朋友的案例
传送:数据库学习之MySQL (十三)——多表查询 SQL92 SQL99 连接种类划分
我们先考虑一一映射的情况 也就是男女不会脚踏多条船 而是一对一的
那么 之前说了 我们以女神为主
以女生的信息为主表 会有12行 因为有12个女生实例 匹配不到男生的就空着
以男生为主 以男生的信息为主表 则明显 只会有4个男生对象实例
这里,因为没有一一映射 (张有三个女朋友) 导致多了两行 但实际上是以男生为主表的
那么 以······为主 代码上怎么实现呢?
我这里放第一个 女神为主表的实现代码:
USE data1;
SELECT a.`id` AS 女神id,a.`name` AS 女神名字,a.`phone` AS 女神电话,a.`boyfriend_id` AS 男朋友id,b.`boyName` AS 男朋友名字
FROM beauty AS a
LEFT JOIN boys AS bON a.`boyfriend_id` = b.`id`;
LEFT 关键字尤为重要 全称为LEFT OUTER
左外连接 可以省略outer
或者我这么写
FROM beauty AS a LEFT JOIN boys AS b
懂了吧?left 左边为主表 所以是左外连接
那么 我这么写呢?
USE data1;
SELECT a.`id` AS 女神id,a.`name` AS 女神名字,a.`phone` AS 女神电话,a.`boyfriend_id` AS 男朋友id,b.`boyName` AS 男朋友名字
FROM boys AS b
RIGHT JOIN beauty AS aON a.`boyfriend_id` = b.`id`;
答案是一样的
所以用的时候 左右连接 选一个就OK 一个道理而已
为啥要用外连接
我们看过十三节 其实用内连接的 等值连接 人家很智能的会把匹配不到的给去掉
现在我们把匹配不到的给弄出来的岂不是画蛇添足?
其实不然
比如我还看到别的信息呢?也就是女神我一定要看 有没有男朋友我不是很在意 那就需要全表
基于全表 我们再怎么筛选也不会漏数据(漏女神)
全外连接
所谓全外 就是左外+右外
啥意思?两个表都是主表
那么 两个表的所有实例都会表现出来 无论是否匹配得到
那么按照之前
名称 | 关键词 | 主表 | 实例 |
---|---|---|---|
左外 | LEFT | 女神为主表 | 12个实例女神 |
右外 | RIGHT | 男神为主表 | 4个实例男神 |
全外 | FULL | 两个都是主表 | 16个实例神 |
USE data2;
SELECT b.`id` AS 男神id,b.`boyName` AS 男神名字,b.`userCP` AS 男神指数,a.`id` AS 女神id,a.`name` AS 女朋友名字
FROM beauty AS a
FULL JOIN boys AS b
ON a.`boyfriend_id` = b.`id`;
不过 MySQL 不 支持 全连接 其他的都OK 这里就不测试了 代码可以在支持的SQL引擎中实现:
总结 内连接 外连接
我拿男神女神匹配这个案例来说
男神是女神的真子集 也就是匹配完 女生还有圣女 男生全都抱得美人归了
名称 | 关键词 | 结果 | 数学表达 | 实例 |
---|---|---|---|---|
内连接 | INNER | 互相都能匹配得到的 | 交集 | 4个实例CP神 |
左外连接 | RIGHT | 左边的女神实例保留 其他尽量匹配 匹配不到为NULL | 女神集 | 4个实例男神 |
右外连接 | FULL | 右边的男神实例保留 其他尽量匹配 匹配不到为NULL | 男神集 | 16个实例神 |
全外连接 | FULL | 左右神的实例都保留 匹配不到就为NULL | 全集 | 16个实例神 |
这个是结合代码的示意图 看看能否理解:
交叉连接
还记得我们之前的那个 笛卡尔乘积 问题嘛
传送:数据库学习之MySQL (十三)——多表查询 SQL92 SQL99 连接种类划分
其实就好像数学考试的握手游戏
这里 每个人(男神或者女神)都必须要和其他所有异性匹配 成一行实例输出
我们当时没用多表查询 瞎搞出来的代码,出来了这样的效果
其实 交叉连接就是得到这样的结果
这两段代码是等效的
意思 不用INNER OUTER限定 默认就是交叉连接
#1 错误写法
SELECT * FROM `beauty`,`boys` #2 SQL99 交叉连接写法
SELECT a.*,b.*
FROM`beauty` AS a,`boys` AS b
CROSS JOIN `boys` ;
下一站:数据库学习之MySQL (十七)—— SQL99 主查询与子查询 子查询分类之WHERE的子查询
- 本文专栏
MySQL专栏 - 我的其他专栏 希望能够帮到你 ( •̀ ω •́ )✧
- 手把手带你学后端(服务端)
- python这么火 想要深入学习python 玩一下简单的应用嘛?
python应用
- 谢谢大佬支持! 萌新有礼了:)
数据库学习之MySQL (十六)—— SQL99 外连接 左外连接 右外连接 全外连接 交叉连接相关推荐
- 数据库学习之MySQL (十七)—— SQL99 主查询 与 子查询 子查询分类之WHERE的子查询
文章目录 主查询 子查询 纲举目张--子查询的分类 WHERE语句后的 子查询 主查询 子查询 概念集中于SELECT语句 之前我们所学习的所有,都是SELECT作为独立的一句 是主干,是爸爸 后面跟 ...
- mysql now str,数据库学习之MySQL (十)—— 日期和时间函数 NOW STR_TO_DATE DATE_FORMAT 流程控制函数 IF IFNULL CASE...
MySQL学习专栏 正在持续更新中:) 文章目录 日期和时间函数 NOW STR_TO_DATE DATE_FORMAT 流程控制函数 IF IFNULL CASE 下章预告 日期和时间函数 NOW ...
- mysql with as_mysql数据库学习(第十六篇)- 视图
视图 视图的行和列来自定义视图的查询中使用的表,并且是在使用视图时动态生成的. 创建视图 Create view 视图名字 as ( 单表 or 多表 or 视图) Create / Replace ...
- 数据库学习之MySQL (九)—— 数学函数 字符串函数 CONCAT TRIM PAD
MySQL学习专栏 正在持续更新中:) 文章目录 复习一下 前面学到的函数 LENGTH CONCAT 数学函数 ABS CEIL FLOOR ROUND POW 常用字符串函数 SUBSTR REP ...
- 我的MYSQL学习心得(十六) 优化
原文:我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看 ...
- [go学习笔记.第十六章.TCP编程] 3.项目-海量用户即时通讯系统-redis介入,用户登录,注册
1.实现功能-完成用户登录 在redis手动添加测试用户,并画出示意图以及说明注意事项(后续通过程序注册用户) 如:输入用户名和密码,如果在redis中存在并正确,则登录,否则退出系统,并给出相应提示 ...
- 线程的堆栈——Windows核心编程学习手札之十六
线程的堆栈 --Windows核心编程学习手札之十六 系统会在进程的地址空间内保存一些区域,同时也会在进程地址空间内为线程的堆栈保留区域.线程都有自己的堆栈,创建时,系统就保留一个堆栈空间区域,并将相 ...
- OpenCV学习笔记(十六)——CamShift研究 OpenCV学习笔记(十七)——运动分析和物体跟踪Video OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc
OpenCV学习笔记(十六)--CamShift研究 CamShitf算法,即Continuously Apative Mean-Shift算法,基本思想就是对视频图像的多帧进行MeanShift运算 ...
- OpenCV学习笔记(十六):直方图均衡化:equalizeHist()
OpenCV学习笔记(十六):直方图均匀化:equalizeHist() 参考博客: 直方图均衡化的数学原理 直方图匹配的数学原理 直方图均衡化广泛应用于图像增强中: 直方图均衡化处理的"中 ...
最新文章
- 软件工程作业----个人读后感
- n9009 Android5.0内核,三星N9009(Galaxy Note 3 电信版 Android 5.0)刷Recovery教程
- linux网卡IO,浅谈Linux 网络 I/O 模型简介(图文)
- 用于Activity管理和应用程序退出
- bert模型可以做文本主题识别吗_网民情绪识别TOP3分享----科技战疫·大数据公益挑战赛...
- java类中的static块_java类中static代码块的执行次数
- moongose模糊查询相关博客
- 测试如何进行有效的需求分析
- ICEM对装配体进行网格划分实例
- js里的一些even事件
- Android Studio 报错 : Cause : zip file is empty
- 安卓apk360加固
- 【hadoop】进阶篇一:MapReduce之Job的提交
- School Regional Team Contest, Saratov, 2011-F. Spiders-求树直径
- 小白兔写话_可爱的小白兔二年级写话
- pvid与access的关系_关于Trunk、Hybrid、Access、Tag、Untag、Pvid的关系
- 数据库表赋权给指定用户
- nginx容器配置https后访问有时显示连接被重置
- siesta在Linux运行,请教,为什么siesta编译中没报错,然而运行的时候跑不起来呢 - 第一原理 - 小木虫 - 学术 科研 互动社区...
- 深度学习-Relu层
热门文章
- Linux- 硬件查询——lspci/lsusb/lsblk/blkid/lscpu/hdparm/sdparm/smart/dmidecode
- 被骂了十年的国产软件,却成了世界之最...没想到架构这么牛
- 长风破浪会有时 直挂云帆济沧海
- 软考(16)-QOS
- 根本上解决Thinkbook 14p Gen2 ACH Linux睡眠或从Linux重启后SSD掉盘的问题
- 为什么工程师要了解业务?
- 进行性肌营养不良研究又有新的发现
- 简单记录绘制双坐标图表
- PHP菜鸟手记——如何解决无法装载动态链接库的问题
- 桥梁结构健康监测系统-桥梁健康监测方案介绍