假设我有两个链接的表(一个具有另一个的外键):
CREATE TABLE Document (
Id INT PRIMARY KEY,
Name VARCHAR 255
)
CREATE TABLE DocumentStats (
Id INT PRIMARY KEY,
DocumentId INT, -- this is a foreign key to table Document
NbViews INT
)
Run Code Online (Sandbox Code Playgroud)
我知道,这不是最聪明的做事方式,但这是我能想到的最好的例子.
现在,我想获得拥有超过500个视图的所有文档.我想到的两个解决方案是:
SELECT *
FROM Document, DocumentStats
WHERE DocumentStats.Id = Document.Id
AND DocumentStats.NbViews > 500
Run Code Online (Sandbox Code Playgroud)
要么 :
SELECT *
FROM Document
INNER JOIN DocumentStats
ON Document.Id = DocumentStats.Id
WHERE DocumentStats.NbViews > 500
Run Code Online (Sandbox Code Playgroud)
两个查询都是等价的,还是有一种方法比另一种更好?如果是这样,为什么?
我知道我的例子并不完美,而且查询可能需要一些调整,但我希望你明白这一点;)!
编辑:根据答案中的要求,这个问题针对MSSQL,但我有兴趣知道它是否与其他数据库引擎不同(MySQL等...)
Sql语句.
1.select a.* from A a left join B b on a.id =b.id and a.id=2;
2.select a.* from A a left join B b on a.id =b.id where a.id=2;
Run Code Online (Sandbox Code Playgroud)
这两个sql语句有什么区别?