如果将多个表添加到FROM子句(在查询中),这对结果集有何影响?它是否先从第一个表中选择,然后从第二个表中选择,然后创建一个联合(即,只影响行空间)?或者它真的做了类似连接的事情(例如,扩展列空间)?当您在FROM子句中使用多个表时,WHERE子句是否会同时过滤两个子结果集?
发布于 2012-01-25 18:25:14
在FROM子句中指定两个表将执行联接。然后,可以使用WHERE子句指定联接条件。如果不这样做,最终将得到笛卡尔乘积(第一个表中的每一行都不加区别地连接到第二个表中的每一行)。
代码将如下所示:
SELECT a.*, b.*
FROM table1 a, table2 b
WHERE a.id = b.id
但是,我总是尝试显式地指定我的连接(使用JOIN和ON关键字)。这使得(对于下一位开发人员)你想要做什么变得非常清楚。下面是相同的连接,但显式指定:
SELECT a.*, b.*
FROM table1 a
INNER JOIN table2 b ON b.id = a.id
请注意,现在我不需要WHERE子句。此方法还可以帮助您避免无意中生成笛卡尔乘积(如果您碰巧忘记了WHERE子句),因为ON是显式指定的。
https://stackoverflow.com/questions/9007940
复制