Retour à la liste des articles Articles
10 minutes de lecture

Comment lier des tables en SQL

Vous avez besoin d'afficher des données stockées dans différentes tables ? Il est alors temps d'utiliser les jointures en SQL! Ce sujet peut s'avérer difficile pour les débutants, c'est pourquoi j'ai préparé ce guide complet, étape par étape, sur la jointure de tables en SQL.

Souvent, les informations que vous souhaitez afficher sont stockées dans plusieurs tables. Dans ce cas, vous devez lier ces tables en spécifiant les lignes qui doivent être combinées avec d'autres lignes. C'est exactement ce que fait la clause JOIN. La clause JOIN en SQL est utilisée pour combiner les lignes d'une ou de plusieurs tables sur la base d'une valeur de colonne commune.

Par exemple, supposons que nous fassions des recherches sur l'architecture moderne et que nous disposions des tables suivantes batiments, architectes, et restauration_batiments :

batiments
idnomemplacementanneeid_architecte
124Maison FallingwaterMoulin Courir, PA, États-Unis193511
231Pavillon BarceloneBarcelone, Espagne192915
764Villa DirickzBruxelles, Belgique193318
850Musée GuggenheimNew York, NY, États-Unis195911
894Nouvelle galerie nationaleBerlin, Allemagne196815

architectes
idnomannee_naissanceannee_deces
11Frank lloyd Wright18671959
15Ludwig Mies Van der Rohe18861969
18Marcel Leborgne18981978

restauration_batiments
idid_batimentid_architecteannee_restauration
1124112001
2231151986
3850112008
4894152021

Supposons maintenant que nous voulions dresser la liste des bâtiments et de leurs architectes respectifs. Notez que les noms des bâtiments et les noms des architectes sont stockés dans des tables différentes. Cependant, nous disposons de la colonne id_architecte dans la table batiments et la colonne id dans la table architectes. Nous pouvons lier ces deux tables sur la base de ces colonnes apparentées. Voici la requête :

SELECT batiments.nom, architectes.nom
FROM batiments
JOIN architectes
ON batiments.id_architecte = architectes.id;

Nous spécifions d'abord les colonnes que nous voulons afficher dans la clause SELECT. Ensuite, nous lions les tables en spécifiant une table dans la clause FROM, une autre table dans la clause JOIN et les colonnes associées dans la clause ON. Voici le résultat :

nomnom
Musée GuggenheimFrank lloyd Wright
Maison FallingwaterFrank lloyd Wright
Nouvelle galerie nationaleLudwig Mies Van der Rohe
Pavillon BarceloneLudwig Mies Van der Rohe
Villa DirickzMarcel Leborgne

Ne vous inquiétez pas si la jointure de tables en SQL vous semble confuse. Nous aborderons la syntaxe des jointures SQL plus loin. Vous pouvez également vous entraîner davantage avec les jointures en SQL dans ce cours interactif.

Les jointures SQL étape par étape

Les bases de données relationnelles comprennent plusieurs tables stockant différents éléments d'information. Étant donné que l'analyse des données implique d'obtenir des informations à partir des données en les analysant de différents points de vue, la jointure de tables est très courante en SQL. Cependant, de nombreux débutants trouvent ce sujet difficile.

Si vous débutez avec les jointures en SQL, vous trouverez peut-être utile de consulter ce guide illustré sur les jointures internes SQL, qui est le type de jointure de base.

Mais maintenant, faisons une visite guidée de la syntaxe des JOIN.

Étape 1. Identifier les tables à lier

Nous commençons toujours par identifier les tables qui contiennent les informations à afficher. Dans l'exemple ci-dessus, nous voulions afficher les noms des bâtiments ainsi que les noms de leurs architectes. Puisque les noms des bâtiments sont stockés dans la table batiments et les noms des architectes sont stockés dans la table architectes, nous avons lié ces deux tables pour afficher les informations nécessaires.

Un autre exemple pourrait être la liste des restaurations - plus précisément, le nom du bâtiment et l'année de la restauration. Puisque le bâtiment le nom n'est stocké que dans la table des bâtiments et que l'année de restauration n'est disponible que dans la table restauration_batiments, nous devons lier ces deux tables pour afficher les informations souhaitées.

Dans l'exemple de requête, les tables sont spécifiées comme suit :

FROM batiments
JOIN restauration_batiments

Pour les JOIN simples, l'ordre des tables n'a pas d'importance.

