Sql 内部联接查询返回不同的值

Sql 内部联接查询返回不同的值,sql,join,Sql,Join,我是SQL新手,正在W3schools学习客户表,它要求选择与供应商来自同一国家/地区的所有客户: 从客户中选择* 从供应商中选择国家/地区的国家/地区 我正在尝试使用JOIN进行另一个查询: 从客户中选择* 内部连接供应商 关于customers.country=suppliers.country 它得到了不同的查询结果。我想不出这里出了什么问题。请告知。您的查询有不同的含义 首先,您基本上过滤掉了该国家的所有客户。基本上,您检查客户的国家字段是否在子查询的国家列表中从供应商选择国家 然而,在

我是SQL新手,正在W3schools学习客户表,它要求选择与供应商来自同一国家/地区的所有客户:

从客户中选择* 从供应商中选择国家/地区的国家/地区

我正在尝试使用JOIN进行另一个查询:

从客户中选择* 内部连接供应商 关于customers.country=suppliers.country


它得到了不同的查询结果。我想不出这里出了什么问题。请告知。

您的查询有不同的含义

首先,您基本上过滤掉了该国家的所有客户。基本上,您检查客户的国家字段是否在子查询的国家列表中从供应商选择国家

然而,在第二种情况下,您加入了供应商国家的客户。基本上,如果两个供应商的客户所在国家相同,那么您将返回两次客户


如果有不清楚的地方,请告诉我。

这两个查询不是同义词

第一个查询with IN子句根据布尔真/假条件返回行。它只能减少行数。它不能添加行或列。即使有多个国家/地区出现在任一表中,它也会检查每个客户国家/地区是否在同一国家/地区的任何一行供应商中至少出现一次。如果为True,则保留行。总之,查询的维度包括:

行:返回至少一个国家/地区对匹配的筛选行 列:仅返回客户列 第二个带有内部联接的查询现在合并到一个新的数据源supplier表中,该表增加了行和列。这一次将返回每个匹配的客户国家/地区到供应商国家/地区。因此,不再检查是否至少存在一个匹配,而是返回所有成对匹配。总之,查询的维度包括:

ROWS:返回两个表之间所有成对国家/地区匹配的行 列:返回所有客户和所有供应商列
这将有助于显示您所说的不同之处。当然!我已经更新了问题并附上了2个查询结果截图。你的问题是什么?如果你希望这些都是相同的,请说明原因,并引用权威来源。否则答案就是正确的,因为SQL就是这样定义的。PS谢谢。仅将图像用于无法表示为文本或扩充文本的内容。请在代码问题中给出-cut&paste&runnable代码,包括作为代码输入的最小代表性示例;期望和实际输出,包括逐字记录错误消息;标签和版本;清晰的说明和解释。给出你能给出的最少代码,即你显示的代码是OK的,扩展为你显示的代码是不OK的。调试基础。对于包含DBMS和DDL(包括约束和索引)的SQL,请输入格式化为表的代码。不要试图对你的总体目标进行编码,而是解释你期望从给定的代码中得到什么以及为什么。我的评论和行动是中立的、有用的。另请参见文本上方的投票箭头鼠标。也是我第一次评论的第一句话。此外,当你的问题被固定下来,我们可以清楚地期待它是一个初学者的常见问题解答。在考虑发帖之前,请阅读您的教科书和/或手册,并在谷歌上搜索任何错误消息或您的问题/问题/目标的许多清晰、简洁和准确的措辞,包括或不包括您的特定字符串/名称和网站:stackoverflow.com&tags;阅读许多答案。如果你发布一个问题,用一句话作为标题。反思你的研究。PS你可以编辑来提高。非常感谢你解释得很好的答案!这意味着我不应该用join来回答这个问题。非常感谢!我现在更彻底了。