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 Student_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自连接示例分析》的文章就分享到这里。希望以上内容能够给大家带来一些帮助,让大家能够学到更多的知识。如果您觉得文章不错,可以分享给其他人。让更多人看到!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > SQL中自连接的实例分析