SQL中自连接的实例分析

分类:编程技术 时间:2024-02-20 15:25 浏览:0 评论:0
0
本文与大家分享一个SQL中自连接的实例分析。小编觉得还是比较实用的,所以分享给大家,作为参考。下面就跟随小编来看看吧。

什么是自联接?

那么我们如何理解自联接?

说白了,自联接其实就是两张表完全相同的结构和数据内容。 ,在做数据处理的时候,我们通常会单独重命名,以区分它们(言外之意是:不重命名就不行,否则数据库就不知道他们是谁),然后关联起来。

我们来看看他们是如何进行自连接的

示例表格内容

下面的表格 Student ,表格结构数据如下:

我们在进行自连接时,不添加任何过滤条件。具体如下:

SELECT s1.Sname AS Sname1, s2.Sname AS Sname2 FROM Student s2, Student s1

结果如下:

这个结果看起来很熟悉,好像在哪里见过。没错,这实际上就是我们的数学排列。

总体排列为紫色:

首先,name1中的张三与name2中的张三、李四、王五组合在一起。前3条记录

然后name1中的4条记录与name2中的3个名字合并,形成中间3条记录

name1中的后3条记录分别与张三合并name2中的 、李四、王五构成最后3条记录

这样就得到了上面的结果。

但我们大多数常见的自我联系实际上都是有条件的。不管什么条件,其实都是根据上面的结果进行过滤的。

比如我们要查找一一对应的数据,可以这样写:

SELECT s1.Sname AS Sname1, s2.Sname AS Sname2 FROM Student s2,学生s1 WHERE s1.Sname =s2.Sname

得到的结果是一一对应的b两个自连接表之间:

这就是自连接的本质。张三已经把自己和自己关联起来了,那你觉得这是什么样的关联?

但是我们工作,使用自连接的目的并不是为了和自己关联,更多的时候是为了和自己结合表中的其他项目,如下所示:

SELECT s1.Sname AS Sname1, s2.Sname AS Sname2 FROM Student s2,Student s1 WHERE s1.Sname<>s2.Sname

结果如下:

另外,如果我们想进一步排除重复的数据行,比如张三,李四和李四,张三,我们默认这两行作为重复数据(虽然顺序不同,但从数学集合的角度来说,这两行可以看做是同一个结果集),只想保留一种类型,可以这样做: < /p>

SELECT s1.Sname AS Sname1, s2.Sname AS Sname2 FROM Student s2,Student s1 WHERE s1.Sname>s2.Sname

获取结果如下:

在此这样,我们就得到了 3 行“非重复”数据。这与数学组合相同。

实践中的自连接

上面我们给出了一个自连接来处理连续性问题。下面我们再举一个使用自连接删除重复数据的例子:

表结构示例

有一个Student表,其表结构如下和数据:

我们要删除表,对于表中重复的数据行这个SQL该怎么写?

我们分析了一下,发现这个表没有主键 ID。为了区分它们,我需要为其添加一个虚拟列主键。怎么做呢?可以这样写:

SELECT IDENTITY(INT) ID, Sname, Score INTO Student_Tmp FROM Student

这里我们使用自增函数IDENTITY()生成类似于自增主键的ID,并将结果插入到Student_Tmp中,其中Student_Tmp中的具体内容如下:

< p>

然后,我们可以通过保留最大值或最小值来删除重复项,如下:

DELETE FROM Student_Tmp WHERE Student_Tmp.ID< ( SELECT Max(s2 .ID) FROM Student_Tmp s2 WHERE Student_Tmp.Sname=s2.Sname AND St​​udent_Tmp.Score=s2.Score);

这样我们就可以删除ID为3和4的列,并查询Student_Tmp中的列内容如下:

注意:由于SQL Server的一些限制,我们无法对源表执行上述操作。为了向大家展示自加入的作用,我们做了一定的调整。

如果要在SQL Server中删除原表中的重复行,可以使用以下方法:

SELECT DISTINCT * INTO Student_Tmp FROM Student TRUNCATE TABLE Student INSERT INTO Student SELECT * FROM Student_Tmp DROP TABLE Student_Tmp

通过上面的方法,我们使用自连接删除Student_Tmp中的重复行。

感谢您的阅读!这篇关于《SQL自连接示例分析》的文章就分享到这里。希望以上内容能够给大家带来一些帮助,让大家能够学到更多的知识。如果您觉得文章不错,可以分享给其他人。让更多人看到!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > SQL中自连接的实例分析

用户评论