码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 一起学习SQL中各种join以及它们的区别


    作者的其他平台:

    | CSDN:blog.csdn.net/qq_41153943

    | 掘金:juejin.cn/user/651387…

    | 知乎:www.zhihu.com/people/1024…

    | GitHub:github.com/JiangXia-10…

    本文一共2215字,预计阅读610分钟‍

    前言

    我们在写sql语句的时候,最痛苦的就是涉及到多张表的联合查询,尤其是各种表的各种链接,什么inner join、left join、right join、union、union all,一看到这个也许就会犯迷糊。

    今天这篇文章就好好学习整理下,这些各种的join它们到底是啥意思,之间有什么区别。

    正文

    首先假设我们有两张表。Table user 是左边的表。Table t_user 是右边的表。其各有一定的记录,其中有两条记录username是相同的,如下所示:让我们看看不同JOIN的使用具体有什么不同:

    user表:

    图片

    t_user表:

    图片

    1.INNER JOIN

    先来看看inner join,这个也是使用的比较多的,我们执行下面的语句,将左表和右表使用inner join进行联合查询:

    SELECT * FROM user INNER JOIN t_user ON user.username = t_user.username
    
    
    • 1
    • 2

    查询的结果数据如下:

    图片

    可以发现查询的结果是左表和右表关联字段相同的交集。即查询结果为下图重合部分的数据。

    图片

    2.LEFT JOIN

    left join 也是日常开发中使用的比较多的联合查询方式之一了。同样还是先看例子再讨论结果,执行下述的语句:

    SELECT * FROM user LEFT JOIN t_user ON user.username = t_user.username
    
    
    • 1
    • 2

    查询的结果如下:

    图片

    这时候如果将左表右表换一下结果是如何呢?

    SELECT * FROM t_user LEFT JOIN user ON user.username = t_user.username
    
    
    • 1
    • 2

    图片

    这时候可以总结使用left join查询的结果就是以左表为准,左表的数据全部查询,而右表的数据则只显示匹配的数据,不匹配的数据为null。这里是左.username=右.username,所以这里显示的右表的数据是右表中username和左表中username相等的数据,不相等的部分的右表则为空。可以用下图表示,查询的结果就是红色标记的阴影部分,即左表的所有数据和右表中和左表重合部分的数据。

    图片

    3.RIGHT JOIN

    其实right join 和left join很像,查询的结果是相反的。

    执行下面的语句:

    SELECT * FROM user RIGHT JOIN t_user ON user.username = t_user.username
    
    
    • 1
    • 2

    图片

    即这里的查询结果是以右表的数据为准,右表的数据全部显示,左表则显示和右表交集部分的数据。可以用下图表示,查询的结果右表的所有值,左表中有匹配的则有值,不匹配的则null表示,和left join 相反!

    图片

    4.UNION 与 UNION ALL

    UNION 操作符用于合并两个或多个 SELECT 语句的结果集。但是,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。UNION 只选取记录,而UNION ALL会列出所有记录。

    先看union:

    SELECT username FROM user UNION SELECT username FROM t_user
    
    
    • 1
    • 2

    查询结果如下:

    图片

    再看union all:

    SELECT username FROM user UNION all SELECT username FROM t_user
    
    
    • 1
    • 2

    查询结果如下:

    图片

    可以发现union和union all相比,union少了两条数据,就是user表和t_user表重复的数据,所以union选取的记录会进行筛选,删除重复的数据,而union all则会选取所有的数据。

    union可以表示如下:

    图片

    union all 表示如下:

    图片

    5.CROSS JOIN

    cross join即交叉连接,又称笛卡尔连接(cartersian join)或叉乘(product),如果A和B是两个集合,它们的交叉连接就标记为:A*B,比如执行下述语句:

    SELECT * FROM user a CROSS JOIN t_user b
    
    
    • 1
    • 2

    部分结果如下:

    图片

    可以看到产生的结果集为两个表各自个数的乘积,通常在实际操作中要避免这种操作。

    总结

    以上就是sql语句中的一些连接查询以及它们之间的区别,另外还有一种full join 表示全连接,但是mysql中不支持,可以使用左连接和右连接的合集进行表示。full join 表示的是左表和右表的并集,但是对于没有匹配的记录,则会以null表示。

    最后网上有张图能够很好的表示这几种连接的关系,如下图:

    图片

    相关推荐

    • Spring注解(三):@scope设置组件作用域

    • Spring常用注解大全,值得你的收藏!!!

    • Spring注解(七):使用@Value对Bean进行属性赋值

    • SpringBoot开发Restful风格的接口实现CRUD功能

    • Spring注解(六):Bean的生命周期中自定义初始化和销毁方法的四种方式

    • 介绍两款开发效率提升(摸鱼)神器:代码自动生成器

  • 相关阅读:
    leetcode:69. x 的平方根
    springSecurity(二):实现登入获取token与解析token
    10年阿里人告诉你:秒杀系统设计就该这么玩
    解释一下Kubernetes Minikube是什么,以及如何在本地运行一个Minikube集群
    java计算机毕业设计菲特尼斯健身管理系统设计与实现MyBatis+系统+LW文档+源码+调试部署
    Modeling Irregular Time Series with Continuous Recurrent Units(ICML2022)
    软件测试/测试开发丨​利用人工智能ChatGPT批量生成测试数据
    【RTOS训练营】设备子系统、晚课学员提问
    方圆的秒杀系统优化方案实战,(十)Kafka实现异步削峰
    java毕业设计大学生入学审核系统mybatis+源码+调试部署+系统+数据库+lw
  • 原文地址:https://blog.csdn.net/qq_41153943/article/details/125565202
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号