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

问题描述:

通过内部连接和两个相同列连接两个表会给我们相同的响应。内部连接和列连接之间的区别

通过内部执行加入

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); 

输出相同。

所以,请给我解释一下什么是这个查询,以及它如何在不同情况下使用 先谢谢了!!!之间的差异.....

+1

为什么标记为c#,java,android,php? – Imad

+1

一个使用正确的显式'JOIN'语法。另一个使用应该被废弃的陈旧语法。 –

+1

今天提示:始终使用现代的,明确的'JOIN'语法。易于编写(没有错误),更易于阅读和维护,并且在需要时更容易转换为外部联接! – jarlh

捧场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 
+0

什么是8i和9i? – jarlh

+0

@jarlh Oracle verisons –

按道理这些查询是相同的。

第二个查询使用旧语法。

首届查询使用,成为1992年 标准它不仅支持INNER JOIN还有其它类型的连接,如LEFT语法JOIN和FULL JOIN,在此之前是由每个提供商不同的方式实现或没有落实在所有。

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

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

而且与旧语法相同,如果不是全部,则大多数提供者都支持它。

+0

也有'NATURAL JOIN'和'UNION JOIN'(尽管后者我没有在野外见过)。说到丢弃旧版本的东西,标准于1987年成为ISO,并不确定为什么我们仍然使用旧的'ANSI'绰号! – onedaywhen

+0

@onedaywhen我故意忽略NATURAL JOIN和RIGHT JOIN,因为我不想看到它们在使用:-)我也忽略了LEFT SEMI JOIN,因为它仍然不常见,并且AFAIK仅HQL(Hive及其衍生物)支持它。 –

您的查询枚举连接语法及时倒退。然而,你错过了更多的现代版: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);很长一段时间的用户觉得很难从他们最喜欢的编写代码的方式转向(例如,您听到“危险”语法的说法)。现实情况是,野外有许多编码风格需要熟悉。

+0

NATURAL JOIN看起来像是一种很酷的语法,可以显着简化代码**但是**想想在有一天某列正在被添加或重命名并且突然间所有代码被“破坏”,返回错误结果的生产场景中。最重要的是,将列作为“record_create_ts”和“record_update_ts”添加到每个表是很好的做法,这会使NATURAL JOIN无用。 –

+1

'NATURAL JOIN'是一个等待发生的错误。它*永远不应该被添加到标准中。 –

+0

@GordonLinoff:已经涵盖了这个,“你听到'危险'语法的说法”哈哈。 – onedaywhen