Étape 2. Identifier la condition de jointure

L'étape suivante consiste à indiquer à la base de données quelles lignes doivent être liées à quelles autres lignes. C'est ce qu'on appelle la condition de jointure. En général, la condition de jointure est l'égalité, ce qui signifie que vous spécifiez les colonnes que les tables ont en commun et que vous placez un signe égal entre ces colonnes. Cette condition est placée après le mot-clé ON :

ON batiments.id_architecte = architectes.id

Notez que la plupart des bases de données ont une convention de dénomination cohérente ; vous devez connaître les conventions de votre base de données pour travailler avec efficacement. En général, la convention consiste à appeler la première colonne id ou un nom similaire et à l'utiliser comme identifiant unique pour chaque enregistrement. Cet identifiant unique est également appelé clé primaire. Toutes les tables de notre exemple (c.-à-d batiments, architectes, et restauration_batiments) ont la colonne id comme clé primaire.

Ensuite, il est courant qu'une table possède une colonne qui fasse référence à une autre table, comme la colonne id_architecte dans la table batiments ou les colonnes id_batiment et id_architecte de la table restauration_batiments. Ces colonnes sont appelées clés étrangères.

Il est très courant de lier des tables en utilisant la clé primaire d'une table, qui est la clé étrangère de l'autre table. Pour répertorier les bâtiments avec leurs architectes, nous avons lié les tables respectives en utilisant la clé primaire de la table architectes (c.-à-d. id) et la clé étrangère de la table batiments (c.-à-d. id_architecte, qui pointe vers la table architectes ). Si nous voulions lister les bâtiments avec l'année de restauration, nous relierions les tables batiments et restauration_batiments en utilisant la clé primaire de la table des bâtiments (c.-à-d. id) et la clé étrangère correspondante de la table restauration_batiments (c'est-à-dire id_batiment).

Dans certains cas, une clé primaire peut être définie sur plusieurs colonnes. Si la table de référence comprend également une clé étrangère à deux colonnes, vous pouvez relier les tables à l'aide d'une condition JOIN avec deux égalités. Par exemple, au lieu d'une colonne id dans la table architectes, nous pourrions avoir une clé primaire composite composée de deux colonnes : (1) id_style, qui fait référence au style architectural (par exemple, moderne, contemporain, etc.) et (2) id_architecte, qui fait référence à l'identifiant d'un architecte particulier travaillant dans ce style. En supposant que la table batiments comprend désormais également les colonnes id_style et id_architecte, nous pouvons lier les tables batiments et architectes à l'aide de la condition JOIN suivante :

ON batiments.id_style = architectes.id_style AND
   batiments.id_architecte = architectes.id_architecte

Notez également que si la condition d'égalité est la plus courante pour lier des tables en SQL, vous pouvez utiliser d'autres conditions pour lier des tables. C'est ce qu'on appelle une jointure non équivoque ; vous trouverez des exemples de jointures non équivoques dans ce guide pratique.

Étape 3. Faire référence aux colonnes de manière appropriée

Lorsque vous affichez des données provenant de plusieurs tables, vous devez être très prudent lorsque vous faites référence aux colonnes. Il se peut que des colonnes portent le même nom dans différentes tables. (Nos trois tables ont une colonne appelée id.) Par conséquent, lorsque vous faites référence à une colonne particulière, vous devez d'abord spécifier le nom de la table, puis utiliser un point et enfin inclure le nom de la colonne (par exemple, batiments.id_architecte). Les mêmes règles s'appliquent pour nommer les colonnes dans la condition ON, la clause SELECT ou toute autre clause de la requête.

Toutefois, si le nom de la colonne n'est pas ambigu (c'est-à-dire qu'il n'est utilisé que dans une seule table), nous pouvons spécifier uniquement le nom de la colonne et omettre le nom de la table. Par exemple, si nous voulons afficher l'année de chaque bâtiment ainsi que son nom et son architecte, nous pouvons utiliser la requête suivante :

SELECT batiments.nom, architectes.nom, annee
FROM batiments
JOIN architectes
ON batiments.id_architecte = architectes.id;

Puisque la colonne année n'est présente que dans la table batiments, la base de données sait quelle colonne nous voulons afficher et ne nous demande pas de spécifier la table.

Étape 4. Utiliser des alias de table (facultatif)

