5

这两条sql语句有什么区别

一种)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语句吗?

4

4 回答 4

8

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

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

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

于 2012-12-24T12:33:09.940 回答
1

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

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

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

于 2012-12-24T12:32:56.817 回答
1

都一样没有区别

这些是不同的方式

于 2012-12-24T12:33:03.073 回答
0

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

您应该使用 ANSI-92 语法有几个原因

  • JOIN 子句的使用将关系逻辑与过滤器逻辑(WHERE)分开,因此更清晰、更易于理解。
  • 这个特定查询无关紧要,但在某些情况下,旧的外部连接语法(使用 + )不明确,因此查询结果取决于实现 - 或者根本无法解析查询。ANSI-92 不会出现这些情况
  • 这是一种很好的做法,因为现在大多数开发人员和 dba 都将使用 ANSI-92,您应该遵循该标准。当然,所有现代查询工具都会生成 ANSI-92。
于 2012-12-24T13:37:25.347 回答