Retour à la liste des articles Articles
12 minutes de lecture

Conseils sur les JOIN SQL pour les débutants

Si vous êtes un débutant et que vous voulez savoir comment commencer à utiliser Les jointures en SQL dans vos requêtes, vous êtes au bon endroit.

L'utilisation de la clause SQL JOIN est nécessaire si vous souhaitez interroger plusieurs tables. Tôt ou tard, vous serez amené à utiliser plus d'une table dans une requête. C'est la nature des bases de données relationnelles en général : elles sont constituées de données qui sont généralement enregistrées dans plusieurs tables, lesquelles forment à leur tour une base de données. Une fois que vous vous êtes familiarisé avec les requêtes SQL de base, il est judicieux de commencer à apprendre la clause JOIN. Outre les conseils donnés dans cet article, notre cours Les jointures en SQL peut vous y aider.

Dans cet article, je vais vous donner quatre conseils pour utiliser la clause JOIN. Mais d'abord, laissez-moi vous montrer les tables avec lesquelles nous allons travailler.

Apprenez à connaître les tables

Pour vous aider à utiliser JOINs, j'utiliserai trois tables :

  • manufacturer
  • product_type
  • product

La table manufacturer contient les attributs suivants :

La table manufacturer contient les attributs suivants :

  • id - Le numéro d'identification du fabricant dans la base de données.
  • manufacturer_name - Le nom du fabricant.

La deuxième table est product_type, qui contient les attributs suivants :

  • id - L'ID du type de produit.
  • type_name - Le nom du type de produit.

La dernière table est la table product, qui possède quatre attributs :

  • id - L'ID du produit.
  • product_name - Le nom du produit.
  • type - Le type du produit ; fait référence à la table
  • manufactured_by - Le nom du fabricant du produit ; fait référence à la table.

C'est le moment de la première astuce !

Conseil n°1 : utilisez la syntaxe JOIN explicite

Vous vous demandez probablement ce que cela signifie ! Ne vous inquiétez pas, tout va s'éclaircir dans quelques instants.

Comme vous le savez, la clause JOIN est utilisée pour combiner ou joindre des données provenant de deux tables ou plus. Cependant, ce n'est pas la seule façon de joindre des tables. Il existe également une ancienne syntaxe - antérieure à SQL-92 - dans laquelle les tables sont jointes en les énumérant dans la clause FROM. Cette syntaxe est utilisée par de nombreux débutants, ce qui est très bien et permet de faire exactement le même travail qu'une syntaxe JOIN explicite. Mais l'apprentissage de la syntaxe JOIN explicite est payant à long terme. Elle présente plusieurs avantages par rapport à l'énumération des tables dans la clause FROM, dont je parlerai plus loin dans cet article.

Je vais vous montrer comment fonctionnent les jointures de tables non explicites. Disons que vous voulez obtenir une liste de produits avec le nom de leur fabricant. Voici comment procéder en listant deux tables dans la clause FROM:

SELECT	product.id,
		product.product_name,
		manufacturer.manufacturer_name
FROM product, manufacturer
WHERE product.manufactured_by = manufacturer.id;

J'ai d'abord listé les colonnes que je veux dans le résultat. Il s'agit de id et product_name de la table product et manufacturer_name du tableau manufacturer. Ensuite, j'ai listé à la fois le product et la table manufacturer dans la clause FROM. Enfin, j'ai indiqué que la colonne manufactured_by de la table product doit être égale à la colonne id de la table manufacturer.

Le résultat ?

idproduct_namemanufacturer_name
1SuperFXQuazySoftware
2UnterBDieBeste
3HyperXYZFabricaInfinita
4TurboRayQuazySoftware
5VeryTradeDieBeste
6BlueSkyFabricaInfinita
7DirtyGrittyQuazySoftware
8SmoothUndertakerDieBeste
9HelioTrollFabricaInfinita

Vous pouvez obtenir le même résultat en utilisant l'instruction JOIN:

SELECT	product.id,
		product.product_name,
		manufacturer.manufacturer_name
FROM product JOIN manufacturer 
ON product.manufactured_by = manufacturer.id;

