Retour à la liste des articles Articles
9 minutes de lecture

JOINs SQL pour les débutants

Vous êtes probablement déjà familiarisé avec les requêtes SQL simples, telles que SELECT * FROM table. Vous vous demandez maintenant ce qu'il faut faire lorsque vous avez plusieurs tables et que vous voulez les joindre. Exactement ! JOIN est la clé. Dans ce tutoriel Les jointures en SQL pour les débutants, vous apprendrez à relier les données de plusieurs tables.

Qu'est-ce que Les jointures en SQL?

Les bases de données ont généralement plus d'une table. JOINs est une construction SQL utilisée pour joindre les données de deux ou plusieurs tables. Lorsque vous souhaitez utiliser les colonnes de deux tables dans un tableau de résultats, la façon la plus simple de le faire est d'écrire une requête JOIN.

La syntaxe d'une requête SQL JOIN est la suivante :

SELECT * 
FROM table1
JOIN table2
  ON table1.id1=table2.id2

Comme il s'agit d'un tutoriel SQL JOINs pour les débutants, commençons par les bases. Nous allons passer en revue les éléments individuellement.

Après le mot-clé FROM, vous écrivez le nom de la première table dont vous voulez extraire des colonnes. Ensuite, vous utilisez le mot-clé JOIN, suivi du nom de la deuxième table que vous voulez utiliser.

Ensuite, l'instruction ON indique à la requête sur quelles colonnes les données doivent être jointes. (Il s'agit généralement d'une déclaration ID). Dans la syntaxe ci-dessus, nous joignons les tables en utilisant id1 à partir de table1 et id2 à partir de table2. Cela s'écrit table1.id1 et table2.id2 - après le nom de la table, il y a un point, puis le nom de la colonne.

Il convient de préciser que les colonnes sur lesquelles nous joignons les données ne se présentent pas toujours sous la forme d'un ID. Elles ne doivent pas nécessairement porter le même nom. Par exemple, il est possible de joindre deux tables basées sur des clés appelées orders.post_code et cities.zip_code. Comme vous pouvez le constater, il ne s'agit pas d'un ID et les noms de colonnes pour les codes postaux sont également différents. Cependant, les deux colonnes contiennent des codes postaux ; deux champs correspondants sont nécessaires pour créer un SQL JOIN.

JOINT INTÉRIEUR

Poursuivons avec notre guide Les jointures en SQL pour les débutants. Nous allons voir comment Les jointures en SQL fonctionnent dans un exemple simple. Supposons que nous voulions savoir quel artiste a enregistré une certaine chanson. Dans ce modèle de données de base, il n'y a que deux tables : song et artist. La table song contient les colonnes song_id, song_title et artist_id. La table artist se compose de artist_id et artist_name. Comme nous pouvons le voir, artist_id se trouve dans les deux tables ; nous pouvons l'utiliser pour les joindre.

tab-1

Le plus simple JOIN (également appelé INNER JOIN) prend la table de gauche et fait correspondre les informations de chaque ligne de la table de droite en utilisant artist_id. Ainsi, la première chanson, "Dancing Queen", a un artist_id égal à "04" ; dans la table artist, "04" est attribué à "ABBA".

Comme vous pouvez le voir dans le tableau artist, il n'y a pas de artist_id égal à "06", qui est attribué à la chanson "Rolling in the Deep". Dans le tableau des résultats, seules les chansons correspondant à un artist_name sont affichées. Il n'y a pas non plus de chansons de Michael Jackson dans le tableau de résultats, car il n'y a pas de chanson de ce type dans le tableau song.

N'oubliez pas que INNER JOIN sélectionne toutes les lignes des deux tableaux, pour autant qu'il y ait une correspondance entre les colonnes des deux tableaux.

Voici le code :

SELECT *
FROM song
JOIN artist
  ON song.artist_id=artist.artist_id
onglet 2

LEFT JOIN

