33 votes

INNER JOIN contre les noms de table multiples dans "FROM".

Duplicata possible :
INNER JOIN versus clause WHERE - une différence ?

Quelle est la différence entre une requête INNER JOIN et une requête de jointure implicite (énumérant plusieurs tables après le mot-clé FROM) ? Par exemple :

Étant donné les deux tableaux suivants :

CREATE TABLE Statuses(
  id INT PRIMARY KEY,
  description VARCHAR(50)
);
INSERT INTO Statuses VALUES (1, 'status');

CREATE TABLE Documents(
  id INT PRIMARY KEY,
  statusId INT REFERENCES Statuses(id)
);
INSERT INTO Documents VALUES (9, 1);

Quelle est la différence entre ces deux requêtes SQL ? D'après les tests que j'ai effectués, elles renvoient le même résultat. Font-elles la même chose ? Y a-t-il des situations où elles renvoient des ensembles de résultats différents ?

SELECT s.description FROM Documents d, Statuses s WHERE d.statusId = s.id AND d.id = 9;

SELECT s.description FROM Documents d INNER JOIN Statuses s ON d.statusId = s.id WHERE d.id = 9;

0voto

99tm Points 19742

0voto

Dave Points 2295

Dans l'exemple que vous avez donné, les requêtes sont équivalentes ; si vous utilisez SQL Server, exécutez la requête et affichez le plan d'extraction réel pour voir ce que le serveur fait en interne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X