Mysql SQL内部联接和自然联接

Mysql SQL内部联接和自然联接,mysql,join,Mysql,Join,所以我有一些关于我正在准备的旧试卷的具体问题,为实际考试做准备。这是一个非常基本的水平,但我只是需要帮助理解一些具体任务的结果 内部连接和自然连接: 形式,希望没问题。 我的第一个问题是关于1。声明内容如下: Select * From r INNER JOIN s ON r.F=s.F 为什么在进行内部联接时,E行中的12会被删除,而不是20 第二个问题涉及以下陈述: Select E, G From r NATURAL JOIN s; 再说一次,从E行中删除的是12,而不是20 我再次

所以我有一些关于我正在准备的旧试卷的具体问题,为实际考试做准备。这是一个非常基本的水平,但我只是需要帮助理解一些具体任务的结果

内部连接和自然连接:

形式,希望没问题。 我的第一个问题是关于1。声明内容如下:

Select * From r INNER JOIN s ON r.F=s.F
为什么在进行内部联接时,E行中的12会被删除,而不是20

第二个问题涉及以下陈述:

Select E, G From r NATURAL JOIN s;
再说一次,从E行中删除的是12,而不是20

我再次为图片的糟糕设置道歉,希望有人能向我解释这个非常简单的任务的结果

提前谢谢


要了解不同类型的联接,请查看以下内容:

如您所见,在您的案例中,您匹配两个表的共同元素的内部元素:

r在F列中有[5,15,20] a在F列中有[5,15,20]

因此,值将为[5,15],正如您选择*,它将从两个表中选择所有列,但不重复名称和公共列

Select * From r INNER JOIN s ON r.F=s.F
结果表r:

E   F  G
10  5  20
20  15 30
结果将是

E  F  F  G
10 5  5 30
20 15 15 20
INTERNAR JOIN关键字选择两个表中具有匹配值的记录。这就是为什么删除了12,即没有公共列。 现在我们来看看结果

Select E, G From r NATURAL JOIN s

当您使用*时,选择您得到的

F  E   G
5  10 30
15 20 20
在自然联接上使用*时,它将扩展到以下列列表

  • 所有公共列
  • 第一个(左)表中不是公共列的每一列
  • 第二个(右)表中不是公共列的每一列

E不是一行;为什么您认为应该包括12个和/或不应该包括20个?只会返回与两个表中的联接值匹配的数据(这就是内部联接的性质)。因为F是被连接的列,所以只有值5,10,15可能被连接。因为第二个表中有5,15,20。值的唯一交集在值5和15上。因此,排除所有其他行。自然连接是相似的,但表之间的连接是相似的列名,因为r和s只有F作为相同的列名,它们是连接的,结果与内部连接的结果相匹配。伙计,我是个白痴,我现在完全明白了,不知道我怎么看不到,我为浪费每个人的时间而道歉!用户1845777,我回答了你第一个问题,所以你可以考虑第二个问题,如果你不明白,请告诉我it@user1845777哈哈,别那么戏剧化:D,我们正在努力帮助你!这个网站也有一些规则要求ans添加答案,所以这个网站每天都会越来越好,所以如果前5次你没有问一个完美的问题,不要难过,到目前为止我仍然可以问一个好问题。。。我觉得有点难,但是你可以根据其他用户的建议编辑问题,这里的每个人都想帮忙。自然联接合并相同的命名列,因此只有3个。内部连接将保留所有4个。我不相信@Damianaltenero的结果表是正确的。但它可能是可配置的。在上面的rextester链接中,自然连接和内部连接的行为有所不同。但是,由于它特别是E,G,所以它不会只创建两个列,分别命名为E和G@user1845777正是xQbert说的!看见没人评判你的问题,大家helping@user1845777否。合并列名,而不是删除列名。Select*表示所有列,因此在内部联接中有4列。但是,自然连接会合并相似的名称列,因为它们的值相同;所以E,G,F(有两个F现在有一个合并在自然连接中)啊,我误读了自然连接。。。是的,因为这些都是选择的值。还有一个到rextester的链接,这样你就可以玩@user1845777了
E  G
10 30
20 20
F  E   G
5  10 30
15 20 20