测试必备的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 外连接的更多相关文章

  1. Mysql常用sql语句(18)- union 全连接

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 其实Mysql并没有全连接,Oracle才有全连 ...

  2. Mysql常用sql语句(16)- inner join 内连接

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 利用条件表达式来消除交叉连接(cross joi ...

  3. Mysql常用sql语句(15)- cross join 交叉连接

    测试必备的Mysql常用sql语句 https://www.cnblogs.com/poloyy/category/1683347.html 前言 交叉连接就是求多表之间的笛卡尔积 讲道理..这个我都 ...

  4. Mysql 常用 SQL 语句集锦

    Mysql 常用 SQL 语句集锦 基础篇 //查询时间,友好提示 $sql = "select date_format(create_time, '%Y-%m-%d') as day fr ...

  5. Mysql 常用 SQL 语句集锦 转载(https://gold.xitu.io/post/584e7b298d6d81005456eb53)

    Mysql 常用 SQL 语句集锦 基础篇 //查询时间,友好提示 $sql = "select date_format(create_time, '%Y-%m-%d') as day fr ...

  6. mysql 常用 sql 语句 - 快速查询

    Mysql 常用 sql 语句 - 快速查询 1.mysql 基础 1.1 mysql 交互         1.1.1 mysql 连接             mysql.exe -hPup    ...

  7. php面试专题---MySQL常用SQL语句优化

    php面试专题---MySQL常用SQL语句优化 一.总结 一句话总结: 原理,万变不离其宗:其实SQL语句优化的过程中,无非就是对mysql的执行计划理解,以及B+树索引的理解,其实只要我们理解执行 ...

  8. Mysql常用sql语句(14)- 多表查询

    测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 ...

  9. Mysql常用sql语句(19)- in / exists 子查询

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 子查询在我们查询方法中是比较常用的,通过子查询可 ...

随机推荐

  1. Spring Cloud 系列之 Gateway 服务网关(二)

    本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Gateway 服务网关(一) 本篇文章讲解 Gateway 网关的多种路由规则.动态路由规则(配合服务发现的路由规则 ...

  2. Extended Traffic LightOJ - 1074 (经典SPFA问题)

    题目大意:每一个城市都有一定的繁荣度,然后给出m条有向边i->j,定义这条边的权值为pow(arr[j]-arr[i],3),然后给你q个询问,每个询问输入一个x. 然后问你点1到x的距离,如果 ...

  3. [bilibili服]明日方舟游戏时长限制破解

    bilibili服 明日方舟 游戏时长如何破解 众所周知,明日方舟游戏对未成年人实行了游戏时长限制,小编也感到十分惊讶--咳咳--言归正传--之前在网上看到过有说可以通过进入战斗之后断网来实现延长时间 ...

  4. 批量重命名脚本(Python)

    便携的批处理脚本,代码如下: import os import sys def rename(): path=input("请输入路径(例如D:/picture):") name= ...

  5. 理解java容器底层原理--手动实现HashSet

    HashSet的底层其实就是HashMap,换句话说HashSet就是简化版的HashMap. 直接上代码: package com.xzlf.collection2; import java.uti ...

  6. 测试Thread中的常用方法

    package com.yhqtv.java; /* *测试Thread中的常用方法: * 1.start():启动当前线程:调用当前线程的run() * 2.run():通常需要重写Thread类的 ...

  7. 22.Java面试学习平台-整合OSS对象存储

    SpringCloud实战项目全套学习教程连载中 PassJava 学习教程 简介 PassJava-Learning项目是PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. ...

  8. C# 基础知识系列- 14 IO篇之入门IO

    0. 前言 在之前的章节中,大致介绍了C#中的一些基本概念.这篇我们将介绍一下C#的I/O操作,这将也是一个小连续剧.这是第一集,我们先来简单了解一下C#中的I/O框架. 1. 什么是I/O I/O ...

  9. chcp437 转换英语,在西班牙语系统中无效

    https://social.technet.microsoft.com/Forums/en-US/9c772011-5094-4df0-bf73-7140bf91673b/chcp-command- ...

  10. [Qt] 打开Diskmgmt

    QProcess mOpenDiskMgmt; QString program = "cmd"; QStringList arguments; arguments << ...