sql - 不同连接操作的用途是什么?

标签 sql rdbms

SQL中不同的join操作有什么用?就像我想知道为什么我们需要不同的内部和外部连接?

最佳答案

您真正需要的唯一连接类型是 LEFT OUTER JOIN .每一种其他类型的连接都可以根据一个或多个左外部连接以及可能的一些过滤来重写。那么为什么我们需要所有其他的呢?仅仅是为了迷惑人吗?如果只有一种连接类型不是更简单吗?

你也可以问:为什么两者都有 a <= bb >= a ?这些不都在做同样的事情吗?我们不能摆脱其中之一吗?它会简化事情!

有时交换更容易<=>=而不是交换参数。类似地,左连接和右连接是相同的,只是操作数交换了。但是,同时拥有这两个选项而不是要求人们按特定顺序编写查询也是可行的。

你可以问的另一件事是:在逻辑上为什么我们有 AND , OR , NOT , XOR , NAND , NOR , 等等?所有这些都可以改写为NAND !为什么不只有 NAND ?嗯,是 awkward写一个 ORNAND 方面s,它的意图并不明显 - 如果你写 OR ,人们立即知道你的意思。如果你写一堆NAND s,你想要达到的目标并不明显。

同样,如果你想做a FULL OUTER JOIN b您可以进行左连接和右连接,删除重复的结果,然后合并所有。但这很痛苦,所以有一个简写。

你什么时候用每一个?这是一个简化的规则:

  • 如果您总是希望 LEFT 表中的每一行都有一个结果行,请使用 LEFT OUTER JOIN。
  • 如果您总是希望 RIGHT 表中的每一行都有一个结果行,请使用 RIGHT OUTER JOIN。
  • 如果您总是希望每个表中的每一行都有一个结果行,请使用 FULL OUTER JOIN。
  • 如果在两个表中都有一行时只需要结果行,请使用 INNER JOIN。
  • 如果您想要所有可能的行对,每个表中的一行,请使用 CROSS JOIN。
  • 关于sql - 不同连接操作的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2617126/

    相关文章:

    sql - 在 WHERE 子句中多次使用同一列

    php - 基于 mySQL 中的 COUNT() 值限制 GROUP BY

    sql - 检查 SQL Server 表的更改?

    javascript - 将行插入连接表?

    sql - PostgreSQL 无法聚合来自多个表的数据

    sql - 非关系数据库中如何避免冗余数据?

    sql - 使用存储过程在同一数据库中以一种方式同步两个表

    sql - 检查条件而不是重复 Case When 的更好方法

    mysql - 当我在非唯一列中设置外键关系时,GROUP BY 不起作用

    postgresql - SQL Servfer 的 CONTEXT_INFO 的 PostgreSQL 等价物是什么?