关于SQL的自然连接

cirplan 发布于 2013/06/02 09:59
阅读 1K+
收藏 0

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

首先有两张表:

然后执行sql:

SELECT NAME, CLASSNAME FROM D_STUDENT2, D_SUBJECT2

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

加载中
0
王瑞平
王瑞平

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

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

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

cirplan
cirplan
回复 @王瑞平 : 不是的呢,我查过了,上面要写成SELECT * FROM D_STUDENT2 NATURAL JOIN D_SUBJECT2这样才是自然连接。。和笛卡尔积是有分别的
王瑞平
王瑞平
@cirplan 是的
cirplan
cirplan
那就是说自然连接==笛卡尔积??
0
几点人
几点人

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

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

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