前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >内连接的两种方式

内连接的两种方式

作者头像
张俊红
发布2019-07-24 15:36:45
9620
发布2019-07-24 15:36:45
举报
文章被收录于专栏:张俊红
总第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取数

禄晨星

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

代码语言:javascript
复制
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

张运馨

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

方忻忻

方式二,直接来看代码:

代码语言:javascript
复制
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 的另一个函数

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 俊红的数据分析之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总第156篇/张俊红
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档