使用n> 1表的SQL FROM子句

时间:2012-01-25 18:16:06

标签: database oracle oracle11g

如果向FROM子句添加多个表(在查询中),这对结果集有何影响?它首先从第一个表中选择然后从第二个表中选择然后创建一个联合(即,只有行空间受到影响吗?)还是它实际上做了类似连接的事情(即扩展列空间)?当您在FROM子句中使用多个表时,WHERE子句是否同时过滤子结果集?

1 个答案:

答案 0 :(得分:2)

在FROM子句中指定两个表将执行JOIN。然后,您可以使用WHERE子句指定JOIN条件。如果你没有做到这一点,你最终会得到一个笛卡尔积(第一个表中的每一行都不加选择地加入到第二个中的每一行)。

代码看起来像这样:

SELECT a.*, b.*
FROM table1 a, table2 b
WHERE a.id = b.id

但是,我总是尝试显式指定我的JOIN(使用JOIN和ON关键字)。这使得(对于下一个开发人员)非常清楚你正在尝试做什么。这是相同的JOIN,但明确指定:

SELECT a.*, b.*
FROM table1 a
INNER JOIN table2 b ON b.id = a.id

请注意,现在我不需要WHERE子句。此方法还可以帮助您避免生成无意的笛卡尔积(如果您碰巧忘记了WHERE子句),因为明确指定了ON。