Sql 用主键连接两个表

Sql 用主键连接两个表,sql,sql-server,ssms,Sql,Sql Server,Ssms,我正在使用SQLServerManagementStudio复习我的T-SQL,我有一个问题没有找到答案。我正在使用AdventureWorks2017db,并且有一个内部连接语句可以完美地工作: SELECT FirstName, LastName, AddressLine1 Address, City, StateProvinceCode, State, CountryRegionCode FROM Person.Person p INNER JOIN

我正在使用SQLServerManagementStudio复习我的T-SQL,我有一个问题没有找到答案。我正在使用
AdventureWorks2017
db,并且有一个
内部连接
语句可以完美地工作:

SELECT 
    FirstName, LastName, AddressLine1 Address, City, 
    StateProvinceCode, State, CountryRegionCode 
FROM 
    Person.Person p
INNER JOIN
    Person.BusinessEntityAddress a ON p.BusinessEntityID = a.BusinessEntityID
INNER JOIN
    Person.Address ON Address.AddressID a = a.AddressID
INNER JOIN
    Person.StateProvince s ON s.StateProvinceID = a.StateProvinceID
WHERE 
    CountryRegionCode = 'US' 
但是这里有一个交易:
p.BusinessEntityID
a.BusinessEntityID
不通过外键关联,即使这两个
BusinessEntityID
列是相同的,但它们都不是外键。这两个表之间有一个称为
BusinessEntity
的连接表


显然,这里有些东西我不明白。可能有一个我不知道的简单解释。如果有人能启发我,我将不胜感激

外键的目的是强制数据的引用完整性。它强制您在父表中不存在指定键的情况下,不能在子表中输入行


在这种情况下,Person和BusinessEntityAddress表之间没有可强制执行的完整性,因此不提供外键。完整性介于BusinessEntity和BusinessEntityAddress之间,即如果BusinessEntity不存在,则不能拥有BusinessEntityAddress。

外键的目的是强制数据的引用完整性。它强制您在父表中不存在指定键的情况下,不能在子表中输入行


在这种情况下,Person和BusinessEntityAddress表之间没有可强制执行的完整性,因此不提供外键。完整性介于BusinessEntity和BusinessEntityAddress之间,即如果BusinessEntity不存在,您就不能拥有BusinessEntityAddress。

您不必拥有FK关系即可加入。内部连接条件是一个简单的布尔运算。两边的值匹配吗?这就是服务器正在评估的全部内容。啊。我懂了。那好吧。感谢您的简单解释。您不必拥有FK关系即可加入。内部连接条件是一个简单的布尔运算。两边的值匹配吗?这就是服务器正在评估的全部内容。啊。我懂了。那好吧。谢谢你的简单解释。