因此,我对sql是相当陌生的,目前我仍然坚持自然连接的概念。
目前我了解到,自然连接操作符通过匹配所有具有相同名称的列、丢弃重复的列和不匹配的行来连接表。
所以最近我遇到了一个问题,非常基本的真的,但我不能把我的头围绕它。
所以有两个关系r(a,b,c)和s(a,b,d)
A B C A B D
6 8 7 5 8 7
6 6 7 6 6 7
7 8 6 6 8 6
下面的查询将生成多少行?
从r自然连接s中选择*
所以我立刻看到两列“匹配”它们是a和b。通过使用自然连接,它将同时考虑a和b或者仅仅考虑a,因此,哪些信息将被丢弃。
答案是两排。有人能解释一下得到两行的方法吗?
谢谢!
这两排有可能吗
A B D
6 6 7
6 6 6
如果是,我可以删除这个问题
2条答案
按热度按时间von4xj4u1#
这太长了,不能发表评论。不要使用自然连接。不用费心学习自然连接。他们是可憎的。
为什么?联接条件基于具有相同名称的列。自然连接甚至不考虑声明的外键关系。这可能相当危险。或者——在我的情况下——因为几乎我所有的table都有
CreatedAt
以及CreatedBy
,反正也没用。相反,列出
join
钥匙。在你的情况下(因为你有select *
),的using
条款最合适:这还有一个优点,即键在查询中显式显示,这大大减少了错误的范围。
cotxawn72#
冒着过于简单化的风险,
NATURAL JOIN
对同名列执行联接。以下是使用更多运算符的重写(以及许多其他可能的重写):
结果有四列两行: