sql关联表的问题

windxx 2009-03-22 10:07:20
我创建了2个表,student和score;
student的主键为sno;
score包含外键sno指向student的sno,还有一个AVGdegree的属性
如果我想查找某个student表上的sno在score表上对应的AVGdegree属性值,在写sql的时候我输入了:
SELECT student.sno,score.AVGdegree
FROM student,score
WHERE student.sno = score.sno

结果就显示出来
但是我想问下,这样建立关系之后有什么意义(就是开始已经建立了外键关系)?最后我还是要用WHERE student.sno = score.sno语句,在命令上也没有什么节省,难道这个关系的建立就是为了防止score中添加不存在的sno的错误么?请指教,我是刚学数据库,用的是sql server 2005,提问应该很可笑,但请不吝赐教,非常感谢!
...全文
161 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
deng520159 2009-03-22
  • 打赏
  • 举报
回复
你个这就是没有意义?SELECT student.sno,score.AVGdegree
FROM student,score
WHERE student.sno = score.sno 中,student ,score 先做了一个笛卡尔积,再对笛卡尔积做了一个选择,执行速度非常慢,应该做做优化吧,
from student left outer join score on student.sno=score.sno 左外联记得可以提高速度,也许还有更好方法,最好参看一下查询优化,
阿达King哥 2009-03-22
  • 打赏
  • 举报
回复
数据库表之间的关系是为了约束数据之间的联系。跟写SQL没关系。
数据库原理再读读吧。
不过,可以理解,刚开始是这样的。很多范式,在现实中都不一定有用,要靠经验的。
deng520159 2009-03-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 windxx 的回复:]
是先做了笛卡尔积,请问你的意思是不是如果建立了连接就可以进行上述“from student left outer join score on student.sno=score.sno 外联积”了?如果没有连接关系就不能进行这样的操作?多谢指教
[/Quote]
关于关系数据库的模式你应该学点,数据库设计应该达到第三范式!
sunny906 2009-03-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 windxx 的帖子:]
我创建了2个表,student和score;
student的主键为sno;
score包含外键sno指向student的sno,还有一个AVGdegree的属性
[/Quote]
当然有意义!
你的score表中应该不止sno这个外键,还应有cno(课程编号)...
建议把你SQL语句改为:
SELECT stu.sno,sc.AVGdegree
FROM student stu inner join score sc
on sc.sno = stu.sno
或者用1楼的方法
windxx 2009-03-22
  • 打赏
  • 举报
回复
是先做了笛卡尔积,请问你的意思是不是如果建立了连接就可以进行上述“from student left outer join score on student.sno=score.sno 外联积”了?如果没有连接关系就不能进行这样的操作?多谢指教

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