Accéder au contenu principal

SQL UPDATE avec JOIN : Comment cela fonctionne-t-il ?

Découvrez comment UPDATE avec JOIN en SQL simplifie les mises à jour entre tableaux dans SQL Server. Comprendre les différences entre INNER JOIN et LEFT JOIN pour des cas d'utilisation spécifiques, et explorer des alternatives en utilisant des sous-requêtes ou l'instruction MERGE.
Actualisé 16 janv. 2025  · 9 min de lecture

La cohérence des données est importante pour la fiabilité et l'intégrité des bases de données relationnelles. Lorsque vous modifiez des données existantes dans des tableaux apparentés, nous utilisons l'instruction UPDATE avec la clause JOIN pour assurer la cohérence des données. L'opération UPDATE with JOIN est prise en charge par SQL Server et permet d'assurer une synchronisation précise des données entre les tableaux.

L'opération SQL JOIN permet des mises à jour plus complexes que les opérations sur un seul tableau, grâce à des clés étrangères partagées entre les différents tableaux. L'opération UPDATE with JOIN est utile pour les développeurs et les administrateurs de bases de données car elle améliore l'efficacité et réduit les risques d'incohérence des données. 

Avant de commencer, je vous recommande de suivre le cours Introduction à SQL Server de DataCamp pour vous familiariser avec le fonctionnement des bases de données SQL Server. Ce tutoriel a été rédigé spécifiquement pour le serveur SQL. Consultez également notre tutoriel, Introduction aux jointures SQL, pour apprendre à utiliser JOIN lorsque vous travaillez avec plusieurs tableaux dans SQL.

Comment utiliser SQL UPDATE avec JOIN

Dans SQL Server, l'opération UPDATE with JOIN vous permet de mettre à jour les enregistrements d'un tableau en fonction des données correspondantes d'un autre tableau. Cette technique est particulièrement utile pour synchroniser les données de plusieurs tableaux.

Utilisation de SQL UPDATE avec INNER JOIN

La fonction INNER JOIN de SQL permet d'extraire les lignes/enregistrements contenant les données correspondantes dans les deux tableaux. Lorsqu'elle est utilisée avec l'instruction UPDATE, l'instruction INNER JOIN garantit que seuls les tableaux de la table cible qui ont des correspondances dans la table jointe sont mis à jour.

La structure typique du site UPDATE avec INNER JOIN consiste à spécifier le tableau cible qui doit être mis à jour et à définir les colonnes à mettre à jour. La structure comprend également l'utilisation du site INNER JOIN pour le relier à un autre tableau basé sur une colonne commune afin de ne mettre à jour que les enregistrements requis.

INNER JOIN exemple

Supposons que vous gériez une base de données de vente au détail dans laquelle vous devez mettre à jour un tableau Sales pour le synchroniser avec les modifications apportées au tableau Customer. Un client a récemment changé de méthode de contact préférée et vous souhaitez que ces changements se reflètent dans les deux tableaux. Vous utiliserez UPDATE avec INNER JOIN pour vous assurer que seuls les enregistrements de vente liés aux clients qui ont mis à jour leurs coordonnées sont modifiés sans affecter d'autres lignes de données.

-- Update the Sales table based on the new preferred contact methods in the Customers table
UPDATE s
SET s.ContactMethod = c.PreferredContactMethod
FROM Sales s
INNER JOIN Customers c ON s.CustomerID = c.CustomerID
WHERE c.CustomerID IN (3, 7, 9);

UPDATE avec INNER JOIN : meilleures pratiques

Lorsque vous utilisez UPDATE avec INNER JOIN, tenez compte des meilleures pratiques suivantes pour des requêtes efficaces.

  • Utilisez des index sur les colonnes de jointure : Assurez-vous que les colonnes utilisées dans la condition JOIN sont indexées pour optimiser les performances et accélérer l'exécution de la requête.

  • Limiter la portée de la mise à jour : Utilisez la clause WHERE pour vous assurer que seules les lignes pertinentes sont mises à jour et améliorer les performances de la requête.

