用实例理解自连接

Posted xz-404

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用实例理解自连接相关的知识,希望对你有一定的参考价值。

两种情况:

1、根据条件自连接

2、无条件自连接 就是交叉连接,返回被连接的两个表所有数据行的笛卡尔积。

主要是第一种:

设计一张表:t_a

根据a的值自连接  语句:SELECT * FROM "t_a" ta,t_a tb where ta.a=tb.a

原本我由于没有考虑到有些a列里可以有重复值,因此以为数据行数和t_a表的行数相同。如以下这种情况:

①a列里没有重复值:

技术图片

结果:

技术图片

②a列里有重复值

技术图片

结果:共41条记录,太长,不全贴出来了。

技术图片

 

6*6+2*2+1*1=41

 

同理可以推出按照多个条件自连接的结果

如SELECT * FROM "t_a" ta,t_a tb where ta.a=tb.a and ta.b=tb.b的情况。这里情况应是9条,因为没有ab都是相同值的情况

技术图片

若是存在ab相同时比如表中数据如下

技术图片

 

,会出现3*3+2*2+4=17条结果

技术图片

同时自连接的作用可以参考别人的博客:https://blog.csdn.net/weiwanampdaixu/article/details/78292053

 

以上是关于用实例理解自连接的主要内容,如果未能解决你的问题,请参考以下文章

如何在codeigniter普通mysql和自定义pdo中运行并发数据库连接[重复]

Mysql自连接的一些用法

特定用例的自引用核心数据模型

使用自定义端口连接SQL Server 2008的方法

手把手写C++服务器(12):TCP自连接原理Python示例解决方案

excel中怎么实现字符+数字混合自增(非拖动)