【问题标题】:JOIN/Where CONCEPTS加入/在哪里概念
【发布时间】:2012-12-10 21:09:37
【问题描述】:

这两条sql语句有什么区别

a)select * from T1,T2 where T1.A=T2.A ;

b)select * from T1,T2 where T2.A=T1.A ;

我在两种情况下都得到相同的输出,这两种语句之间有什么区别吗?

c)select * from T1 inner join T2 on T1.A=T2.A ;

语句 C 和 a 之间有什么区别?在这种情况下也得到与 a 和 b 相同的输出...

Inner Joins也可以写成sql语句a吗?

【问题讨论】:

    标签: sql sql-server oracle tsql plsql


    【解决方案1】:

    (a) 和 (c) 是相同的,除了第二个是 ANSI-92 SQL 语法,第一个是不包含 join 子句的旧 SQL 语法。它们应该产生完全相同的内部查询计划,尽管您可能想检查一下。

    出于多种原因,您应该使用 ANSI-92 语法

    • 使用 JOIN 子句将关系逻辑与 过滤逻辑(WHERE),因此更干净,更容易 了解。
    • 这个特定的查询无关紧要,但有一些 较旧的外连接语法(使用 + )的情况是 模棱两可,因此查询结果取决于实现 - 或者根本无法解决查询。这些不会发生 ANSI-92
    • 这是一种很好的做法,因为大多数开发人员和 dba 都将使用 ANSI-92 如今,您应该遵循标准。当然所有现代 查询工具将生成 ANSI-92。

    【讨论】:

      【解决方案2】:

      SQL 就像数学那样;平等是对称的。如果 A = B,则 B = A。应该没有区别。

      JOIN/ON 表示法只是编写相同内容的另一种方式。符号不同以在视觉上强调连接。

      输出比任何数量的 SO 用户都更能告诉你答案。为什么不相信自己的眼睛?

      【讨论】:

        【解决方案3】:

        它们都是使用相同连接条件连接两个表的本质不同的方法。

        1 和 2 之间,就数据库而言,绝对没有区别。

        最后一个选项是标准化的连接语法——这是你应该使用的,以确保你的 SQL 是可读的——这是阅读你的 SQL 的人在你连接表时期望看到的。

        【讨论】:

          【解决方案4】:

          都一样没有区别

          这些是不同的方式

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-08-17
            • 2017-12-12
            • 2016-03-26
            • 2021-12-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多