我有一个关于 MySQl 中的内部联接的问题。根据我对 MySQL 的有限理解,内部联接生成的结果表仅包含两个表中都存在的行。也就是说,例如,如果 table1 包含 Joe 的行和 Sally 的行,而 table2 仅包含 Sally 的行,则内部连接将仅包含一行:Sally 的行。
例如:
在包含 2 个表的数据库中,
表一(宠物)
petName petType
Unicorn Horse
Pegasus Horse
Lion Cat
表2(颜色)
petName petColor
Unicorn white
Unicorn silver
Fish Gold
使用查询
SELECT * FROM Pet,Color WHERE Pet.petName = Color.petName
为什么是查询结果?
petName petType petName petColor
Unicorn Horse Unicorn white
Unicorn Horse Unicorn silver
为什么在表 1 中只有 1 只“独角兽马”时,第二行有“独角兽马”?我是否正确地说 MySQL 匹配表 1 和表 2 中的术语“独角兽”,并列出两个表中包含“独角兽”一词的行。然而,这样做会导致
petName petType petName petColor
Unicorn Horse Unicorn white
< NULL > Unicorn silver
MySQL 自动将值替换为表一中的“Unicorn Horse”行,因为它与查询中使用的“Unicorn”关键字匹配?
如果是这样,这有什么意义,因为 MySQL 只会在第二行给我多余的数据,而我没有用?另外,我可以通过使用来解决这个问题吗
SELECT * FROM Pet LEFT JOIN Color
ON Pet.petName=Color.petName
WHERE Pet.petName="Unicorn"?
我在 PHP & MYSQL for Dummies 中遇到了这个示例,但似乎无法理解。如果有好心人能澄清这一点,我将不胜感激。