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?
Edit
-1
Community Evaluations
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.
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.
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.
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.
Similar QuestionsMore questions about SQL