Mysql常用sql语句(17)- left/right join 外连接
测试必备的Mysql常用sql语句系列
https://www.cnblogs.com/poloyy/category/1683347.html
前言
- 外连接分为两种:left join、right join
- 外连接显示的内容要比内连接多,是对内连接的补充
- left join的主表是左表,从表是右表
- right join的主表是右表,从表是左表
- 外连接会返回主表的所有数据,无论在从表是否有与之匹配的数据,若从表没有匹配的数据则默认为空值(NULL)
- 外连接只返回从表匹配上的数据
- 重点:在使用外连接时,要分清查询的结果,是需要显示左表的全部记录,还是右表的全部记录
left join、right join 的语法格式
SELECT <字段名> FROM <表1> LEFT OUTER JOIN <表2> <ON子句>
SELECT <字段名> FROM <表1> RIGHT OUTER JOIN <表2> <ON子句>
语法格式说明
- outer可以省略,只写 left join 、 right join
- on是设置左连接的连接条件,不能省略
先看看dept、emp表有什么数据
dept表

emp表

left join 的栗子
SQL分析
- 主表:emp
- 从表:dept
- 根据 emp 表的员工 dept_id 和 dept 表的部门 id 进行匹配
- 因为 emp 是主表,所以最后两条记录的 dept_id 在 dept 表没有匹配到 id,但是仍然会查询出来,然后将右表的数据置为NULL
select * from emp as a left join dept as b on a.dept_id = b.id;

left join + where 的栗子
SQL分析
- 主表:emp
- 从表:dept
- 若不看where,前面的查询结果和上面的栗子一样
- where的作用:将上面的查询结果集进行过滤,最终只返回 id 是 NULL的记录
select * from emp as a left join dept as b on a.dept_id = b.id where b.id is null;

知识点
- 如果外连接中有 where 关键字,on是为了关联两张表,而where是将外连接查询的结果集进行条件筛选
- 所以执行顺序是:on -》 join -》 where
- on:筛选两张表可以进行连接数据
- join:将筛选后的数据连接起来
- where:将连接后的数据结果集再次条件筛选
right join 的栗子
select * from emp as a right join dept as b on a.dept_id = b.id;

SQL分析
- 主表:dept
- 从表:emp
- 根据 dept 表的 id 和 emp 表的 dept_id 进行匹配
- 因为 dept 是主表,所以最后两条记录的 id 在 emp 表没有匹配到 dept_id,但是仍然会查询出来,然后将左表的数据置为NULL
Mysql常用sql语句(17)- left/right join 外连接的更多相关文章
- Mysql常用sql语句(18)- union 全连接
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 其实Mysql并没有全连接,Oracle才有全连 ...
- Mysql常用sql语句(16)- inner join 内连接
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 利用条件表达式来消除交叉连接(cross joi ...
- Mysql常用sql语句(15)- cross join 交叉连接
测试必备的Mysql常用sql语句 https://www.cnblogs.com/poloyy/category/1683347.html 前言 交叉连接就是求多表之间的笛卡尔积 讲道理..这个我都 ...
- Mysql 常用 SQL 语句集锦
Mysql 常用 SQL 语句集锦 基础篇 //查询时间,友好提示 $sql = "select date_format(create_time, '%Y-%m-%d') as day fr ...
- Mysql 常用 SQL 语句集锦 转载(https://gold.xitu.io/post/584e7b298d6d81005456eb53)
Mysql 常用 SQL 语句集锦 基础篇 //查询时间,友好提示 $sql = "select date_format(create_time, '%Y-%m-%d') as day fr ...
- mysql 常用 sql 语句 - 快速查询
Mysql 常用 sql 语句 - 快速查询 1.mysql 基础 1.1 mysql 交互 1.1.1 mysql 连接 mysql.exe -hPup ...
- php面试专题---MySQL常用SQL语句优化
php面试专题---MySQL常用SQL语句优化 一.总结 一句话总结: 原理,万变不离其宗:其实SQL语句优化的过程中,无非就是对mysql的执行计划理解,以及B+树索引的理解,其实只要我们理解执行 ...
- Mysql常用sql语句(14)- 多表查询
测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 ...
- Mysql常用sql语句(19)- in / exists 子查询
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 子查询在我们查询方法中是比较常用的,通过子查询可 ...
随机推荐
- Tensorflow 模型线上部署
获取源码,请移步笔者的github: tensorflow-serving-tutorial 由于python的灵活性和完备的生态库,使得其成为实现.验证ML算法的不二之选.但是工业界要将模型部署到生 ...
- this 关键字的用法
用法一 this代表当前类的实例对象 class Program { static void Main(string[] args) { tr ...
- 纯css画三角形
纯css画三角形与border元素相关 设置border的属性 width: 100px; height: 100px; border-style: solid; border-width: 100p ...
- ApiPost如何在预执行脚本里添加请求参数?
ApiPost V3引入了预执行脚本和后执行脚本的概念,详细可以通过链接:<ApiPost的预执行脚本和后执行脚本>了解学习更多.本文主要介绍如何在预执行脚本里增加请求参数. 使用场景 我 ...
- 【Linux题目】第七关
1. 如果想修改开机内核参数,应该修改哪个文件? A. /dev/sda1 B. /etc/fstab 磁盘自动挂载的文件 C. /boot/grub/grub.conf D. /etc/rc.loc ...
- 什么是最好的在线UML软件工具?
在线UML软件工具允许您创建UML图表,而UML绘图工具可帮助维护您的建模工件并促进不同图表中元素的可重用性.一些UML建模工具还提供复杂的建模功能,例如模型转换,报告,代码工程等. 如果您正在寻找U ...
- 工具 在 Nuget 发布自己的包
MSDN : https://docs.microsoft.com/zh-cn/nuget/quickstart/create-and-publish-a-package-using-visual-s ...
- 原生JS设计轮播图
一.效果预览: 由于只能上传2M以下的图片,这里只截取了自动切换的效果: 二.编写语言 HTML.CSS.原生JS 三.编写思路 (一)HTML部分 1..slide意为滑槽,里面存放所有图片: 2. ...
- Computational Geometry
矩形重叠 看过某司一道笔试题:给\(n\)个矩形左下和右上坐标(不能斜放),求重叠最多处矩形个数. 这道题本身不难:可以遍历所有矩形边界组成的点,计算该点被多少矩形包围,从而选出最大值. 由此引申出一 ...
- 图论--最小生成树--Kruscal 模板
#include<iostream> #include<queue> #include<algorithm> #include<set> #includ ...