文章目录

  • 外连接 之 左外连接 与 右外连接
  • 为啥要用外连接
  • 全外连接
  • 总结 内连接 外连接
  • 交叉连接

外连接 之 左外连接 与 右外连接

我们先来看个之前的 女神男朋友的案例
传送:数据库学习之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 外连接 左外连接 右外连接 全外连接 交叉连接相关推荐

  1. 数据库学习之MySQL (十七)—— SQL99 主查询 与 子查询 子查询分类之WHERE的子查询

    文章目录 主查询 子查询 纲举目张--子查询的分类 WHERE语句后的 子查询 主查询 子查询 概念集中于SELECT语句 之前我们所学习的所有,都是SELECT作为独立的一句 是主干,是爸爸 后面跟 ...

  2. mysql now str,数据库学习之MySQL (十)—— 日期和时间函数 NOW STR_TO_DATE DATE_FORMAT 流程控制函数 IF IFNULL CASE...

    MySQL学习专栏 正在持续更新中:) 文章目录 日期和时间函数 NOW STR_TO_DATE DATE_FORMAT 流程控制函数 IF IFNULL CASE 下章预告 日期和时间函数 NOW ...

  3. mysql with as_mysql数据库学习(第十六篇)- 视图

    视图 视图的行和列来自定义视图的查询中使用的表,并且是在使用视图时动态生成的. 创建视图 Create view 视图名字 as ( 单表 or 多表 or 视图) Create / Replace ...

  4. 数据库学习之MySQL (九)—— 数学函数 字符串函数 CONCAT TRIM PAD

    MySQL学习专栏 正在持续更新中:) 文章目录 复习一下 前面学到的函数 LENGTH CONCAT 数学函数 ABS CEIL FLOOR ROUND POW 常用字符串函数 SUBSTR REP ...

  5. 我的MYSQL学习心得(十六) 优化

    原文:我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看 ...

  6. [go学习笔记.第十六章.TCP编程] 3.项目-海量用户即时通讯系统-redis介入,用户登录,注册

    1.实现功能-完成用户登录 在redis手动添加测试用户,并画出示意图以及说明注意事项(后续通过程序注册用户) 如:输入用户名和密码,如果在redis中存在并正确,则登录,否则退出系统,并给出相应提示 ...

  7. 线程的堆栈——Windows核心编程学习手札之十六

    线程的堆栈 --Windows核心编程学习手札之十六 系统会在进程的地址空间内保存一些区域,同时也会在进程地址空间内为线程的堆栈保留区域.线程都有自己的堆栈,创建时,系统就保留一个堆栈空间区域,并将相 ...

  8. OpenCV学习笔记(十六)——CamShift研究 OpenCV学习笔记(十七)——运动分析和物体跟踪Video OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc

    OpenCV学习笔记(十六)--CamShift研究 CamShitf算法,即Continuously Apative Mean-Shift算法,基本思想就是对视频图像的多帧进行MeanShift运算 ...

  9. OpenCV学习笔记(十六):直方图均衡化:equalizeHist()

    OpenCV学习笔记(十六):直方图均匀化:equalizeHist() 参考博客: 直方图均衡化的数学原理 直方图匹配的数学原理 直方图均衡化广泛应用于图像增强中: 直方图均衡化处理的"中 ...

最新文章

  1. 软件工程作业----个人读后感
  2. n9009 Android5.0内核,三星N9009(Galaxy Note 3 电信版 Android 5.0)刷Recovery教程
  3. linux网卡IO,浅谈Linux 网络 I/O 模型简介(图文)
  4. 用于Activity管理和应用程序退出
  5. bert模型可以做文本主题识别吗_网民情绪识别TOP3分享----科技战疫·大数据公益挑战赛...
  6. java类中的static块_java类中static代码块的执行次数
  7. moongose模糊查询相关博客
  8. 测试如何进行有效的需求分析
  9. ICEM对装配体进行网格划分实例
  10. js里的一些even事件
  11. Android Studio 报错 : Cause : zip file is empty
  12. 安卓apk360加固
  13. 【hadoop】进阶篇一:MapReduce之Job的提交
  14. School Regional Team Contest, Saratov, 2011-F. Spiders-求树直径
  15. 小白兔写话_可爱的小白兔二年级写话
  16. pvid与access的关系_关于Trunk、Hybrid、Access、Tag、Untag、Pvid的关系
  17. 数据库表赋权给指定用户
  18. nginx容器配置https后访问有时显示连接被重置
  19. siesta在Linux运行,请教,为什么siesta编译中没报错,然而运行的时候跑不起来呢 - 第一原理 - 小木虫 - 学术 科研 互动社区...
  20. 深度学习-Relu层

热门文章

  1. Linux- 硬件查询——lspci/lsusb/lsblk/blkid/lscpu/hdparm/sdparm/smart/dmidecode
  2. 被骂了十年的国产软件,却成了世界之最...没想到架构这么牛
  3. 长风破浪会有时 直挂云帆济沧海
  4. 软考(16)-QOS
  5. 根本上解决Thinkbook 14p Gen2 ACH Linux睡眠或从Linux重启后SSD掉盘的问题
  6. 为什么工程师要了解业务?
  7. 进行性肌营养不良研究又有新的发现
  8. 简单记录绘制双坐标图表
  9. PHP菜鸟手记——如何解决无法装载动态链接库的问题
  10. 桥梁结构健康监测系统-桥梁健康监测方案介绍