加入/凡概念

时间:2012-12-24 12:31:01

标签: sql sql-server oracle tsql plsql

这两个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相同的输出...

内连接也可以写成sql语句吗?

4 个答案:

答案 0 :(得分:8)

它们是使用相同连接条件连接两个表的基本不同方式。

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

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

答案 1 :(得分:1)

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

JOIN / ON表示法只是编写相同内容的另一种方式。符号的不同之处在于可视化地强调连接。

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

答案 2 :(得分:1)

所有都是一样没有区别这些是不同的方式

答案 3 :(得分:0)

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

出于几个原因,您应该使用ANSI-92语法

  • 使用JOIN子句将关系逻辑与 过滤逻辑(WHERE),因此更清洁,更容易 理解。
  • 与此特定查询无关,但有一些 旧外连接语法(使用+)的情况 模糊不清,查询结果因此依赖于实现 - 或者根本无法解析查询。这些都不会发生 ANSI-92
  • 这是一个很好的做法,因为大多数开发人员和dba将使用ANSI-92 如今你应该遵循标准。当然都是现代的 查询工具将生成ANSI-92。
相关问题