bases de données et cloud

Anti-jointure

En bases de données relationnelles, les jointures permettent de regrouper des enregistrements de deux tables pour lesquelles certaines valeurs correspondent. Dans se version la plus simple, c’est effectuer un produit cartésien.

Mais il existe aussi des anti-jointures : il s’agit de jointures particulières dont le résultat contient exclusivement des valeurs non jointes. Dit autrement, une anti-jointure renvoie uniquement les lignes d’une table 1 qui n’ont pas de correspondance dans la table 2.

Le résultat d’une anti-jointure permet de conserver tous les enregistrements d’une table qui ne sont pas présents dans une autre table. Comme pour les jointures, ont peut :

  • Faire une antijointure gauche : LEFT ANTI-JOIN (pour récupérer uniquement les valeurs uniquement présentes dans la table de gauche) ;
  • Faire une antijointure droite : RIGHT ANTI-JOIN (pour récupérer uniquement les valeurs uniquement présentes dans la table de droite).

On se sert des anti-jointures pour extraire des données mettant en lumière des situations ou des choses ne se sont pas produites : lorsque les clients n’ont pas finalisé une commande, lorsque les vendeurs n’ont pas transformés un prospect en client, lorsqu’un rendez-vous n’a pas été honoré, lorsqu’un document manque, lorsqu’un suivi n’a pas été effectué, lorsqu’une facture n’a pas été envoyée alors que la commande est bien partie…

La requête suivante fait une anti-jointure pour trouver les clients qui n’ont pas passé de commande en janvier 2024.

SELECT c.numauto as Client_Numauto,
c.nom as Client_nom
FROM Clients
LEFT JOIN Commandes c
ON c.numauto = c.client_numauto
AND c.Date_Commande BETWEEN '2024-01-01' AND '2024-01-31 23:59:59'
WHERE c.numauto is NULL

On a ici :

  • la table Client_Numauto dans la laquelle on souhaite afficher les noms de clients ;
  • la table commande qui fait une jointure avec la table des clients concernant la période souhaitée ;
  • enfin, la clause NULL permet d’exclure les comptes ayant passé commande.