首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >右完全外连接查询

问右完全外连接查询
EN

Database Administration用户
提问于 2011-10-17 23:31:06
回答 1查看 1.6K关注 0票数 5

我遇到了一个查询

代码语言:javascript
复制
Select * from R Natural Outer Join S

其中R=(A,B)有元组,{(1,2),(1,2),(3,4)}和S=(B,C)有元组{(2,5),(2,5),(4,6),(7,10)}。

为了实现这一点,我创建了两个名为R和S的关系。

代码语言:javascript
复制
create table R
(
A number(5),
B number(5)
)

create table S
(
B number(5),
C number(5)
)

我把提供的元组插入其中。

现在,在实现这个过程中,我了解到我使用的数据库工具(Oracle)不支持“自然外部连接”,所以我使用了以下查询

代码语言:javascript
复制
select *
from R
natural full outer join S

输出

代码语言:javascript
复制
2 1 5
2 1 5
2 1 5
2 1 5
4 3 6
7   10

现在来问我的问题

  1. “自然外连接”与“自然全外连接”相同吗?
  2. 这里是如何进行记录匹配的?

因为在任何一个表中都没有定义主键,所以我认为它应该做交叉连接并显示16条记录,但事实并非如此。

如果有人能向我解释这种行为,那将是很有帮助的。

EN

回答 1

Database Administration用户

发布于 2011-10-18 04:06:10

对维基百科的快速检查没有提到“外部连接”是否意味着在省略此重要位时左、右或满。

实际上,

  • 不支持iself的“外部连接”。你通常需要左,右或满。
  • “天然”的意思是“用相同的名字连接列”。

这意味着

  • “自然外接”不会被认可
  • “自然完全连接”是与“自然”匹配的“完全外连接”。

在这种情况下,索引/键并不重要,也没有什么区别。

你得到的结果对标准是正确的

代码语言:javascript
复制
select *
from 
   R
   full outer join 
   S ON R.B = S.B

或

代码语言:javascript
复制
select *
from 
   R
   full outer join 
   S USING (B)

注意:并非所有RDBMS都支持所有语法:

  • Server不支持自然的(一件好事)
  • MySQL不支持完全的外部连接(可以使用)

自然连接无论如何都是危险的(所以链接)

票数 6
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/6908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档