La partie SELECT est la même dans les deux requêtes. Mais au lieu de simplement énumérer deux tables dans la clause FROM, je les ai jointes en écrivant explicitement la clause JOIN. Si vous écrivez cette clause, il est nécessaire de préciser quelles colonnes seront utilisées lors de la connexion des deux tables. Pour ce faire, utilisez la clause ON et connectez la colonne manufactured_by de la table product avec la colonne id de la table manufacturer. Si vous regardez de plus près, vous remarquerez que la clause ON fonctionne comme la clause WHERE de la requête précédente.

Pourquoi est-ce que je recommande d'utiliser une déclaration explicite JOIN? Tout d'abord, cette méthode vous permet de voir facilement quel type de jointure est utilisé pour combiner les tables. Il existe quatre types de jointures (jointure interne, jointure gauche, jointure droite et jointure complète), dont je parlerai plus loin. Lorsque le type de jointure est explicitement indiqué dans la requête, il est plus facile de comprendre ce que fait la requête.

L'autre raison d'utiliser la syntaxe explicite JOIN est de voir la différence entre les conditions de jointure et les conditions de filtrage. La clause WHERE étant utilisée pour filtrer les données, il peut être déroutant de l'utiliser pour joindre des tables.

L'utilisation de JOIN explicites présente d'autres avantages que je n'ai pas la place d'aborder. Pour plus de détails, consultez cet article, qui traite des avantages de Les jointures en SQL.

Si vous avez besoin de récapituler vos connaissances de base en SQL avant de passer à autre chose, notre cours SQL pour les débutants pourrait être idéal pour cela. Vous pouvez également utiliser sa section JOIN pour commencer à apprendre comment joindre des tables.

Conseil n° 2 : utilisez des alias de table

Pour vous montrer ce que j'entends par les alias et pourquoi ils sont utiles, laissez-moi vous montrer à quoi ressemble une requête sans eux. Si je voulais répertorier tous les produits et leurs noms de type de produit, voici une façon de procéder :

SELECT	product.id,
		product.product_name,
		product_type.type_name
FROM product 
JOIN product_type 
ON product.type = product_type.id;

Tout d'abord, l'explication de la requête. Comme l'exemple précédent, cette requête sélectionne les colonnes id et product_name dans la table. product. Elle sélectionne également la colonne type_name dans le tableau product_type. Les tables product et product_type sont jointes sur le type de colonne de la table product et la colonne id de la table product_type.

Voici le résultat :

idproduct_nametype_name
1SuperFXServer
2UnterBServer
3HyperXYZServer
4TurboRayLaptop
5VeryTradeLaptop
6BlueSkyLaptop
7DirtyGrittySoftware
8SmoothUndertakerSoftware
9HelioTrollSoftware

Même si cette requête n'est pas compliquée, son écriture est fastidieuse. Chaque fois que je veux faire référence à la table, je dois écrire son nom complet. Et comme si cela ne suffisait pas, il y a aussi une table dont le nom est composé de deux mots et d'un trait de soulignement. Imaginez s'il y avait plus de tables et des noms plus longs ! Cependant, il existe un moyen de vous faciliter la vie. Au lieu d'écrire les noms complets des tables, vous pouvez attribuer à chacune d'elles un alias :

SELECT	p.id,
		p.product_name,
		pt.type_name
FROM product p 
JOIN product_type pt 
ON p.type = pt.id;

Il s'agit exactement de la même requête que ci-dessus, mais elle utilise des alias de table au lieu des noms complets. Regardez ! J'ai attribué les alias dans les clauses FROM et JOIN. Vous remarquerez la différence : la table product s'appelle désormais pet la table product_type s'appelle maintenant pt. Bien entendu, les noms des tables ayant changé, il faut utiliser ces nouveaux noms pour sélectionner les colonnes id, product_name et type_name.

Je pense que la requête est maintenant beaucoup mieux. Et c'était vraiment plus facile de l'écrire ! Encore un conseil : utilisez des alias significatifs ! La pratique habituelle consiste à utiliser la première ou les deux premières lettres du nom de la table ou la première lettre de chaque mot du nom de la table. Votre alias doit être aussi court que possible, mais il doit aussi vous sembler être un choix "naturel" pour un alias ; vous devez être capable de savoir immédiatement quel alias fait référence à quelle table.

