为什么自然连接在以下情况下将输出设置为空集?

时间:2014-07-07 17:50:27

标签: mysql sql

在我的info数据库中我有4个表,其中两个表被命名为girls& boys并且都有id列。 boys包含12个id(12条记录),girls包含8个id。当我应用此查询时:

SELECT * FROM
boys
NATURAL JOIN
girls

我输出为

Empty Set

怎么会发生这种情况? (id列均为INT, NOT NULL, AUTO_INCREMENT)。

3 个答案:

答案 0 :(得分:4)

NATURAL JOIN是INNER JOIN的简写,在同名列上具有等式谓词。

例如,给定两个表格" m"和" f",它们的列名为" id"和"名称"通常,像这样的NATURAL JOIN

 SELECT ...
   FROM m
NATURAL
   JOIN f

相当于:

SELECT ...
  FROM m
  JOIN f
    ON f.id = m.id
   AND f.name = m.name

只有"匹配的行#34;在结果中将返回两个表,不返回所有其他行。

例如,如果我们有表格内容:

m: id  name
   --  ---------------
    1  peter
    2  paul
    4  michael jackson

f: id  name
   --  ---------------
    3  mary
    4  michael jackson

上面的查询只返回来自" m"的行。和" f" id = 4(作为单行),因为那些是"匹配"的唯一行。

答案 1 :(得分:1)

自然连接仅在相同的命名列的值相同时才有效。即如果两个表中的ID和名称都相同。

如果你需要这样的结果: Result 然后,您必须在两个表中命名“name”col不同。

如果你想要一套所有男孩和女孩,你应该使用UNION。

select * from boys
union
select * from girls

示例:

男孩表 Boys Table

女孩表 Girls Table

自然加入 Natural Join

联盟结果 Union

答案 2 :(得分:0)

Natural Join两个表的NATURAL [LEFT] JOIN被定义为在语义上等同于INNER JOINLEFT JOIN,其中USING子句命名所有列存在于两个表中。

这意味着如果两个表之间有任何共同的列名,那么这些列也会被比较,并且这些行可能会被删除。