当前位置:网站首页>一起学习SQL中各种join以及它们的区别
一起学习SQL中各种join以及它们的区别
2022-07-02 06:10:00 【江夏、】
作者的其他平台:
| CSDN:blog.csdn.net/qq_41153943
| 知乎: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
查询的结果数据如下:

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

2.LEFT JOIN
left join 也是日常开发中使用的比较多的联合查询方式之一了。同样还是先看例子再讨论结果,执行下述的语句:
SELECT * FROM user LEFT JOIN t_user ON user.username = t_user.username
查询的结果如下:

这时候如果将左表右表换一下结果是如何呢?
SELECT * FROM t_user LEFT JOIN user ON user.username = t_user.username

这时候可以总结使用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

即这里的查询结果是以右表的数据为准,右表的数据全部显示,左表则显示和右表交集部分的数据。可以用下图表示,查询的结果右表的所有值,左表中有匹配的则有值,不匹配的则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
查询结果如下:

再看union all:
SELECT username FROM user UNION all SELECT username FROM t_user
查询结果如下:

可以发现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
部分结果如下:

可以看到产生的结果集为两个表各自个数的乘积,通常在实际操作中要避免这种操作。
总结
以上就是sql语句中的一些连接查询以及它们之间的区别,另外还有一种full join 表示全连接,但是mysql中不支持,可以使用左连接和右连接的合集进行表示。full join 表示的是左表和右表的并集,但是对于没有匹配的记录,则会以null表示。
最后网上有张图能够很好的表示这几种连接的关系,如下图:

相关推荐
边栏推荐
- 链表(线性结构)
- I/o impressions from readers | prize collection winners list
- MUI底部导航的样式修改
- 借力 Google Cloud 基础设施和着陆区,构建企业级云原生卓越运营能力
- Google Play Academy 组队 PK 赛,正式开赛!
- Cglib代理-代码增强测试
- Leverage Google cloud infrastructure and landing area to build enterprise level cloud native excellent operation capability
- Deep learning classification network -- Network in network
- Picture clipping plug-in cropper js
- Frequently asked questions about jetpack compose and material you
猜你喜欢

Deep learning classification network -- Network in network

Google play academy team PK competition, official start!

Google Go to sea entrepreneurship accelerator registration countdown 3 days, entrepreneurs pass through the guide in advance collection!

Unity shader learning notes (3) URP rendering pipeline shaded PBR shader template (ASE optimized version)

深入学习JVM底层(四):类文件结构

Spark overview

Contest3147 - game 38 of 2021 Freshmen's personal training match_ E: Listen to songs and know music
![[C language] simple implementation of mine sweeping game](/img/f7/15d561b3c329847971cabd4708c851.png)
[C language] simple implementation of mine sweeping game

从设计交付到开发,轻松畅快高效率!

VRRP之监视上行链路
随机推荐
Error creating bean with name 'instanceoperatorclientimpl' defined in URL when Nacos starts
Ros2 --- lifecycle node summary
Web page user step-by-step operation guide plug-in driver js
Detailed notes of ES6
I/o multiplexing & event driven yyds dry inventory
BGP 路由優選規則和通告原則
ROS2----LifecycleNode生命周期节点总结
Detailed steps of JS foreground parsing of complex JSON data "case: I"
来自读者们的 I/O 观后感|有奖征集获奖名单
浅谈三点建议为所有已经毕业和终将毕业的同学
Google play academy team PK competition, official start!
WLAN相关知识点总结
Contest3147 - game 38 of 2021 Freshmen's personal training match_ G: Flower bed
LeetCode 39. 组合总和
Format check JS
谷歌出海创业加速器报名倒计时 3 天,创业人闯关指南提前收藏!
Shenji Bailian 3.53-kruskal
Redis key value database [primary]
Step by step | help you easily submit Google play data security form
Keepalived installation, use and quick start