from 两个表,没有join。是两表自然连接!!!

本文介绍了自然连接的概念,通过实例解释了如何在SQL中进行自然连接,并探讨了在自然连接基础上进行数据比较和删除的操作。内容包括从两个表进行自然连接后的结果分析,以及针对特定条件删除重复电子邮箱的题目解析。

自然连接

SELECT music.
FROM music,
follow;
*

对于下面两个表,结果会是怎么样的呢?该两表具体是怎么自然连接呢?
在这里插入图片描述

因为select的是表1music,所以出来的结果全部是从表1 music中获得的数据。结果共有4*3=12 行。表1 的id 17 要乘 表2的所有行(共3行),所以表1的id 17需要出现3次;以此类推;如果select的是表2 follow,所以出来的结果全部是从表2 follow中获得的数据。结果也是12行,不过是表2的user_id 1要乘 表1的所有行(共4行),所以表2的user_id 1需要出现4次;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

自然连接后,比大小

SELECT follow.
FROM music.music,
music.follow
where user_id<id;
*

对于下面两个表,结果会是怎么样的呢?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题目:删除重复的电子邮箱(自然连接)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当Id =1 时,与Id (1,2,3)相比,1没有比任何一个大,所以没有数据;
当Id =2 时,与Id (1,2,3)相比,2只比1大,所以只有一行数据;
当Id =3 时,与Id (1,2,3)相比,3比1,2大,所以有两行数据;

在这里插入图片描述
结果,再把select 改成delete
因为有立别名 p1,所以delete p1 from 表
在这里插入图片描述

在SQL中使用JOIN连接两个时,连接后的记录数不一定等于两个的记录数。JOIN操作的类型和连接条件决定了最终结果集的行数。 ### 内连接(INNER JOIN) INNER JOIN只返回两个中能够匹配的记录,因此连接后的记录数通常小于或等于两个记录数的交集。如果连接字段中存在重复值,则可能导致结果集行数大于两个的交集记录数。例如,如果左中的某条记录在右中有多个匹配项,则会生成多条记录[^1]。示例: ```sql SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id; ``` ### 左连接(LEFT JOIN) LEFT JOIN返回左中的所有记录,并匹配右中符合条件的记录。如果右没有匹配项,则右字段的值为NULL。因此,LEFT JOIN的结果集行数通常等于左的记录数,除非连接条件中存在多个匹配项,从而导致行数增加[^3]。示例: ```sql SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id; ``` ### 右连接(RIGHT JOIN) RIGHT JOIN与LEFT JOIN类似,但返回右的所有记录,并匹配左中符合条件的记录。如果左没有匹配项,则左字段的值为NULL。因此,RIGHT JOIN的结果集行数通常等于右的记录数,也可能因多个匹配项而增加[^1]。示例: ```sql SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.id; ``` ### 全连接(FULL JOIN) FULL JOIN返回两个中所有能够匹配的记录,以及无法匹配的记录。因此,结果集的行数通常是两个记录数的总和,减去重复匹配的记录数。如果两个中存在大量无法匹配的记录,结果集可能会显著大于单个的记录数[^1]。示例: ```sql SELECT * FROM table1 FULL JOIN table2 ON table1.id = table2.id; ``` ### 总结 JOIN操作后的记录数取决于连接类型和连接条件。INNER JOIN仅返回匹配的记录,LEFT JOIN和RIGHT JOIN分别保留左或右的所有记录,而FULL JOIN保留两个的所有记录。因此,记录数可能小于、等于或大于原始的记录数,具体取决于数据的匹配情况[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值