sql - INNER JOIN 和 OUTER JOIN 有必要吗?

标签 sql database join

我知道任何连接都可以通过 CROSS 连接和 WHERE 子句完成。

我做了一些实验,看起来将相等谓词放在 where 子句中或作为内部联接的参数会产生相同的结果和相同的性能。

此外,使用内部联接不会节省任何输入,因为仍必须指定联接谓词。

我想各种外连接也是如此。只需指定值可以为 null 或不为 null。

我可以只使用交叉连接吗?

最佳答案

不是任何连接都可以用 CROSS 连接和 WHERE 子句完成。每个连接交叉、内部和外部都有其自己的逻辑意义。

  1. 交叉连接只应用一个阶段——笛卡尔积。
  2. 内部联接应用两个阶段 - 笛卡尔积和过滤器。
  3. 外部联接应用三个阶段 - 笛卡尔积、过滤器和添加外部行。

包含 OUTER JOIN 子句的查询的一个令人困惑的方面是是否在 ON 过滤器或 WHERE 过滤器中指定逻辑表达式。两者之间的主要区别在于 ON 在添加外部行之前应用 ,而 WHERE 在之后应用。 ON 过滤器从保留表(指定为左外或右外)中删除一行不是最终的,因为它将被添加回来; 相比之下,WHERE 过滤器删除一行是最终的。

ON 和 WHERE 子句之间的这种逻辑差异仅在使用外部子句时存在 当您使用内部联接时,无论您是在带有内部联接表运算符的 ON 子句中还是在带有交叉联接表运算符的 Where 子句中指定逻辑表达式的位置都没有关系。

希望这有帮助!!!

关于sql - INNER JOIN 和 OUTER JOIN 有必要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19477950/

相关文章:

php - 简单的数据库查询功能

Hibernate Criteria 通过聚合进行限制

sql - 根据与同一 View 中其他行的比较来选择行

php - 如何 "upgrade"现实世界中的数据库?

javascript - 并行运行 Node 和 Apache

sql - 将数据库架构复制到现有数据库

java - Spark-Java : Display join RDD

mysql - 慢 SQL 连接 5000 行

php - 使用pdo_sqlite在SQL查询中的'LIKE'运算符非常慢

php - MATCH ... AGAINST 无法得出确切的结果