Utilisation de SQL UPDATE avec LEFT JOIN

Une adresse LEFT JOIN est utilisée pour extraire tous les enregistrements du tableau de gauche (premier) et les enregistrements correspondants du tableau de droite (deuxième). Une requête avec LEFT JOIN renverra les résultats de NULL à partir du bon tableau s'il n'y a pas de résultats correspondants. Lorsqu'elle est utilisée avec l'instruction UPDATE, l'instruction LEFT JOIN peut mettre à jour des enregistrements même s'il n'y a pas de données correspondantes dans le second tableau, ce qui est utile pour compléter les données manquantes. Consultez notre Fiche d'aide sur les jointures SQL si vous souhaitez revoir les jointures SQL.

JOINT A LA GAUCHE exemple

Imaginons que vous gériez une base de données pour un magasin de détail en ligne. Le tableau Customers contient une liste de tous les clients, tandis que le tableau Orders contient les détails des commandes passées par certains de ces clients. Vous utiliserez le site LEFT JOIN pour récupérer et mettre à jour les détails de la commande de tous les clients, y compris ceux qui n'ont pas encore passé de commande. Cette méthode remplit les données manquantes pour les clients qui n'ont pas passé de commande avec une valeur NULL ou une valeur spécifiée.

Notre exemple avec LEFT JOIN sera un peu différent car LEFT JOIN renvoie les valeurs de NULL si aucun enregistrement correspondant n'est trouvé dans le bon tableau. C'est pourquoi il est important de savoir comment traiter ces valeurs NULLVous pouvez gérer les valeurs NULL en définissant une valeur par défaut dans les colonnes à mettre à jour. En utilisant la fonction COALESCE(), le site LEFT JOIN inclura une condition pour une valeur par défaut pour les données manquantes. La requête suivante montre comment définir une valeur par défaut pour les valeurs NULL.

-- Update all customers to set default values where OrderStatus and OrderDate are NULL
UPDATE c
SET 
    c.OrderStatus = COALESCE(o.OrderStatus, 'No Orders'),
    c.OrderDate = COALESCE(o.OrderDate, '2023-01-01')   
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;
-- Select from the updated Customers table
SELECT * 
FROM Customers;

Vous pouvez également utiliser les fonctions COALESCE() ou IFNULL() pour traiter les valeurs NULL qui impliquent des calculs avant la mise à jour des colonnes. Consultez notre tutoriel sur la fonction SQL COALESCE() pour en savoir plus.

Meilleures pratiques pour UPDATE avec LEFT JOIN

Lorsque vous utilisez UPDATE avec LEFT JOIN, tenez compte des meilleures pratiques suivantes pour des requêtes efficaces.

  • Utilisez des références explicites aux colonnes : Au lieu d'utiliser SELECT *, spécifiez explicitement les colonnes que vous souhaitez mettre à jour afin de rendre votre requête plus claire et d'éviter les mises à jour involontaires.

  • Utilisez des index sur les colonnes de jointure : Assurez-vous que les colonnes utilisées dans la condition JOIN sont indexées pour améliorer les performances de l'opération JOIN et le temps d'exécution global de la requête.

Considérations sur les performances des mises à jour SQL avec jointure

Ua compréhension des implications en termes de performances de l'utilisation de UPDATE avec JOIN dans SQL est importante pour garantir l'exécution efficace de vos requêtes. Les performances de ces opérations peuvent être influencées par plusieurs facteurs, notamment la taille des tableaux utilisés, le type de jointure utilisé et la présence d'index appropriés.

Index et vitesse d'interrogation

L'indexation des colonnes impliquées dans la condition de jointure est importante pour accélérer le processus de mise à jour. Si vous indexez les colonnes de manière appropriée, l'opération ne localisera que les tableaux correspondants lors de la jointure, réduisant ainsi le temps nécessaire à l'analyse du tableau.

Impact des grands ensembles de données