Le deuxième type de jointure dont nous allons parler dans ce tutoriel pour débutants sur Les jointures en SQL est la LEFT JOIN. Elle prend toujours la première table (c'est-à-dire la table située juste après le mot-clé FROM ) comme un tout (tous les enregistrements de la première table). Elle ne prend que les enregistrements correspondants dans la deuxième table. S'il n'y a pas d'information correspondante, une valeur NULL est renvoyée. Cela signifie qu'il n'y a pas d'informations disponibles pour ce site particulier ID.

Regardez à nouveau la table artist. Il n'y a pas de artist_name avec un artist_id égal à "06". C'est pourquoi la chanson "Rolling in the deep" n'apparaît pas dans le résultat de la recherche sur INNER JOIN. Alors qu'elle figure dans l'exemple LEFT JOIN ci-dessous, elle a des valeurs NULL pour artist_id et artist_name.

Voici l'instruction SQL LEFT JOIN:

SELECT *
FROM song
LEFT JOIN artist
  ON song.artist_id=artist.artist_id
tab-3

JOINT DROIT

Le type de jointure suivant dans notre tutoriel Les jointures en SQL pour les débutants est le RIGHT JOIN. Contrairement au LEFT JOIN, il prend tous les enregistrements de la deuxième table (celle qui suit immédiatement le mot-clé JOIN ) et seulement les enregistrements de la première table qui ont des artist_idcorrespondants. Dans ce cas, il n'y a pas de chansons de Michael Jackson dans la base de données, donc il y a des NULLs placés pour ces song_ids, song_titles et artist_ids. Et maintenant "Rolling in the Deep" a disparu, car dans la table de droite (artist) il n'y a pas de artist_id égal à "06".

Voici le code :

SELECT *
FROM song
RIGHT JOIN artist
  ON song.artist_id=artist.artist_id
tab-4

FULL JOIN

Le dernier type de JOIN dont nous allons parler dans notre guide Les jointures en SQL pour débutants est le FULL JOIN. Il s'agit d'une combinaison de LEFT JOIN et RIGHT JOIN, car il prend tous les enregistrements des deux tables et place des valeurs NULL là où les informations de la table correspondante sont manquantes. Dans l'exemple ci-dessous, vous pouvez voir NULLs pour artist_id égal à "06" (oui, ce devrait être Adele!) et NULLs pour les chansons de Michael Jackson avec artist_id égal à "05".(Oui, "Billie Jean" existe, mais SQL ne le sait pas !)

SELECT *
FROM song
FULL JOIN artist
  ON song.artist_id=artist.artist_id
onglet 5

Exemple concret : Magasins et produits

Nous allons maintenant vous montrer comment utiliser Les jointures en SQL dans un exemple commercial réel. Cette fois, notre tutoriel Les jointures en SQL pour les débutants utilisera un exemple tiré du secteur de la vente au détail. Imaginez que vous dirigez un magasin et que vous voulez voir quels produits sont en rupture de stock. Vous voulez également vérifier si votre gestionnaire de base de données garde les choses en ordre. Supposons que la base de données ne comporte que deux tables : product et stock.

onglet 6

Comme vous pouvez le voir, la première table (product) a deux colonnes : product_id et product_name. Si tout est en ordre, il devrait y avoir un ID et un nom pour tous les produits que nous avons vendus. Le deuxième tableau (stock) représente le stock actuel du magasin - par exemple, il y a sept articles pour la valeur "100" de product_id.

Regardez de plus près la colonne product_id dans les deux tables. Certains identifiants sont présents dans les deux tables(102, 105, 107) ; certains ne sont présents que dans la table de gauche(101, 103, 106) ; et certains ne sont présents que dans la table de droite(100, 104). Ces informations seront utilisées dans les exemples ci-dessous.

Ne pas tenir compte des informations manquantes

Lorsque nous voulons voir uniquement les produits actuellement en stock et que nous connaissons déjà tous leurs noms, nous pouvons utiliser une instruction INNER JOIN. Elle sélectionne uniquement les enregistrements dont l' identifiant est présent dans les deux tables que nous voulons joindre. En conséquence, nous obtenons une liste de trois noms de produits et de leurs quantités. Comme vous pouvez le constater, vous pouvez utiliser les instructions JOIN et INNER JOIN pour faire la même chose. JOIN est une abréviation de INNER JOIN. Les autres JOINdoivent être spécifiés explicitement.

UN INNER JOIN

SELECT
  product_name,
  stock.product_id,
  quantity
FROM products
INNER JOIN stock
  ON product.product_id = stock.product_id
tab-7

Quels produits doivent être commandés ?

Supposons que nous voulions vérifier quels produits sont en rupture de stock et doivent être commandés à nouveau. Pour ce faire, nous utiliserons un LEFT JOIN pour faire correspondre les enregistrements de la table product à ceux de la table stock. Nous pouvons visualiser cette opération en plaçant la table product à gauche et la table stock à droite. Nous recherchons ensuite les enregistrements des deux tables qui correspondent à product_id.. Les enregistrements qui ne correspondent pas aux champs de product_id reçoivent un NULL(voir le tableau de résultats ci-dessous).

JOINT GAUCHE

SELECT
  product_name,
  stock.product_id,
  quantity
FROM products
LEFT JOIN stock
  ON product.product_id = stock.product_id
tab-8

Ainsi, dans la table stock, aucune valeur de product_id n'est égale à "101", "103" ou "106". C'est pourquoi la table affiche NULLs pour le jus d'orange, le café et les céréales. Ce sont les produits que nous devons commander.

Savons-nous ce que nous vendons ?

Le rôle du gestionnaire de base de données est de veiller à ce que tout soit en ordre dans nos bases de données. Disons que nous voulons vérifier s'il fait du bon travail. Nous allons vérifier si la table product est mise à jour avec de nouveaux produits. Pour cela, nous utiliserons un RIGHT JOIN.

RIGHT JOIN prend tous les enregistrements de la table stock et les place à droite (comme le suggère RIGHT JOIN ). Ensuite, il affiche uniquement les enregistrements de la table product qui ont une correspondance avec product_id.

UNE JOINTURE DROITE

SELECT
  product_name,
  stock.product_id,
  quantity
FROM products
RIGHT JOIN stock
  ON product.product_id = stock.product_id
tab-9

Afficher tout ce qui est disponible

Pour obtenir une image complète de la situation, nous pouvons vouloir voir tous les noms de produits et toutes leurs quantités dans les deux tables. Nous pouvons alors voir quels produits doivent être réorganisés et quels sont les product_idauxquels il manque un product_name. Pour cela, FULL JOIN est très utile ! Il prend tous les enregistrements de la table de gauche (product) et tous les enregistrements de la table de droite (stock) et ne fait correspondre que les enregistrements qui ont le même identifiant (product_id) ; il insère un NULL à droite s'il manque un product_name ou à gauche s'il n'y a aucun article en stock.

JOINT COMPLET

SELECT
  product_name,
  stock.product_id,
  quantity
FROM products
FULL JOIN stock
  ON product.product_id = stock.product_id
onglet 10

Vous voulez en savoir plus sur Les jointures en SQL?

Vous trouverez d'autres exemples d'utilisation de Les jointures en SQL sur notre chaîne YouTube - We Learn SQL. Consultez-la et n'oubliez pas de vous abonner.

J'espère que ce rapide Les jointures en SQL pour les débutants vous a aidé à comprendre comment joindre les données de deux tables. Si vous souhaitez en savoir plus, je vous recommande de vous inscrire à la LearnSQL.fr, où vous pourrez apprendre à utiliser SQL (et bien d'autres choses encore !) pour traiter les bases de données. Les sujets sont présentés de manière simple et très compréhensible. Essayez gratuitement les cours SQL de Vertabelo Academy dès aujourd'hui !