Database SQL FROM子句使用n>;1表

Database SQL FROM子句使用n>;1表,database,oracle,oracle11g,Database,Oracle,Oracle11g,如果向FROM子句(在查询中)添加多个表,这将如何影响结果集?它是先从第一个表中选择,然后从第二个表中选择,然后创建一个联合(即,只有行空间受到影响?),还是实际执行类似于联接的操作(即,扩展列空间)?当您在FROM子句中使用多个表时,WHERE子句是否过滤两个子结果集?在FROM子句中指定两个表将执行联接。然后可以使用WHERE子句指定联接条件。如果您没有做到这一点,您将得到一个笛卡尔积(第一个表中的每一行不加区别地连接到第二个表中的每一行) 代码将如下所示: SELECT a.*, b.*

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

在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是明确指定的。

请参阅手册:所以基本上是一个叉积(没有在WHERE子句中添加任何内容)?@Wuschelbeutelkartofelhuhn这是正确的。