Lorsque vous travaillez avec de grands ensembles de données, l'exécution des requêtes peut être plus lente en raison d'opérations gourmandes en ressources. Prenez en compte les meilleures pratiques suivantes pour atténuer les problèmes de performance avec les grands ensembles de données. Essayez également le cursus SQL Server for Database Administrators si vous êtes amené à concevoir ou à maintenir régulièrement des bases de données dans le cadre de votre travail. 

  • Mises à jour des lots : Répartissez les mises à jour en lots plus petits afin de réduire la charge de la base de données et de mettre à jour les enregistrements de manière efficace.

  • Limiter la portée de la mise à jour : Lorsque vous utilisez la clause WHERE, vous spécifiez les lignes à mettre à jour, ce qui réduit le temps de traitement des requêtes.

Erreurs courantes et comment les éviter

Vous pouvez rencontrer certaines erreurs courantes lorsque vous utilisez UPDATE avec JOIN dans SQL Server. Ces erreurs peuvent entraîner des problèmes de performance ou la mise à jour de données non souhaitées. Voici quelques-unes de ces erreurs et comment les éviter.

Mises à jour involontaires

Si vous ne spécifiez pas correctement la condition de jointure, le site UPDATE avec JOIN mettra à jour plus d'enregistrements que prévu. Cette erreur entraînera la mise à jour d'un tableau entier au lieu du sous-ensemble requis. Pour éviter cette erreur, veillez à toujours utiliser une condition JOIN précise pour mettre à jour les lignes requises.

Produits cartésiens

Un produit cartésien se produit lorsque la condition de jointure est incorrecte ou manquante, ce qui conduit la requête à faire correspondre chaque ligne du tableau de gauche avec chaque ligne du tableau de droite. Ce problème peut ralentir l'opération d'interrogation et produire des résultats inexacts. Pour éviter cette erreur, assurez-vous toujours que la condition JOIN est correctement définie. Veillez également à indiquer les colonnes correctes pour appliquer la condition de jointure.

Alternatives à SQL UPDATE avec JOIN

Bien que UPDATE avec JOIN soit une méthode puissante pour mettre à jour des enregistrements dans des tableaux liés, il existe d'autres méthodes pour effectuer la mise à jour. Vous trouverez ci-dessous quelques options.

Sous-requêtes

Les sous-requêtes sont une alternative importante à JOIN lorsque vous souhaitez effectuer des mises à jour sur la base d'une simple condition. Avec les sous-requêtes, vous éviterez de multiplier les tableaux complexes en spécifiant la condition dans la sous-requête.

L'exemple suivant montre comment utiliser une sous-requête pour mettre à jour le tableau Sales avec le dernier CustomerStatus du tableau Customers.

-- Update the CustomerStatus in the Sales table
UPDATE Sales
-- Set the CustomerStatus in Sales to corresponding value from the Customers table
SET CustomerStatus = (
    -- Fetch CustomerStatus from the Customers table for the matching CustomerID
    SELECT CustomerStatus 
    FROM Customers 
    WHERE Customers.CustomerID = Sales.CustomerID
)
-- Update rows in Sales where a matching CustomerID exists in the Customers table
WHERE EXISTS (
    -- Subquery to check if a matching CustomerID exists in the Customers table
    SELECT 1 
    FROM Customers 
    WHERE Customers.CustomerID = Sales.CustomerID
);

Déclaration de fusion

L'instruction MERGE est une commande SQL polyvalente qui vous permet d'effectuer les opérations UPDATE, INSERT ou DELETE dans une seule requête basée sur la comparaison de deux tableaux. L'instruction MERGE est utile lorsque vous devez synchroniser des données entre deux tableaux, en gérant les lignes correspondantes et non correspondantes.

L'utilisation de l'instruction MERGE est utile car elle fournit une méthode concise pour effectuer plusieurs opérations en une seule requête. La syntaxe de la déclaration MERGE est la suivante.

-- Merge data from the source table into the target table
MERGE INTO target_table AS target
USING source_table AS source
    -- Define the common key between the source and target tables
    ON target.common_column = source.common_column
