3
回答
关于SQL的自然连接
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

在学习SQL,关于自然连接的问题想不通啊!!

首先有两张表:

然后执行sql:

SELECT NAME, CLASSNAME FROM D_STUDENT2, D_SUBJECT2

结果是
按道理不是
的么?????不解

举报
cirplan
发帖于5年前 3回/1K+阅
共有3个答案 最后回答: 5年前

这是笛卡尔积,是乘的结果

要得到下边结果要加where D_STUDENT2.CLASSID=D_SUBJECT2.CLASSID

看看差别就知道,不相等的也弄进来了

--- 共有 3 条评论 ---
cirplan回复 @王瑞平 : 不是的呢,我查过了,上面要写成SELECT * FROM D_STUDENT2 NATURAL JOIN D_SUBJECT2这样才是自然连接。。和笛卡尔积是有分别的 5年前 回复
王瑞平@cirplan 是的 5年前 回复
cirplan那就是说自然连接==笛卡尔积?? 5年前 回复

SQL 返回的结果显然是对的,是四行记录,如果你想得到两行结果,请更改SQL为:

SELECT NAME, CLASSNAMEFROMD_STUDENT2 a, D_SUBJECT2 b where a.classid=b.classid

--- 共有 1 条评论 ---
cirplan 5年前 回复
2,3 这只是两个表中各自一个字段的值。就算你的值是身份证,对于值是同样的身份证的,数据库它也不知道你这是什么。数据库只是替你存储数据而已,它没有原生的对数据的自动分析判断功能。所以对你那个SQL语句,它看不出数据之间有何关联,只能给你列出所有可能的组合情况。要想达到你下面期望的结果,必须由你指定它们之间的关系,这也是你作为人对电脑这个工具应该做的事情。“SELECT NAME, CLASSNAME FROM D_STUDENT2, D_SUBJECT2 where D_STUDENT2.CLASSID=D_SUBJECT2.CLASSID”
--- 共有 1 条评论 ---
cirplan自然连接是可以默认匹配相同属性的哦 5年前 回复
顶部