我知道任何连接都可以通过 CROSS 连接和 WHERE 子句完成。
我做了一些实验,看起来将相等谓词放在 where 子句中或作为内部联接的参数会产生相同的结果和相同的性能。
此外,使用内部联接不会节省任何输入,因为仍必须指定联接谓词。
我想各种外连接也是如此。只需指定值可以为 null 或不为 null。
我可以只使用交叉连接吗?
最佳答案
不是任何连接都可以用 CROSS 连接和 WHERE 子句完成。每个连接交叉、内部和外部都有其自己的逻辑意义。
- 交叉连接只应用一个阶段——笛卡尔积。
- 内部联接应用两个阶段 - 笛卡尔积和过滤器。
- 外部联接应用三个阶段 - 笛卡尔积、过滤器和添加外部行。
包含 OUTER JOIN 子句的查询的一个令人困惑的方面是是否在 ON 过滤器或 WHERE 过滤器中指定逻辑表达式。两者之间的主要区别在于 ON 在添加外部行之前应用 ,而 WHERE 在之后应用。 ON 过滤器从保留表(指定为左外或右外)中删除一行不是最终的,因为它将被添加回来; 相比之下,WHERE 过滤器删除一行是最终的。
ON 和 WHERE 子句之间的这种逻辑差异仅在使用外部子句时存在 当您使用内部联接时,无论您是在带有内部联接表运算符的 ON 子句中还是在带有交叉联接表运算符的 Where 子句中指定逻辑表达式的位置都没有关系。
希望这有帮助!!!
关于sql - INNER JOIN 和 OUTER JOIN 有必要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19477950/