-- When a match is found in both tables based on the common key
WHEN MATCHED THEN
    -- Update the target table's column with the corresponding value from the source table
    UPDATE SET target.column = source.column
-- When a row exists in the source table but not in the target table
WHEN NOT MATCHED THEN
    -- Insert the new data into the target table
    INSERT (column1, column2) 
    VALUES (source.column1, source.column2)
-- When a row exists in the target table but not in the source table
WHEN NOT MATCHED BY SOURCE THEN
    -- Delete the row from the target table
    DELETE;

Conclusion

Il est important de comprendre comment utiliser UPDATE avec JOIN dans SQL Server pour mettre à jour efficacement les données d'un tableau à l'autre dans les bases de données relationnelles. Cette technique vous permet de mettre à jour les enregistrements d'un tableau en fonction des données correspondantes d'un autre tableau, assurant ainsi la cohérence et la synchronisation des données entre les tableaux apparentés. L'application de ces techniques et bonnes pratiques peut améliorer les opérations de votre base de données, en garantissant une gestion précise, efficace et fiable des données. 

Si vous souhaitez approfondir vos compétences en SQL, je vous recommande de consulter le cursus SQL Server Fundamentals de DataCamp pour améliorer vos compétences en analyse de données. Le cours Writing Functions and Stored Procedures in SQL Server vous aidera également à apprendre à manipuler efficacement les données dans SQL Server. Si vous préparez votre entretien SQL, je vous recommande de lire notre article de blog, 20 Top SQL Joins Interview Questions pour vous aider à vous préparer. Enfin, si vous cherchez à appliquer vos compétences en SQL dans une carrière d'ingénieur de données, envisagez également de suivre notre cursus d'ingénieur de données en Python, complété par une certification à la fin.

Devenez ingénieur en données

Devenez un ingénieur de données grâce à l'apprentissage avancé de Python
Commencez à apprendre gratuitement

Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Je crée des articles qui simplifient la science des données et l'analyse, en les rendant faciles à comprendre et accessibles.

Questions fréquemment posées sur SQL

Quel est l'intérêt d'utiliser UPDATE avec JOIN en SQL ?

UPDATE avec JOIN vous permet de mettre à jour les enregistrements d'un tableau en fonction des données correspondantes d'un autre tableau.

Quelle est la différence entre un INNER JOIN et un LEFT JOIN lorsqu'il est utilisé dans une instruction UPDATE ?

Un INNER JOIN ne met à jour que les enregistrements qui ont des lignes correspondantes dans les deux tableaux, tandis qu'un LEFT JOIN met à jour tous les enregistrements du tableau cible, y compris ceux qui n'ont pas de ligne correspondante dans le tableau joint, en complétant les données manquantes ou en traitant les valeurs NULL.

Quels sont les problèmes de performance de l'UPDATE avec JOIN en SQL ?

Les tableaux/ensembles de données volumineux peuvent affecter les performances d'interrogation de UPDATE avec JOIN, car ils nécessitent une plus grande puissance de traitement.

Quelles bases de données supportent UPDATE avec JOIN IN SQL ?

Le concept UPDATE with JOIN fonctionne avec SQL Server, MySQL et PostgreSQL, bien que la syntaxe diffère en fonction de la base de données. Oracle ne prend pas en charge UPDATE avec JOIN directement et exige une approche différente en utilisant des sous-requêtes ou l'instruction MERGE.

Quelles sont les alternatives à UPDATE avec JOIN en SQL ?

L'utilisation de sous-requêtes ou de l'instruction MERGE sont des alternatives appropriées à UPDATE avec JOIN.

Sujets

Apprenez SQL avec DataCamp

Certification disponible

cours

Jointure de données en SQL

4 hr
164.6K
Améliorez vos connaissances en SQL et apprenez à joindre des tableaux, à appliquer la théorie des ensembles relationnels et à travailler avec des sous-requêtes.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow