我正在读一本书“在 Microsoft SQL Server 2008 内部:T-SQL 查询*,它通过一个例子说,当首先在两个表之间进行任何连接时,笛卡尔积发生在它们之间,然后它被过滤为 ON 条件,然后通过” RIGHT”、“LEFT”或“FULL”连接类型。
从那本书的一个例子中,
SELECT C.customerid, COUNT(O.orderid) AS numorders
FROM dbo.Customers AS C
LEFT OUTER JOIN dbo.Orders AS O
ON C.customerid = O.customerid
Customer 表有 4 行,Orders 有 7 行。因此,第一个笛卡尔积将生成 4*7 = 28 行,然后将通过“ON”子句和 LEFT OUTER 进行过滤。
这是否意味着无论我使用哪种连接类型,每次笛卡尔积都会在表之间发生?那么为什么我们会看到不同连接之间的性能差异呢?