Question from the SQL - Fundamentals test

Write a SQL query to retrieve the titles of the movies and the names of their directors.

Easy

Given the following 'movies' and 'directors' tables:

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  |

Which SQL query is the best way to retrieves the titles of the movies and the names of their directors?

Author: Marc AUGIERStatus: Published(Update)Question passed 121 times
Edit
-1
Community Evaluations
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.