在于关系运算中的自然连接

nofarewell 2008-01-05 09:37:23
书里是这样的定义的:
自然连接是一种特殊的等值连接,它要求关系中进行比较的两个分量必须是相同的属性组,并且在结果中将重复属性列去掉。
有两点不明白:
1,既然是等值连接,以两个关系连接为例,每个关第中取哪个属性与另一个关系中的哪个属性进行等值比较?
2,连接后要去掉重复的属性列,去掉的是原来哪个关系的属性列?
也许是一时脑子糊了,在这里卡住,请高手解救,有个具普遍性的自然连接例子就列好了 谢谢
...全文
2171 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qizhengsheng 2008-12-17
  • 打赏
  • 举报
回复
dawugui就是好
Jeff Xiong 2008-12-17
  • 打赏
  • 举报
回复
自然连接是在等值连接的基础上实现的.可以看下面的帖子.
http://topic.csdn.net/u/20070905/22/208d3ca9-8ca4-41d3-8430-2512f02a3918.html
timbear 2008-12-17
  • 打赏
  • 举报
回复
学习一下~
dawugui 2008-01-06
  • 打赏
  • 举报
回复
如何从表A(总表)中找出表B(分表)中不存在的记录组合

假设表A和表B都只有两个字段id,name
如何用一句SQL返回表A中存在的id,name结果集而在表B中不存在的id,name结果集

select A.* from A left join B on A.id=B.id and A.name=B.name where B.id is null

select * from A where not exists(select top 1 * from B where A.ID=B.ID)

这两个都可以.


--前提:表中不能有text、ntext、image、cursor 数据类型的字段。

用CheckSum()最简单:

select * from A where checksum(*) not in (select checksum(*) from B)

----------------------------------------------------------------------


查询表A,表B中重复的记录

select * from A where checksum(*) in (select checksum(*) from B)

查询表A,表B中重复的记录,并把结果输入到表C中。

select * into c from A where checksum(*) in (select checksum(*) from B)
dawugui 2008-01-06
  • 打赏
  • 举报
回复
用checksum就行了.
nofarewell 2008-01-06
  • 打赏
  • 举报
回复
SQL我还没研究呢 就从关系代数的角度来看 谁能帮我说说?
我是学C++的,为了应付软考学的这
yuedeem 2008-01-05
  • 打赏
  • 举报
回复
可以去下面这个地址看看,有例子
http://topic.csdn.net/t/20030405/15/1622594.html

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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