Sql 用主键连接两个表
我正在使用SQLServerManagementStudio复习我的T-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
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关系即可加入。内部连接条件是一个简单的布尔运算。两边的值匹配吗?这就是服务器正在评估的全部内容。啊。我懂了。那好吧。谢谢你的简单解释。