MySQL 内部连接结果

标签 mysql sql database

我有一个关于 MySQl 中的内连接的问题。根据我对 MySQL 的有限理解,内连接生成的结果表仅包含两个表中都存在的行。也就是说,例如,如果 table1 包含 Joe 的一行和 Sally 的一行,而 table2 仅包含 Sally 的一行,则内部联接将仅包含一行:Sally 的行。

例如:

在包含 2 个表的数据库中,

表1(宠物)

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 中的术语“Unicorn”匹配,并列出两个表中包含“Unicorn”一词的行是否正确?然而,这样做会导致

petName petType petName petColor
Unicorn Horse   Unicorn white
<   NULL   >   Unicorn silver

MySQL 自动用表 1 中的“Unicorn Horse”行替换该值,因为它与查询中使用的“Unicorn”关键字匹配?

如果是这样,那么这样做有什么意义,因为 MySQL 只会在第二行中提供我没有用的冗余数据?另外,我可以通过使用来解决这个问题吗

SELECT * FROM Pet LEFT JOIN Color
ON Pet.petName=Color.petName
WHERE Pet.petName="Unicorn"?

我在 PHP & MYSQL for Dummies 中看到了这个例子,但似乎无法理解。 如果有人能澄清这一点,我将不胜感激。

最佳答案

结果符合预期。您正在使用两个表上的 PetName 列连接两个表。 Unicorn HorsePet 在结果集中显示了两次,因为它与表 Color 上的两条记录匹配。

要进一步了解有关联接的更多信息,请访问以下链接:

关于MySQL 内部连接结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16650737/

相关文章:

php - 随时随地更改数据库名称 php

javascript - firebase 中数据设计的最佳实践

php - 根据用户选择插入多个表? PHP

php - 使用 PHP 在 MySQL 中创建表时出错

ruby-on-rails - 如何使用 Rails 计算数据库中的连续元素?

mysql - 保存用户历史记录的最佳方式

mysql - 寻找客户和他们的第一笔付款

mysql - PostgreSQL - 查询优化或需要多个循环

mysql - 如何用MySql中同一个表中2条不同记录的总和来更新表中的所有列?

mysql - 检查一列是否包含另一列的所有值 - Mysql