Même si certains noms de colonnes sont uniques et peuvent être référencés sans nom de table, vous devrez toujours spécifier le nom de la table avant chaque nom de colonne dans la plupart des cas. Si le nom de la table est long, il n'est ni pratique ni lisible de le taper plusieurs fois. Dans ce cas, vous pouvez utiliser un alias de table, c'est-à-dire un nom court alternatif pour cette table dans cette requête particulière.

Vous déclarez les alias dans les clauses FROM et JOIN en plaçant l'alias après le nom complet de la table, avec un espace entre les deux. Vous utilisez ensuite l'alias partout à la place du nom complet de la table :

SELECT b.nom, a.nom
FROM batiments b
JOIN architectes a
ON b.id_architecte = a.id;

Pour que les requêtes restent lisibles et compréhensibles pour tout le monde, choisissez des noms significatifs pour les alias. En général, la première lettre du nom d'une table est utilisée comme alias (par ex. b pour batiments). Si le nom d'une table se compose de plusieurs mots, vous pouvez utiliser les premières lettres de chacun d'eux (par ex. rb pour restauration_batiments).

Étape 5. Utiliser des alias de colonnes (facultatif)

Lorsque le résultat d'une requête est affiché, les colonnes d'origine sont les noms de colonnes utilisés dans la table de résultat. Dans certains cas, vous pouvez renommer ces colonnes - ou, en d'autres termes, remplacer les noms de colonnes d'origine par des alias de colonnes.

Cette option est le plus souvent utilisée lorsque deux colonnes portant le même nom proviennent de deux tables différentes et que vous souhaitez voir clairement quel type d'information est affiché dans chaque colonne du résultat.

Par exemple, vous avez peut-être remarqué que dans la table de résultat de notre toute première requête, les deux colonnes s'appellent nom ; nous devons examiner le contenu de la table pour comprendre quelle colonne répertorie les bâtiments et quelle colonne répertorie les architectes. Remplaçons les noms originaux par des alias significatifs. Pour ce faire, nous déclarons les alias des colonnes dans l'instruction SELECT, après le mot-clé AS :

SELECT b.nom AS bâtiment, a.nom AS architecte
FROM batiments b
JOIN architectes a
ON b.id_architecte = a.id;

Nous obtenons maintenant le résultat suivant :

bâtimentarchitecte
Musée GuggenheimFrank lloyd Wright
Maison FallingwaterFrank lloyd Wright
Nouvelle galerie nationaleLudwig Mies Van der Rohe
Pavillon BarceloneLudwig Mies Van der Rohe
Villa DirickzMarcel Leborgne

C'est beaucoup mieux, n'est-ce pas ?

Notez que vous pouvez renommer n'importe quelle colonne, pas nécessairement celles qui portent le même nom. De plus, l'alias de colonne n'influence que l'affichage du résultat ; il ne peut pas être utilisé comme nom de colonne dans d'autres parties de la requête.

Pour conclure sur les jointures en SQL !

Dans le monde réel, il est souvent nécessaire de combiner et d'analyser des données provenant de deux tables ou plus. C'est là que les jointures SQL entrent en jeu ! Pour lier deux tables en SQL, vous devez écrire une requête en suivant les étapes suivantes :

  1. Identifier les tables à lier.
  2. Identifier la condition de jointure.
  3. Faire référence aux colonnes de manière appropriée.
  4. (Facultatif) Utiliser des alias de tables pour rendre la requête plus lisible.
  5. (Facultatif) Utiliser des alias de colonne pour rendre le résultat lisible.

Après avoir lié les tables nécessaires, vous pouvez utiliser WHERE, GROUP BY, HAVING, ORDER BY et d'autres clauses SQL de la même manière que pour une requête portant sur une table unique.

Dans cet article, nous avons abordé les bases de la jointure de tables en SQL. Cependant, il y a beaucoup plus à apprendre. Nous avons utilisé des exemples de jointures internes uniquement, mais il existe plusieurs autres types de jointures en SQL. Consultez notre cours Les jointures en SQL – il contient 93 exercices interactifs qui couvrent tous les types courants de jointures, y compris les auto-jointures, les jointures non-equi, et plus encore. Pour en savoir plus sur le cours, consultez cet article de présentation générale.

Si vous voulez devenir vraiment confiant avec les jointures SQL, essayez notre parcours d'apprentissage La pratique du SQL. Il comprend des cours qui vont au-delà de des jointures en SQL; au total, vous devrez relever 341 défis de codage. C'est BEAUCOUP de pratique !

Merci de votre lecture et bon apprentissage !