Conseil n°3 : connaître la différence entre les différents types de JOIN

J'ai déjà mentionné qu'il existe quatre types de base de jointure ( JOIN ) :

  • INNER JOIN
  • LEFT JOIN
  • RIGHT JOIN
  • FULL OUTER JOIN

La clause INNER JOIN renvoie uniquement les enregistrements correspondants qui sont identiques dans les deux tables. Notez que INNER JOIN est identique à JOIN.

La clause LEFT JOIN renvoie tous les enregistrements de la table de gauche (la première table, placée après FROM) et uniquement les enregistrements correspondants de la table de droite (la deuxième table, placée après JOIN).

D'autre part, RIGHT JOIN renvoie tous les enregistrements de la table de droite et uniquement les enregistrements correspondants de la table de gauche.

Enfin, FULL OUTER JOIN renvoie tous les enregistrements des deux tables. Tous les enregistrements qui ne correspondent pas sont remplis avec les valeurs de NULL. Cette jointure renvoie potentiellement une énorme quantité de données. Notez que FULL OUTER JOIN est identique à FULL JOIN.

Vous trouverez une explication plus détaillée mais adaptée aux débutants dans cet article sur les types de jointures SQL.

Je sais qu'il peut être difficile de se souvenir de tout, surtout si vous êtes un débutant ou si vous n'utilisez pas les jointures très souvent. Mais vous n'avez pas besoin de vous souvenir de tout, car il existe l'antisèche SQL JOIN. Vous pouvez l'enregistrer ou l'imprimer et l'utiliser chaque fois que vous utilisez la clause JOIN ou que vous souhaitez apprendre quelque chose de nouveau en un clin d'œil.

Dans la pratique, vous utiliserez le plus souvent INNER JOIN et LEFT JOIN, alors concentrons-nous sur ces deux clauses. Vous avez vu comment utiliser INNER JOIN dans les exemples précédents. Laissez-moi maintenant vous montrer comment fonctionne LEFT JOIN.

Dans cet exemple, nous allons énumérer tous les types de produits et les produits appartenant à chaque catégorie. Vous pourriez le faire de cette façon :

SELECT	pt.id,
		pt.type_name,
		p.product_name
FROM product_type pt 
LEFT JOIN product p 
ON pt.id = p.type;

Cette requête sélectionne d'abord les colonnes souhaitées ; rien de nouveau ici. Ensuite, elle joint les deux tables et leur attribue des alias. J'ai joint la table en utilisant quelque chose de nouveau : l'instruction LEFT JOIN. Pour rappel, cette jointure sélectionne toutes les lignes de la table de gauche (product_type) et les lignes correspondantes de la table de droite (product). C'est exactement ce dont j'avais besoin ; jetez-y un coup d'oeil :

idtype_nameproduct_name
1SoftwareDirtyGritty
1SoftwareSmoothUndertaker
1SoftwareHelioTroll
2LaptopTurboRay
2LaptopVeryTrade
2LaptopBlueSky
3ServerSuperFX
3ServerUnterB
3ServerHyperXYZ
4ScooterNULL
5PrinterNULL

Notez qu'il n'y a pas de produits pour les catégories "Scooter" et "Imprimante". Dans les cas où il n'y a pas de lignes correspondantes dans la bonne table, le résultat sera NULL.

Conseil n° 4 : définissez des jointures multiples

Vous n'êtes pas limité à la jointure de deux tables ; vous pouvez joindre trois tables ou plus. Laissez-moi d'abord vous montrer comment le faire, puis je vous donnerai quelques conseils utiles.

Votre tâche est de lister tous les produits avec leur type de produit et le nom du fabricant. Ce code va le faire :

SELECT	p.id,
		p.product_name,
		pt.type_name,
		m.manufacturer_name
FROM product p 
JOIN product_type pt
	ON p.type = pt.id 
JOIN manufacturer m 
	ON p.manufactured_by = m.id;

