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 ?
Modifier
-1
Évaluations de la communauté
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.
Questions similairesPlus de questions sur SQL
28
Écrire une requête SQL pour récupérer la liste des employés avec un salaire supérieur à 5100.14
Modifier une colonne dans une table SQL13
Sélectionner uniquement les valeurs distinctes d'une colonne en SQL12
Quel mot-clé SQL est utilisé pour trier le résultat d'une instruction SELECT?11
Écrire une requête SQL pour insérer des données dans une table