内部连接和列连接之间的区别
通过内部连接和两个相同列连接两个表会给我们相同的响应。内部连接和列连接之间的区别
通过内部执行加入
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);
输出相同。
所以,请给我解释一下什么是这个查询,以及它如何在不同情况下使用 先谢谢了!!!之间的差异.....
捧场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
什么是8i和9i? – jarlh
@jarlh Oracle verisons –
按道理这些查询是相同的。
第二个查询使用旧语法。
首届查询使用,成为1992年 标准它不仅支持INNER JOIN还有其它类型的连接,如LEFT语法JOIN和FULL JOIN,在此之前是由每个提供商不同的方式实现或没有落实在所有。
我的建议是尽可能使用ANSI/ISO标准。
- 它是人类可读
- 它支持更多的可能性
- 它更干净,分离之间的连接条件和过滤条件
- 它可以保护您忘记推杆连接条件
而且与旧语法相同,如果不是全部,则大多数提供者都支持它。
也有'NATURAL JOIN'和'UNION JOIN'(尽管后者我没有在野外见过)。说到丢弃旧版本的东西,标准于1987年成为ISO,并不确定为什么我们仍然使用旧的'ANSI'绰号! – onedaywhen
@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
);很长一段时间的用户觉得很难从他们最喜欢的编写代码的方式转向(例如,您听到“危险”语法的说法)。现实情况是,野外有许多编码风格需要熟悉。
NATURAL JOIN看起来像是一种很酷的语法,可以显着简化代码**但是**想想在有一天某列正在被添加或重命名并且突然间所有代码被“破坏”,返回错误结果的生产场景中。最重要的是,将列作为“record_create_ts”和“record_update_ts”添加到每个表是很好的做法,这会使NATURAL JOIN无用。 –
'NATURAL JOIN'是一个等待发生的错误。它*永远不应该被添加到标准中。 –
@GordonLinoff:已经涵盖了这个,“你听到'危险'语法的说法”哈哈。 – onedaywhen
为什么标记为c#,java,android,php? – Imad
一个使用正确的显式'JOIN'语法。另一个使用应该被废弃的陈旧语法。 –
今天提示:始终使用现代的,明确的'JOIN'语法。易于编写(没有错误),更易于阅读和维护,并且在需要时更容易转换为外部联接! – jarlh