2nd Dec 2022 6 minutes de lecture Qu'est-ce qu'un INNER JOIN SQL ? Dorota Wdzięczna sql apprendre sql join Table des matières Quand avez-vous besoin de JOIN ? Comment utiliser le JOIN dans une requête SQL Que se passe-t-il si les enregistrements ne correspondent pas ? Filtrage des enregistrements dans l'ensemble de résultats Vous voulez en savoir plus sur Les jointures en SQL? Comment combiner des données provenant de différentes tables dans une même requête ? Une fonctionnalité SQL appelée JOIN est l'opérateur le plus couramment utilisé pour créer des requêtes complexes. Découvrez les principes de base dans cet article. SQL nous permet de sélectionner des données dans plusieurs tables. En fait, l'idée même d'utiliser des bases de données relationnelles est de sélectionner des données dans des tables liées. Pour ce faire, nous pouvons utiliser l'opérateur JOIN de SQL. Il existe de nombreux types de JOIN en SQL. Dans cet article, nous allons nous concentrer sur INNER JOIN, qui est la commande par défaut de JOIN (c'est-à-dire celle que vous obtenez si vous utilisez le mot-clé JOIN seul). Quand avez-vous besoin de JOIN ? Pourquoi aurions-nous besoin de joindre des données provenant de plusieurs tables ? La réponse est simple : parfois, une seule table ne contient pas toutes les données dont vous avez besoin. Imaginez que la table movie stocke des informations dans les colonnes id, title, production_year et director_id. idtitleproduction_yeardirector_id 1Psycho19601 2Midnight in Paris20112 3Sweet and Lowdown19932 4Talk to her20023 5The skin I live here20113 Un autre tableau, directorcontient des informations sur les réalisateurs : leurs colonnes id, name et birth_year. idnamebirth_year 1Alfred Hitchcock1899 2Woody Allen1935 3Pedro Almodóvar1949 Notez que chaque film n'a qu'une seule colonne relative au réalisateur : director_id. Les mêmes valeurs de numéro d'identification dans la table director (dans la colonne director_id ) et dans la table movie (dans la colonne id ). Nous aimerions afficher les données de chaque film avec les détails de son réalisateur. Le résultat est une nouvelle table avec des données provenant de deux tables : movie et director. Les tables sont combinées (ou jointes) sur la base des numéros d'identification des réalisateurs. En d'autres termes, les films ayant un director_id spécifique sont combinés avec les informations du réalisateur ayant cet ID - par exemple, le film Psychose avec director_id=1 est associé à l'enregistrement où id=1 (Alfred Hitchcock) dans la table director tableau. Regardez l'ensemble des résultats : idtitleproduction_yeardirector_ididnamebirth_year 1Psycho196011Alfred Hitchcock1899 2Midnight in Paris201122Woody Allen1935 3Sweet and Lowdown199322Woody Allen1935 4Talk to her200233Pedro Almodóvar1949 5The skin I live here201133Pedro Almodóvar1949 Une version illustrée d'un exemple similaire est présentée dans l'article An Illustrated Guide to the SQL INNER JOIN. Comment utiliser le JOIN dans une requête SQL Maintenant, analysons la requête que nous venons d'utiliser. La voici à nouveau : SELECT * FROM movie JOIN director ON movie.director_id=director.id; JOIN est une forme plus courte de la clause INNER JOIN; vous pouvez les utiliser de manière interchangeable. Après avoir SELECT vos colonnes, vous mettez le mot clé FROM et le nom de la première table (dans cet exemple, movie). Ensuite, vous mettez JOIN (ou INNER JOIN), suivi du nom de la deuxième table (ici, director). Viennent ensuite le mot-clé ON et la condition de jointure (c'est-à-dire la manière de faire correspondre les enregistrements des deux tables). Dans ce cas, la condition de jointure fait correspondre les valeurs de la colonne director_id de la table movie avec la colonne id de la table director. De cette façon, les enregistrements de la table movie sont mis en correspondance avec les enregistrements corrects de la table director. Nous savons maintenant que le film Sweet and Lowdown a été réalisé par le cinéaste Woody Allen, né en 1935. Ce film a pour nom director_id=2; il y a une valeur correspondante dans la colonne (id) de la table. director. L'animation ci-dessous montre comment l'utilisation de l'opérateur JOIN fonctionne et quels enregistrements sont renvoyés : Un opérateur JOIN fonctionne de manière logique, en deux étapes. La première étape renvoie un produit cartésien, c'est-à-dire que chaque ligne du premier tableau est combinée avec chaque ligne du second tableau. Dans l'étape suivante, seules les paires d'enregistrements qui remplissent la condition de la clause ON sont retournées - dans cet exemple, seules les lignes où director_id in movie est égal à id dans director. Notez que les valeurs utilisées dans la condition de jointure ne doivent pas nécessairement être des nombres. Vous pouvez également utiliser des valeurs de texte et d'autres conditions plus complexes. Vous trouverez plus d'informations dans l'article SQL INNER JOIN Explained in Simple Words. Que se passe-t-il si les enregistrements ne correspondent pas ? Que se passe-t-il si certains enregistrements de la première table ne peuvent pas être mis en correspondance avec des enregistrements de la deuxième table, ou vice versa ? Comment le site INNER JOIN fonctionne-t-il dans ce cas ? Prenons un exemple. Voici à nouveau la table movie table : idtitleproduction_yeardirector_id 1Psycho19601 2Midnight in Paris20112 3Sweet and Lowdown19932 4Talk to her20023 5The skin I live in20113 6The new house2020NULL Et voici director: idnamebirth_year 1Alfred Hitchcock1899 2Woody Allen1935 3Pedro Almodóvar1949 4Martin Scorsese1942 Voici la même requête : SELECT title, production_year, director_id, id, name, birth_year FROM movie JOIN director ON movie.director_id=director.id; Le tableau de résultats contient uniquement les enregistrements qui constituent une paire correspondante : idtitleproduction_yeardirector_ididnamebirth_year 1Psycho196011Alfred Hitchcock1899 2Midnight in Paris201122Woody Allen1935 3Sweet and Lowdown199322Woody Allen1935 4Talk to her200233Pedro Almodóvar1949 5The skin I live in201133Pedro Almodóvar1949 Si vous regardez la table moviela colonne director_id est NULL pour le film The new house. Et dans la table directorle réalisateur Martin Scorsese (id=4) n'est lié à aucune ligne de la table movie. Par conséquent, ces lignes ne sont pas affichées dans le jeu de résultats. La règle pour INNER JOIN (JOIN) est que seules les lignes avec une correspondance dans les deux tables sont retournées. Dans les autres types d'opérateurs JOIN, ce comportement est différent. Approfondissez ce sujet en lisant l'article Les types de jointures SQL expliqués. Filtrage des enregistrements dans l'ensemble de résultats Vous pouvez également filtrer les enregistrements renvoyés par JOIN. Par exemple, nous pouvons afficher uniquement les films et leurs réalisateurs dont le réalisateur est né après 1940. Voici la requête : SELECT title, production_year, director_id, id, name, birth_year FROM movie JOIN director ON movie.director_id=director.id WHERE director.birth_year>1940; Elle renvoie le résultat : idtitleproduction_yeardirector_ididnamebirth_year 4Talk to her200233Pedro Almodóvar1949 5The skin I live in201133Pedro Almodóvar1949 Une fois encore, nous avons des lignes de la table movie combinées avec des lignes de la table director. Initialement, la condition de jointure est la même (ON director.id=movie.director_id). Cependant, à l'étape suivante, les enregistrements dont la valeur est inférieure ou égale à 1940 dans la colonne birth_year sont supprimés. Ainsi, vous ne trouvez pas Woody Allen dans le jeu de résultats car il est né en 1935 (avant/moins de 1940). Alfred Hitchcock n'est pas là non plus ; il est né en 1899. Nous y sommes parvenus grâce à WHERE director.birth_year>1940. Vous voulez en savoir plus sur Les jointures en SQL? Si vous souhaitez approfondir vos connaissances, essayez notre SQL pour les débutants qui contient plus d'informations sur la jointure de tables (y compris de nombreux exercices pratiques !). Il fait partie du parcours Les Fondamentaux de SQLqui vous aidera à faire passer vos connaissances SQL au niveau supérieur. Ou peut-être connaissez-vous déjà un peu de SQL et souhaitez-vous en savoir plus sur les JOIN. Dans ce cas, je vous suggère de consulter Comment apprendre Les jointures en SQL, Les types de jointures SQL expliqués, et notre fiche d'information sur les jointures SQL. Vous pouvez également suivre notre cours Les jointures en SQL . Ensuite, mettez en pratique ce que vous savez en utilisant notre parcours d'apprentissage en ligneLa pratique du SQL . Bon apprentissage ! Tags: sql apprendre sql join