Supposons que j'ai deux tables qui sont liées (l'un a une clé étrangère vers les autres) :
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
)
Je sais, ce n'est pas la façon la plus intelligente de faire les choses, mais c'est le meilleur exemple que je pouvais venir.
Maintenant, je veux obtenir tous les documents qui ont plus de 500 points de vue. Les deux solutions qui me viennent à l'esprit sont :
SELECT *
FROM Document, DocumentStats
WHERE DocumentStats.Id = Document.Id
AND DocumentStats.NbViews > 500
ou :
SELECT *
FROM Document
INNER JOIN DocumentStats
ON Document.Id = DocumentStats.Id
WHERE DocumentStats.NbViews > 500
Sont à la fois les requêtes équivalent, ou est-il une façon de faire qui est de loin meilleur que les autres ? Si oui, pourquoi ?
Je suis conscient que mon exemple n'est pas parfait, et que les requêtes peuvent avoir besoin de quelques réglages, mais j'espère que vous avez obtenu le point ;) !
EDIT: comme l'a demandé dans les réponses à cette question visait à MSSQL, mais je serais intéressé de savoir si il est différent pour d'autres moteurs de base de données (MySQL, etc...)