使用主键连接两个表

时间:2018-03-03 22:57:37

标签: sql sql-server ssms

我正在使用SQL Server Management Studio刷新我的T-SQL并提出这个我无法找到答案的问题。我正在使用AdventureWorks2017数据库并使这个INNER JOIN语句完美运行:

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.BusinessEntityIDa.BusinessEntityID与外键无关,即使两个BusinessEntityID列都相同,但两者都不是外键另一个。这两个表之间有一个名为BusinessEntity的联结表。

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

1 个答案:

答案 0 :(得分:2)

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

在这种情况下,Person和BusinessEntityAddress表之间没有完整性,因此没有提供外键。完整性在BusinessEntity和BusinessEntityAddress之间 - 即如果BusinessEntity不存在,则不能拥有BusinessEntityAddress。