在我的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
)。
答案 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和名称都相同。
如果你需要这样的结果: 然后,您必须在两个表中命名“name”col不同。
如果你想要一套所有男孩和女孩,你应该使用UNION。
select * from boys
union
select * from girls
示例:
男孩表
女孩表
自然加入
联盟结果
答案 2 :(得分:0)
Natural Join两个表的NATURAL [LEFT] JOIN
被定义为在语义上等同于INNER JOIN
或LEFT JOIN
,其中USING
子句命名所有列存在于两个表中。
这意味着如果两个表之间有任何共同的列名,那么这些列也会被比较,并且这些行可能会被删除。