Предположим, что у меня есть две таблицы, которые связаны (у одного есть внешний ключ):
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
)
Я знаю, это не самый умный способ делать что-то, но это лучший пример, который я мог бы придумать.
Теперь я хочу получить все документы с более чем 500 видами. Два решения, которые приходят мне на ум:
SELECT *
FROM Document, DocumentStats
WHERE DocumentStats.Id = Document.Id
AND DocumentStats.NbViews > 500
или:
SELECT *
FROM Document
INNER JOIN DocumentStats
ON Document.Id = DocumentStats.Id
WHERE DocumentStats.NbViews > 500
Являются ли оба запроса эквивалентными, или есть один путь, который намного лучше, чем другой? Если да, то почему?
Я знаю, что мой пример не идеальный, и что для запросов может потребоваться некоторая настройка, но я надеюсь, что вы поняли суть;)!
EDIT: по запросу в ответах этот вопрос был нацелен на MSSQL, но мне было бы интересно узнать, отличается ли он от других механизмов БД (MySQL и т.д.)