mysql自连接查询速度_实例解析MySQL自连接查询

ca0f38d02ceb76572cc167a85e6d3aa8.png

自连接是指使用表的别名实现表与其自身连接的查询方法。一般情况下,在MySQL数据库中很多问题的解决,需要我们进行多表查询,将两表中某些数据联结,来得到我们所需的数据。但有些情况下,我们需要对一张表内的数据,进行一些对比,或者是比较,获得各列层次关系,通过一般的SQL写法,可能需要通过写多个子查询的方式才能解决。但是用MySQL自连接查询可以轻松解决,所以通俗来理解的话,MySQL自连接查询就是以类似多表对比的方式,实现对同一张表内数据进行复杂的关系表示或关系处理。

我们可以结合实际例子来看,加深我们对MySQL自连接查询的理解。

示例1:

这是一张成绩表score

c1923a310548b883a5ee38f9def51d9e.png

现在要查询001课程>= 002课程的学生的学号,这时就能用自连接查询。

SELECT a.学号,a.成绩 as score_001,b.成绩 as score_002

from score a ,score b

where a.学号=b.学号

and a.课程号 = 001

and b.课程号 = 002

and a.成绩>=b.成绩;

输出结果:

c1923a310548b883a5ee38f9def51d9e.png

结果只有003号学生满足条件,符合上表信息。

或许单一的例子不足以说明什么,我们再来看一个MySQL自连接查询的例子:

示例2:

成绩表score2

2c6e2632a5c203d7ff5706d50310ed7f.png

2a38fafcf19c3981ebca8154addab86f.png

使用SQL查询出所有至少连续3次出现的成绩

问题拆解:什么是连续3次出现。成绩表按学号顺序排列(如果不是,可以通过窗口函数排序等方式)所以每一个学号之间间隔都是1,a(004)=b(005)-1,b(005)=c(006)-1,abc3个学号就为连续学号。那么只要满足两个条件:

1.3个连续学号

2.对应成绩相等。

select a.成绩 as 答案

from score2 a,score2 b,score2 c

where a.学号 = b.学号-1

and b.学号 = c.学号-1

and a.成绩 = b.成绩

and b.成绩 = c.成绩;

输出结果:

32d5d03175637340fccdf84bb7867252.png

综合上面的两个例子,我们不难看出:自连接其实是一种特殊的内连接,它是指相互连接的表在物理上为同一张表,但可以在逻辑上分为两张表。也就是说在一个连接查询中,涉及到的两个表本质上其实是同一个表,但为了区别该表的每一次出现,需要为表定义一个别名,这种表连接自身别名的表的连接我们就称之为自连接查询。

Mysql自连接查询是MySQL中连接查询最主要的查询方式,主要包括内连接、外连接和交叉连接等。本文我们所讲的自连接查询也是其中的内连接的一种特殊方式,想要掌握各种MySQL连接查询,可以观看本站的MySQL教程,学习新的知识。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值