我正在阅读一本名为“Inside Microsoft SQL Server 2008: T-SQL Querying”的书,其中举例说明在两个表之间进行任何连接时,首先会发生笛卡尔积,然后通过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
客户表有4行,订单表有7行。因此,第一个笛卡尔积将生成4*7=28行,然后将通过"ON"子句和LEFT OUTER进行过滤。
这是否意味着无论我使用何种类型的连接,每次都会在表之间发生笛卡尔积?那么为什么我们会看到不同连接之间的性能差异呢?
CROSS JOIN
语句。 - Aycan Yaşıt