通过内连接和两个相同的列连接两个表给出了相同的响应。
通过内部加入执行
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);
两个表的输出都相同。
所以请解释一下这些查询之间的区别以及它在不同情况下的使用方式 在此先感谢!!! .....
答案 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
);很长时间的用户发现很难从他们喜欢的编写代码的方式开始(例如,你听到了关于'危险'语法)的说法。实际情况是,有许多编码风格在野外熟悉。