【问题标题】:Joining tables or to select from multiple tables连接表或从多个表中选择
【发布时间】:2013-01-23 09:26:51
【问题描述】:

加入一个表从多个表中选择哪个更好?

例如,让我们假设以下类似情况:

使用加入

SELECT COALESCE(SUM(SALARY),0) FROM X
JOIN Y ON X.X_ID=Y.Y_X_ID

通过从多个表中选择

SELECT COALESCE(SUM(SALARY),0) FROM X, Y
WHERE X.X_ID=Y.Y_X_ID

【问题讨论】:

  • 它们是一回事。查看执行计划。第二个也是一个join(是Oracle syle join)。但是,您应该使用更明确且在全球范围内使用的第一种样式。
  • 说到ANSI和兼容性,尽量改掉使用Nvl()的习惯。 Coalesce() 是标准函数,由于短路评估,它更灵活,某些情况下比 Nvl() 性能更好
  • 谢谢大家的建议。

标签: sql database oracle join oracle10g


【解决方案1】:

两者都是连接。第一个是显式连接,第二个是隐式连接,是 SQL 反模式。

第二个不好,因为很容易意外交叉连接。这也很糟糕,因为当您想要交叉连接时,不清楚您是否确实想要交叉连接,或者您是否有意外连接。

在第二种样式中,如果您需要转换为外部联接,则需要更改查询中的所有联接,否则可能会得到不正确的结果。所以第二种风格更难维护。

显式连接是在上个世纪建立的,为什么有人仍在使用容易出错且难以维护的隐式连接是我无法理解的。

【讨论】:

    【解决方案2】:

    主要用于从多个表中检索数据 所以在 sql 中有 3 种类型的连接可用

    1. Equi 连接-内连接 左外连接 正确的 完整的
    2. 非等值连接
    3. 自加入
    4. 交叉连接

    【讨论】:

      【解决方案3】:

      您应该使用 JOIN 语法有很多原因,可以在 here 找到。

      此外,此语法的优点是可以为查询优化器提供一些提示(在计算权重期间,直接根据此语法中提到的事实计算的权重比其他语法更有利)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-20
        • 2011-06-14
        • 2015-07-17
        • 1970-01-01
        • 2016-08-02
        • 2013-12-02
        • 2013-07-11
        • 1970-01-01
        相关资源
        最近更新 更多