Question du test SQL - Les bases

Écrire une requête SQL pour récupérer les titres des films et les noms de leurs réalisateurs.

Facile

Étant donné les tables 'movies' et 'directors' suivantes :

movies:
| movie_id | title   | director_id |
|----------|---------|-------------|
| 1        | Movie A | 1           |
| 2        | Movie B | 2           |
| 3        | Movie C | 1           |

directors:
| director_id | name        |
|-------------|-------------|
| 1           | Director 1  |
| 2           | Director 2  |

Quelle requête SQL est la meilleure pour récupérer les titres des films et les noms de leurs réalisateurs ?

Auteur: Marc AUGIERStatut : Publiée(Mise à jour)Question passée 121 fois
Modifier
-1
Évaluations de la communauté
developer avatar
Dragon parfait
30/07/2024
Filtrer sur le produit cartésien des deux tables est quand même une bien mauvaise pratique. Je pense qu'il faudrait être plus spécifique sur la question en spécifiant que l'on cherche la meilleure réponse.
developer avatar
Vivien
23/09/2024
Seule la première réponse est fausse, les 3 autres répondent à la problématique. Or, seule la 2nde avec le INNER JOIN est considérée bonne. La 3ème, avec le LEFT JOIN, remonte bien les titres des films et les noms des directeurs, la différence est que ça retourne null si le nom du directeur n'est pas renseigné. La 4ème est strictement identique à la 2nde au niveau du résultat, bien que la manière diffère.
developer avatar
Dragon parfait
27/09/2024
Vivien, la question demande bien quelle est la meilleure façon de faire. Le LEFT JOIN présente un défaut comme tu l'as expliqué. Le produit cartésien demande beaucoup plus de ressources informatiques que la jointure. C'est vraiment une mauvaise pratique.
developer avatar
Vivien
27/09/2024
ha, alors effectivement, mea culpa, je n'avais pas vu le terme "meilleur" dans la question : le produit cartésien est donc à retirer. Ou alors a-t-elle été modifiée depuis, vu que vous demandiez à l'ajouter fin juillet. Par contre pour pouvoir répondre correctement à cette question, il faudrait qu'il soit spécifié ce qui doit être retourné dans le cas où le director_id de movies ne corresponde à aucune occurrence de director. Si ce n'est pas précisé, le LEFT JOIN et le INNER JOIN sont corrects tous les 2, puisque le LEFT JOIN met en évidence l'absence de correspondance, tandis que le INNER JOIN la masque, en masquant en plus le film au passage. Et pour moi, qu'un film "disparaisse" d'une liste simplement parce que le nom du directeur a sauté c'est pas top. Mais tout dépend de ce qu'on veut en faire ! Bref en l'absence d'info supplémentaire, les 2 se valent.
developer avatar
Vivien
27/09/2024
Pour faire plus court : le INNER JOIN a l'avantage de ne pas faire apparaitre de colonne directors.name à NULL, mais le défaut de faire disparaitre de la liste les films sans director correspondant. Tandis que le LEFT JOIN a l'avantage de faire apparaitre TOUS les films mais le défaut de ne pas remonter à chaque ligne de directors.name. Les 2 ont donc leurs avantages et leurs défauts.