Comme dans les exemples précédents, ce code sélectionne d'abord les colonnes qui seront affichées dans le résultat. La table product est joint à la table product_type; vous avez déjà pratiqué cela. OK, mais maintenant vous avez besoin des données de la table manufacturercomment les joindre ? Il vous suffit d'écrire une autre clause JOIN et de spécifier la table souhaitée.

Cependant, même si la jointure vient après la table product_typecela ne signifie pas que la table manufacturer est jointe à cette table, du moins dans ce cas. Non, elle est jointe à la table product. C'est évident d'après les colonnes que j'ai spécifiées ; les tables sont connectées via les colonnes manufactured_by de la table product et id de la table manufacturer.

Voici le résultat :

idproduct_nametype_namemanufacturer_name
1SuperFXServerQuazySoftware
2UnterBServerDieBeste
3HyperXYZServerFabricaInfinita
4TurboRayLaptopQuazySoftware
5VeryTradeLaptopDieBeste
6BlueSkyLaptopFabricaInfinita
7DirtyGrittySoftwareQuazySoftware
8SmoothUndertakerSoftwareDieBeste
9HelioTrollSoftwareFabricaInfinita

Lorsque vous joignez plusieurs tables, c'est une bonne idée de faire un plan des tables que vous voulez joindre. Faites un petit dessin ; il est plus facile de visualiser les jointures de cette façon. C'est particulièrement pratique si vous effectuez une jointure à gauche ou à droite. Vous n'aurez pas à l'imaginer ; la table que vous dessinez à gauche est votre table de gauche et LEFT JOIN vous donnera toutes les données qu'elle contient. La table que vous dessinez à droite est la table de droite. Cela semble évident, mais il est plus difficile de l'imaginer sans dessiner, surtout si vous êtes un débutant. Le dessin peut être quelque chose d'aussi simple que ceci :

Dessiner

Une autre astuce consiste à énumérer les colonnes dans l'instruction SELECT dans le même ordre que celui dans lequel vous joignez les tables. Si vous regardez la requête ci-dessus, les colonnes proviennent des tables product, product_type, et manufactureret , respectivement. Les tables sont jointes précisément dans le même ordre. En procédant ainsi, votre code sera plus lisible et plus facile à modifier.

Enfin et surtout, joignez toujours les tables dans une sorte de chaîne. En d'autres termes, chaque table que vous joignez doit être jointe à la ou aux tables qui sont déjà jointes dans votre requête. Si vous joignez deux tables et décidez ensuite d'en joindre une autre, la troisième table ne doit pas être laissée "en suspens", sans lien avec les tables précédentes. Assurez-vous que les conditions de ON lient la nouvelle table aux tables précédemment jointes. Voici comment NE PAS le faire :

Dessiner

Vous avez appris beaucoup de choses. Ce n'est pas tout ce que vous devez savoir sur la jointure de trois tables, bien sûr. Il y a des détails que je n'ai pas mentionnés et qui sont bien expliqués dans cet article sur les jointures multi-tables. Et maintenant que vous savez ce qu'est une JOINTURE GAUCHE et la jonction de plusieurs tables, pourquoi ne pas apprendre à faire une JOINTURE GAUCHE de plusieurs tables ?

L'apprentissage de ces notions a-t-il été enrichissant ?

Avec ces conseils sur l'utilisation des jointures en SQL, j'ai essayé de rendre vos premiers pas aussi faciles que possible. Vous avez appris à joindre deux tables en utilisant à la fois la syntaxe explicite JOIN et la liste des tables dans la clause FROM. En outre, vous avez appris à utiliser les alias et à connaître les différentes jointures. Enfin, je vous ai montré comment joindre trois tables. Je pense que vous avez fait un grand pas en avant en très peu de temps. Félicitations !

Alors, comment mettre en pratique tous ces conseils ? Cet article sur la pratique de Les jointures en SQL vous aidera à trouver l'approche qui vous convient le mieux. Vous pouvez également vous entraîner en utilisant notre SQL pour les débutants ou Les jointures en SQL. Tout dépend du niveau de détail que vous souhaitez atteindre.

Vous souhaitez partager votre expérience en matière de jointure de tableaux ? La section des commentaires vous attend !