Jointure left join avec SQL Server

Avec les jointures LEFT JOIN T-SQL Server, il est possible d’extraire des données de deux tables SQL ou plus en se basant sur les relations entre les objets. Les jointures LEFT JOIN MS SQL indiquent comment le moteur SQL doit utiliser les données d’une table pour sélectionner les lignes d’une autre table.

Une jointure peut regrouper les données de plusieurs tables, mais chaque relation est entre deux tables dans la requête. Les conditions de la requête indiquent comment relier logiquement les données entre deux tables.

Ainsi, les conditions de jointure peuvent être spécifiées dans la clause FROM ou la clause WHERE. Lorsque vous utilisez la clause FROM, c’est la relation qui filtre les données affichées.

Exemples de jointures LEFT JOIN avec SQL Server

Tout d’abord, l’objectif de l’utilisation des jointures est d’éviter de stocker les mêmes données plusieurs fois dans une base de données. C’est ce qu’on appelle la normalisation d’une base de données relationnelle. Par exemple, vous avez 2 millions de lignes de vente par an mais seulement 10 magasins physiques différents et 20 000 clients dans la base de données.

Il est préférable de stocker toutes les informations dans les tables magasins et clients une seule fois dans une table dédiée. Cela permet de réduire la taille de la base de données. Et vous améliorez également les performances.

Qu’est-ce qu’une requête de jointure T-SQL ?

Une requête de jointure est une sélection de données provenant de deux tables ou plus, liée à une condition de jointure pour filtrer les données. Elle est généralement filtrée à l’aide d’une clé primaire dans la première table. Et une clé étrangère dans les autres tables. Cela permet d’assurer la cohérence des données dans la base de données. Ce sont les clés logiques qui sont utilisées, et il n’est pas obligatoire que des contraintes physiques soient présentes dans le modèle de données.

Comment joindre les données de deux tables en SQL Server ?

Pour joindre deux tables dans SQL Serveur, c’est assez simple. Il suffit de spécifier les colonnes à afficher dans les deux tables. Utilisez ensuite la condition JOIN dans la clause FROM et la condition de filtre dans la clause WHERE.

Quels sont les différents types de jointures T-SQL disponibles avec SQL Server ? Les différents types de jointures en T-SQL sont les suivants :

  • Jointure gauche – LEFT JOIN
  • Jointure externe gauche – LEFT OUTER JOIN
  • Jointure droite – RIGHT JOIN
  • Jointure externe droite – RIGHT OUTER JOIN
  • Jointure complète – FULL JOIN
  • Jointure extérieure complète – FULL OUTER JOIN
  • Jointure interne – INNER JOIN


Nous nous concentrerons ici sur les jointures gauche ou LEFT JOIN.

Pour commencer à illustrer les différents types de jointures avec des exemples de requêtes, nous avons besoin d’un échantillon de données. Utilisons la base de données AdventureWorks, comme j’utilise la version MS SQL 2019, j’ai téléchargé la base de données [AdventureWorks2019]. Toutes les étapes sont expliquées ici avec les liens vers toutes les versions d’AdventureWorks, de SQL Server 2008 R2 à SQL Server 2019.

Considérons les tables Salesperson (vendeurs) et la table Store (magasins).

-- La table des vendeurs
SELECT TOP 15
   [BusinessEntityID], 
   [TerritoryID], 
   [SalesQuota], 
   [Bonus], 
   [CommissionPct], 
   [SalesYTD], 
   [SalesLastYear], 
   [rowguid], 
   [ModifiedDate]
FROM [Sales].[SalesPerson];

-- La table des magasins
SELECT TOP 15
   [BusinessEntityID], 
   [Name], 
   [SalesPersonID], 
   [rowguid], 
   [ModifiedDate]
FROM [Sales].[Store] 
ORDER BY [SalesPersonID];

Les tables Salesperson et Store sont liées entre elles par une contrainte physique.

Veuillez noter que la colonne SalesPersonID de la colonne [Sales].[Store] est lié à la colonne BusinessEntityID de la table [Sales].[SalesPerson]. Cette différence dans les noms des colonnes est une source de confusion.

Voici un extrait de la façon dont les deux tables, le code est tiré de l’instruction de création de table [Sales].[Store] :

ADD  CONSTRAINT [FK_Store_SalesPerson_SalesPersonID] FOREIGN KEY([SalesPersonID]) REFERENCES [Sales].[SalesPerson] ([BusinessEntityID])

Les tables salesperson et sales territory sont également liées. Script extrait du code [Sales].[SalesPerson] :

ADD  CONSTRAINT [FK_SalesPerson_SalesTerritory_TerritoryID] FOREIGN KEY([TerritoryID]) REFERENCES [Sales].[SalesTerritory] ([TerritoryID])

Exemple de requête LEFT JOIN avec SQLServeur

Par exemple, pour afficher le nom du magasin et les informations sur les ventes du vendeur, nous devons joindre la table SalesPerson et la table store. Notez que vous devez sélectionner un alias pour les tables afin de rendre la requête lisible.

La jointure LEFT JOIN utilise la première table de la clause FROM. Elle est donc la première table. Elle joint donc les données de la table de gauche aux données de la table de droite.

SELECT 
   person.[BusinessEntityID],
   store.[Name] as StoreName, 
   [TerritoryID], 
   [SalesQuota], 
   [Bonus], 
   [CommissionPct], 
   [SalesYTD], 
   [SalesLastYear], 
   person.[rowguid], 
   person.[ModifiedDate]
FROM [Sales].[SalesPerson] person
   LEFT JOIN [Sales].[Store] store 
      on person.BusinessEntityID = store.[SalesPersonID]
ORDER BY person.[BusinessEntityID];

Exemple de requête MS SQL avec LEFT OUTER JOIN (LEFT JOIN vs LEFT OUTER JOIN)

Les requêtes LEFT JOIN et LEFT OUTER JOIN sont identiques, car elles renvoient exactement le même jeu de données. Pour supprimer les données disponibles uniquement dans la table de droite, utilisez la clause WHERE et excluez les valeurs NULL. Comme dans l’exemple ci-dessous.

SELECT 
   person.[BusinessEntityID],
   store.[Name] as StoreName, 
   [TerritoryID], 
   [SalesQuota], 
   [Bonus], 
   [CommissionPct], 
   [SalesYTD], 
   [SalesLastYear], 
   person.[rowguid], 
   person.[ModifiedDate]
FROM [Sales].[SalesPerson] person
   LEFT JOIN [Sales].[Store] store 
      on person.BusinessEntityID = store.[SalesPersonID]
WHERE store.[SalesPersonID] IS NOT NULL
ORDER BY person.[BusinessEntityID];

Il semble donc qu’il n’y ai pas de différence entre LEFT JOIN et LEFT OUTER JOIN dans les jointures sqlserveur.

Comment gérer les performances des jointures avec SQL Server

En effet, pour contrôler et maintenir une bonne performance et des temps de réponse acceptables pour les requêtes de jointure, veillez à limiter les données dans l’instruction FROM.

Par exemple, limitez le nombre de lignes à analyser le plus tôt possible dans le processus. Par exemple en ajoutant un filtre dans la table de gauche et alléger ainsi la charge du plan d’exécutoin de la requête.

Enfin, cet article expose quelques exemples de requêtes sur la façon de construire des jointures LEFT JOIN avec SQL Serveur.