如何编写一个查询来显示 Cross Join 和 Inner Join 之间的区别,或者我们可以说,在 SQL Server 中 Cross Join 与 Inner Join 的区别,并附带一个示例。对于这个面试问题,我们将使用下面显示的数据。数据存在于 TEST 数据库中的 NewCustomer 表内。

Department 表中的数据为

SQL Server 中的 Cross Join 和 Inner Join 的区别
SQL Server Cross Join 和 Inner Join 的定义是
- INNER JOIN:如果两个表中的列至少有一个匹配项,则返回两个表中都存在的记录(或行)。
- CROSS JOIN:它返回两个表的笛卡尔积。笛卡尔积的意思是表 1 中的行数乘以表 2 中的行数。
SQL Inner Join
下面的 INNER JOIN 查询将显示 Employees 和 Department 表中存在的所有列,以及匹配的行。
-- Example for Cross Join Vs Inner Join in SQL Server
USE [SQLTEST]
GO
SELECT Cust.[FirstName] AS [First Name]
,Cust.[LastName] AS [Last Name]
,Cust.[Education]
,Cust.[Occupation]
,Dept.[DepartmentName] AS [Department Name]
,Cust.[YearlyIncome]
FROM [NewCustomers] AS Cust
INNER JOIN
[Department] AS Dept ON
Cust.[DeptID] = Dept.[DeptID]

SQL Cross Join 示例
下面的 CROSS JOIN 查询将显示 Employees 和 Department 表中存在的列的笛卡尔积。
-- Example for Cross Join Vs Inner Join in SQL Server
USE [SQLTEST]
GO
SELECT Cust.[FirstName] AS [First Name]
,Cust.[LastName] AS [Last Name]
,Cust.[Education]
,Cust.[Occupation]
,Dept.[DepartmentName] AS [Department Name]
,Cust.[YearlyIncome]
FROM [NewCustomers] AS Cust
CROSS JOIN
[Department] AS Dept

如果观察上面的 SQL Server 截图,它显示了 80 条记录。这意味着 NewCustomers 表中的 10 行乘以 Department 表中的 8 行。