Mysql常用sql语句(17)- left / right join 外连接

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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>LEFTOUTERJOIN<表2><ON子句>

SELECT<字段名>FROM<表1>RIGHTOUTERJOIN<表2><ON子句>

语法格式说明

  • outer可以省略,只写 leftjoinrightjoin
  • on是设置左连接的连接条件,不能省略

 

先看看dept、emp表有什么数据


dept表

image.png

left join 的栗子


SQL分析

  • 主表:emp
  • 从表:dept
  • 根据 emp 表的员工 dept_id 和 dept 表的部门 id 进行匹配
  • 因为 emp 是主表,所以最后两条记录的 dept_id 在 dept 表没有匹配到 id,但是仍然会查询出来,然后将右表的数据置为NULL

select*from emp as a leftjoin dept as b on a.dept_id = b.id;

image.png


left join + where 的栗子


SQL分析

  • 主表:emp
  • 从表:dept
  • 若不看where,前面的查询结果和上面的栗子一样
  • where的作用:将上面的查询结果集进行过滤,最终只返回 id 是 NULL的记录

select*from emp as a leftjoin dept as b on a.dept_id = b.id where b.id isnull;

image.png

知识点

  • 如果外连接中有 where 关键字,on是为了关联两张表,而where是将外连接查询的结果集进行条件筛选
  • 所以执行顺序是:on  -》 join -》 where
  • on:筛选两张表可以进行连接数据
  • join:将筛选后的数据连接起来
  • where:将连接后的数据结果集再次条件筛选

 

right join 的栗子


select*from emp as a rightjoin dept as b on a.dept_id = b.id;

image.png

SQL分析

  • 主表:dept
  • 从表:emp
  • 根据 dept 表的 id 和 emp 表的 dept_id 进行匹配
  • 因为 dept 是主表,所以最后两条记录的 id 在 emp 表没有匹配到 dept_id,但是仍然会查询出来,然后将左表的数据置为NULL
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17小时前
|
SQL 关系型数据库 MySQL
【MySQL系列笔记】常用SQL
常用SQL分为三种类型,分别为DDL,DML和DQL;这三种类型的SQL语句分别用于管理数据库结构、操作数据、以及查询数据,是数据库操作中最常用的语句类型。 在后面学习的多表联查中,SQL是分析业务后业务后能否实现的基础,以及后面如何书写动态SQL,以及完成级联查询的关键。
203 6
|
17小时前
|
SQL 关系型数据库 MySQL
【MySQL-4】简述SQLの通用语法及4种基本语句介绍(DDL/DML/DQL/DCL)
【MySQL-4】简述SQLの通用语法及4种基本语句介绍(DDL/DML/DQL/DCL)
|
17小时前
|
SQL 存储 关系型数据库
【MySQL系列笔记】SQL优化
SQL优化是通过调整数据库查询、索引、表结构和配置参数等方式,提高SQL查询性能和效率的过程。它旨在减少查询执行时间、减少系统资源消耗,从而提升数据库系统整体性能。优化方法包括索引优化、查询重写、表分区、适当选择和调整数据库引擎等。
230 3
|
17小时前
|
SQL 关系型数据库 MySQL
MySQL SQL error: #1271 - Illegal mix of collations for operation ‘UNION‘
MySQL SQL error: #1271 - Illegal mix of collations for operation ‘UNION‘
|
17小时前
|
SQL 关系型数据库 MySQL
【MySQL】:探秘主流关系型数据库管理系统及SQL语言
【MySQL】:探秘主流关系型数据库管理系统及SQL语言
27 0
|
17小时前
|
SQL 关系型数据库 MySQL
【MySQL】SQL优化
【MySQL】SQL优化
|
17小时前
|
SQL 存储 关系型数据库
MySQL SQL优化
MySQL SQL优化
16 0
|
17小时前
|
SQL 关系型数据库 MySQL
快速学习MySQL SQL语句
快速学习MySQL SQL语句
|
17小时前
|
SQL Oracle 关系型数据库
常用数据库的分页语句(mySQL、oracle、PostgreSQL、SQL Server)
常用数据库的分页语句(mySQL、oracle、PostgreSQL、SQL Server)
|
17小时前
|
SQL NoSQL 关系型数据库
【后端面经】【数据库与MySQL】SQL优化:如何发现SQL中的问题?-02
【4月更文挑战第13天】该文介绍了几个数据库查询优化技巧。首先,创建覆盖索引如&lt;A,B,C&gt;能加速`select A,B,C from student where A=? and B=? and C=?`的执行。其次,为常用于排序的列建立索引,如在`id,update_time`上建索引,可避免数据排序,显著提高查询速度。优化`count(*)`可通过预估值或使用Redis记录总数,但需注意数据一致性问题。使用索引提示如FORCE INDEX可强制使用特定索引,但应谨慎。将`having`的非聚合条件移到`where`里可提升效率。最后,处理深度分页时
23 3