专栏首页张俊红内连接的两种方式

内连接的两种方式

总第156篇/张俊红

在前面的文章中我们讲过两个概念,宽表和窄表,在现实业务中,数据库中很多表存储其实都是以窄表的形式来存储的,但是我们一般从数据库中获取信息的时候,都是需要同时从多个表中来获取信息,也就是需要将多个窄表先进行连接,然后再进行 select。连接方式主要有四种:左连接、右连接、内连接、外连接。默认是内连接(划重点,考试会考,但是貌似很多人不知道)。

今天我们不讲别的,只讲一下关于内连接的两种实现方式。

现在有两张表 ta 和 tb,ta 存储了学生的基础信息,tb 存储了学生的课程信息,现在想要看一下每个学生具体的课程信息,就需要把 ta 和 tb 进行连接,且只看那些报了课程的同学,有的学生可能没有报名课程。

ta 表信息如下:

stuid

name

classid

2019001

皇湘君

C001

2019002

张运馨

C002

2019003

周雄

tb 表信息如下:

classid

classname

teacher

C001

数据库的发展史

兴斌斌

C002

如何成为一名优秀的数据工程师

方忻忻

C003

数据分析师如何学习Sql取数

禄晨星

要想实现我们的需求,我们可以有两种实现形式: 方式一,直接来看代码:

select 
    ta.stuid as stuid
    ,ta.name as name
    ,tb.classname as classname
    ,tb.teacher as teacher
from ta,tb
where ta.classid = tb.classid

得到的结果如下:

stuid

name

classname

teacher

2019001

皇湘君

数据库的发展史

兴斌斌

2019002

张运馨

如何成为一名优秀的数据工程师

方忻忻

方式二,直接来看代码:

select 
    ta.stuid as stuid
    ,ta.name as name
    ,tb.classname as classname
    ,tb.teacher as teacher
from ta
inner join tb
    on ta.classid = tb.classid

方式一和方式得到的结果是一样的,既然结果是一样的,为啥要有两种方式来写呢?第一种书写方式是比较古老的一种写法,对于内连接现在比较常用的,也是比较推荐的写法是第二种方式。我们上面举的例子中只涉及了两个表,但在实际业务中往往不止连接两个表,这个时候用第一种方式不仅写起来会比较抓狂、别人看起来也比较乱,性能也会下降很多。而用第二种方式,可以一直 inner join,不管连接多少个表,看起来都不至于特别乱。如果你还在使用第一种写法,建议切换到第二种

你还可以看:

Sql 的执行顺序是怎样的?

Sql 实现数据透视表功能

讲讲你不知道的窗口函数

讲讲 group by 的plus版

介绍一下 information_schema 库

关于 Group 的另一个函数

本文分享自微信公众号 - 张俊红(zhangjunhong0428),作者:张俊红

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据结构-图

    图是不同于前面两种数据结构的另一种新的数据结构,线性表中元素与元素之间是被串起来的,每个数据元素只有一个直接前驱和一个直接后继,是一种一对一的数据结构;在树的结...

    张俊红
  • 机器学习优化算法(一)

    我们在前面说过机器学习中的损失函数,其实机器学习中的每一个模型都是在求损失函数的最优解,即让损失达到最小值/极小值,求解方式有多种,本篇讲讲其中两个基本的优化方...

    张俊红
  • 数据结构-栈和队列

    我们把类似于弹夹那种先进后出的数据结构称为栈,栈是限定仅在表尾进行插入和删除操作的线性表,我们把允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的...

    张俊红
  • Nature Reviews Neuroscience:脑网络组织的经济性

    大脑是昂贵的,相对于身体大小而言,大脑会产生高昂的物质和代谢成本,而脑网络可以通过改变组织形式来减少这些成本。但是,脑网络连接组也有很高的拓扑效率、鲁...

    用户1279583
  • Jmeter(三十八)while控制器实现ssh三次重连

    然而在实际测试中,不能确定我们的的机器能够正常连接。这里就要用到while循环设置重连,如下添加while控制器,写入循环语句。

    飞天小子
  • VLD:轻型伪3D病灶检测网络(MICCAI 2020)

    今天分享一篇发表在MICCAI 2020上的论文:Deep Volumetric Universal Lesion Detection Using Light-...

    Minerva
  • Kubernetes核心概念总结

      Master节点上面主要由四个模块组成:APIServer、scheduler、controller manager、etcd。

    用户1263954
  • Spring Boot:定制HTTP消息转换器

    接下来关于SpringBoot的一系列文章和例子,都来自《Spring Boot Cookbook》这本书,本文的主要内容是start.spring.io的使用...

    java爱好者
  • Spring Boot的自动配置、Command-line Runner

    接下来关于SpringBoot的一系列文章和例子,都来自《Spring Boot Cookbook》这本书,本文的主要内容是start.spring.io的使用...

    阿杜
  • 最详细的自定义Spring Boot Starter开发教程

    随着Spring的日渐臃肿,为了简化配置、开箱即用、快速集成,Spring Boot 横空出世。目前已经成为 Java 目前最火热的框架了。平常我们用Sprin...

    码农小胖哥

扫码关注云+社区

领取腾讯云代金券