内连接和列连接之间的区别

时间:2016-11-18 12:32:19

标签: sql

通过内连接和两个相同的列连接两个表给出了相同的响应。

通过内部加入执行

select N.newsno , N.newsArticleno , E.empid , E.empsal 
  from News N  inner join  tblEmployee E on  (E.empid  = N.newsno);

通过相同的列连接执行

select  N.newsno , N.newsArticleno , E.empid , E.empsal 
   from News N , tblEmployee E 
  where (E.empid  = N.newsno);

两个表的输出都相同。

所以请解释一下这些查询之间的区别以及它在不同情况下的使用方式 在此先感谢!!! .....

3 个答案:

答案 0 :(得分:2)

逻辑上这些查询是相同的。

第二个查询使用旧语法。

第一个查询使用的语法在1992年成为标准。 它不仅支持INNER JOIN,还支持其他类型的连接,例如LEFT JOIN和FULL JOIN,之前由每个提供商以不同方式实现或者根本不实现。

我的建议是尽可能使用ANSI / ISO标准。

  • 这是人类可读的
  • 它支持更多可能性
  • 更干净,在连接条件和过滤条件之间分离
  • 它可以保护您免于忘记加入条件

与旧语法一样,大多数提供商都支持它,如果不是全部的话。

答案 1 :(得分:0)

要加入8i,只需使用where子句:

select *  from emp, dept where emp.deptno = dept.deptno; 

在9i及以上,你可以

select ename, dname, emp.deptno, dept.deptno from SCOTT.EMP inner join     SCOTT.DEPT on emp.deptno = dept.deptno 

答案 2 :(得分:0)

您的查询会按时向后枚举连接语法。但是,您错过了更现代的版本:NATURAL JOIN

WITH N AS ( SELECT newsno AS empid, newsArticleno FROM News ),
     E AS ( SELECT empid, empsal FROM tblEmployee )
SELECT *
  FROM N NATURAL JOIN E;

问题是旧的语法永远不会从SQL标准中删除,而SQL最终会出现许多语义上等同的表达相同查询的方式。供应商通常也采用新语法很慢(例如,SQL Server仍然没有NATURAL JOIN);很长时间的用户发现很难从他们喜欢的编写代码的方式开始(例如,你听到了关于'危险'语法)的说法。实际情况是,有许多编码风格在野外熟悉。