Предположим, у меня есть две таблицы, которые связаны (одна имеет внешний ключ к другой):
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
Оба запроса эквивалентны, или есть один способ, который намного лучше, чем другой? Если так, то почему?
Я знаю, что мой пример не идеален, и что запросы могут нуждаться в некоторой настройке, но я надеюсь, что вы поняли;)!
РЕДАКТИРОВАТЬ: как и требовалось в ответах, этот вопрос был нацелен на MSSQL, но мне было бы интересно узнать, отличается ли он для других механизмов БД (MySQL и т. Д.)