Fondamentaux de SQL Server : Utilisation des jointures SQL

Dans les bases de données relationnelles comme SQL Server, l’instruction SQL JOIN est utilisée pour interroger, connecter et récupérer des données de plusieurs tables en fonction des relations de données entre ces tables. Vous pouvez utiliser l’instruction SQL JOIN avec deux tables ou plus, et elle renvoie essentiellement des enregistrements ayant des valeurs correspondantes dans les différentes tables. Dans ce tutoriel, je vais expliquer comment utiliser les types de JOIN SQL les plus courants, y compris le JOIN SQL INTERNE, le JOIN SQL GAUCHE, le JOIN SQL DROIT et le JOIN SQL EXTERNE.

Les Joins SQLsont une fonctionnalité essentielle à utiliser lors du travail avec des bases de données relationnelles. Ils sont principalement exécutés en utilisant l’instruction SQL SELECT. Vous pouvez en apprendre davantage sur la manière de commencer avec l’instruction T-SQL SELECT dans mon article précédent sur SQL Server : Utilisation de SQL SELECT et des clauses WHERE et HAVING pour récupérer des données.

Publicité

JOIN SQL INTERNE

L’opération JOIN SQL INTERNE crée un ensemble de résultats en combinant des lignes ayant des valeurs correspondantes dans deux tables ou plus. Il s’agit probablement de l’opération de jointure la plus couramment utilisée en T-SQL. JOIN SQL INTERNE ne renvoie que les lignes ayant des valeurs correspondantes, et il est utilisé pour récupérer des données apparaissant dans toutes les tables.

Le diagramme suivant illustre le fonctionnement d’une opération de jointure INTERNE SQL avec deux tables.

How an SQL INNER JOIN operation works with two tables (Image credit: Petri/Michael Otey)

La syntaxe d’une jointure INTERNE est assez simple. Dans le cadre de votre instruction SELECT, vous spécifiez les deux tables à joindre et les colonnes à utiliser pour faire correspondre les lignes.

Jetons un coup d’œil à deux tables de la base de données exemple AdventureWorksLT2019. Si nous utilisons les tables SalesLT.Customer et SalesLT.SalesOrderHeader, nous pouvons utiliser une jointure INTERNE SQL pour récupérer les commandes des clients dans la table SalesLT.Customer en joignant les deux tables sur la colonne CustomerID, qui est une colonne commune aux deux tables.

Publicité

Voici la requête T-SQL que vous pouvez utiliser pour accomplir cela :

USE AdventureWorksLT2019

SELECT c.CustomerID, c.FirstName, c.LastName, soh.SalesOrderID, soh.OrderDate 
FROM SalesLT.Customer c
INNER JOIN SalesLT.SalesOrderHeader soh ON c.CustomerID = soh.CustomerID

Voici comment fonctionne la syntaxe de la jointure INTERNE SQL :

  • Ici, vous pouvez voir que nous sélectionnons les colonnes ‘CustomerID’, ‘FirstName’ et ‘LastName’ de la table SalesLT.Customer, et les colonnes ‘SalesOrderID’ et ‘OrderDate’ de la table SalesLT.SalesOrderHeader.
  • Les alias de table abrégés ‘c’ et ‘soh’ éliminent le besoin d’utiliser toujours le nom complet de la table lors de la référence aux colonnes.
  • Nous utilisons le mot-clé INNER JOIN pour joindre les deux tables. Le mot-clé ON spécifie la colonne à utiliser pour la jointure. Ici, il s’agit de la colonne ‘CustomerID’.

Cette requête renverra un ensemble de résultats comprenant les colonnes « CustomerID », « FirstName », « LastName », « SalesOrderID » et « OrderDate » pour chaque client ayant passé une commande, comme vous pouvez le voir dans la figure suivante.

The result of our SQL INNER JOIN query (Image credit: Petri/Michael Otey)

SQL LEFT JOIN

L’opération SQL LEFT OUTER JOIN créera également un ensemble de résultats en faisant correspondre les lignes entre nos deux tables précédentes. Avec le SQL LEFT JOIN, cependant, si aucune donnée ne correspond de la table de gauche, il affichera ces enregistrements avec des valeurs nulles.

Publicité

Ceci est utile lorsque vous souhaitez inclure toutes les lignes de la première table et seulement les lignes correspondantes de la deuxième table, même s’il n’y a pas de correspondance dans la table de droite. Le SQL LEFT OUTER JOIN renverra des valeurs nulles dans les colonnes de la table de droite s’il n’y a pas de correspondance.

Le diagramme suivant illustre le fonctionnement d’une opération SQL LEFT OUTER JOIN avec deux tables.

How an SQL LEFT OUTER JOIN works with two tables (Image credit: Petri/Michael Otey)

La syntaxe pour le LEFT JOIN est également assez simple. Dans le cadre de l’instruction SELECT, vous spécifiez les deux tables à joindre, les colonnes à utiliser pour faire correspondre les lignes, et la clause LEFT JOIN.

Jetons un coup d’œil à deux tables de la base de données AdventureWorksLT2019. Par exemple, pour récupérer tous les clients et leurs éventuelles commandes, vous pouvez utiliser les tables SalesLT.Customer et SalesLT.SalesOrderHeader et effectuer un LEFT JOIN comme vous pouvez le voir dans la liste suivante:

USE AdventureWorksLT2019

SELECT c.CustomerID, c.FirstName, c.LastName, soh.SalesOrderID, soh.OrderDate
FROM SalesLT.Customer c 
LEFT JOIN SalesLT.SalesOrderHeader soh ON c.CustomerID = soh.CustomerID
  • Dans cet exemple, nous sélectionnons les colonnes « CustomerID », « FirstName », « LastName », « SalesOrderID » et « OrderDate » des tables SalesLT.Customer et SalesLT.SalesOrderHeader.
  • Nous utilisons le mot-clé LEFT JOIN pour joindre les deux tables et le mot-clé ON que nous utiliserons dans la colonne ‘CustomerID’ pour joindre les deux tables.

Vous pouvez voir les résultats de cette requête SQL LEFT JOIN dans la figure ci-dessous.

The results of our SQL LEFT JOIN query (Image credit: Petri/Michael Otey)

Cette requête renverra un ensemble de résultats qui inclut tous les clients de la table SalesLT.Customer, ainsi que toutes les informations de commande correspondantes de la table SalesLT.SalesOrderHeader. Si un client n’a pas de commandes dans la table SalesLT.SalesOrderHeader, alors les colonnes de cette table seront nulles. Vous pouvez voir plusieurs valeurs nulles dans la figure précédente.

SQL RIGHT JOIN

Comme vous pouvez le deviner, l’opération SQL RIGHT OUTER JOIN est essentiellement l’opposée du LEFT OUTER JOIN. Le RIGHT OUTER JOIN sélectionne les données de la table de droite (Table 2) et les associe aux lignes de la table de gauche (Table 1).

Le RIGHT JOIN renvoie un ensemble de résultats qui inclut toutes les lignes de la table de droite, même si elles n’ont pas de lignes correspondantes dans la table de gauche. Si une ligne de la table de droite n’a pas de ligne correspondante dans la table de gauche, alors l’ensemble de résultats pour les colonnes de la table de gauche sera nul.

Le diagramme suivant illustre le fonctionnement d’une jointure droite avec deux tables :

How a right JOIN works with two tables (Image credit: Petri/Michael Otey)

Nous pouvons illustrer cela avec les tables SalesLT.Customer et SalesLT.SalesOrderHeader de la base de données AdventuresLT2019. Pour récupérer toutes les commandes et leurs informations client correspondantes, vous pouvez utiliser une requête RIGHT JOIN comme vous pouvez le voir dans l’exemple suivant :

USE AdventureWorksLT2019

SELECT c.CustomerID, c.FirstName, c.LastName, soh.SalesOrderID, soh.OrderDate
FROM SalesLT.Customer c 
RIGHT JOIN SalesLT.SalesOrderHeader soh ON c.CustomerID = soh.CustomerID
  • Dans cet exemple, nous sélectionnons les colonnes ‘CustomerID’, ‘FirstName’, ‘LastName’, ‘SalesOrderID’ et ‘OrderDate’ des tables SalesLT.Customer et SalesLT.SalesOrderHeader.
  • Le mot-clé RIGHT JOIN est utilisé pour joindre les deux tables, et le mot-clé ON spécifie que nous joignons les deux tables sur la colonne ‘CustomerID’.

Cette requête renverra un ensemble de résultats qui inclut toutes les commandes dans la table SalesLT.SalesOrderHeader, ainsi que les informations clients correspondantes de la table SalesLT.Customer si elles sont disponibles. Si une commande n’a pas de client correspondant dans la table SalesLT.Customer, les colonnes client dans l’ensemble de résultats seront nulles.

Vous remarquerez peut-être que cette requête est très similaire à la requête précédente. Cependant, la jointure LEFT JOIN a entraîné de nombreuses lignes de la table SaleOrderHeader avec des valeurs nulles. Cependant, notre dernière requête n’a pas de valeurs nulles dans les lignes de la table SaleOrderHeader.

Les résultats de notre opération SQL RIGHT OUTER JOIN sont présentés dans la figure suivante.

The results of our SQL RIGHT OUTER JOIN operation (Image credit: Petri/Michael Otey)

SQL OUTER JOIN

SQL OUTER JOIN n’est pas le type de jointure le plus courant. Parfois appelée FULL JOIN, la requête OUTER JOIN ne récupérera pas seulement les lignes correspondantes mais aussi les lignes non appariées. En d’autres termes, elle renvoie des données de la table jointe lorsqu’il y a une correspondance dans les tables de gauche ou de droite.

Comme vous pouvez le deviner, cela a tendance à produire des ensembles de résultats plus importants que les autres types de jointure. Le diagramme suivant illustre le fonctionnement d’un SQL OUTER JOIN avec deux tables.

How an SQL OUTER JOIN works with two tables (Image credit: Petri/Michael Otey)

I’ll give you an example of an SQL OUTER JOIN operation using the SalesLT.SalesOrderHeader and SalesLT.SalesOrderDetail tables. Here, we want to retrieve all sales orders and their associated details, including orders that don’t have any details records.

Pour ce faire, nous pouvons utiliser une jointure externe complète. Cela renverra également toutes les lignes SalesOrderDetail qui n’ont pas de ligne SalesOrderHeader correspondante. Dans la plupart des cas normaux, toutes les lignes SalesOrderDetails devraient avoir une ligne SalesOrderHearder correspondante, mais ce n’est peut-être pas le cas s’il y a eu une erreur d’application ou système, ce qui peut aider à détecter.

Voici une requête T-SQL montrant un exemple de FULL OUTER JOIN :

USE AdventureWorksLT2019

SELECT soh.SalesOrderID, soh.OrderDate, sod.ProductID, sod.OrderQty, sod.UnitPrice
FROM SalesLT.SalesOrderHeader soh
FULL OUTER JOIN SalesLT.SalesOrderDetail sod
ON soh.SalesOrderID = sod.SalesOrderID
  • Dans cet exemple, nous sélectionnons les colonnes ‘SalesOrderID’, ‘OrderDate’, ‘ProductID’, ‘Quantity’ et ‘UnitPrice’ à la fois des tables SalesLT.SalesOrderHeader et SalesLT.SalesOrderDetail.
  • Nous utilisons le mot-clé FULL OUTER JOIN pour joindre les deux tables, et le mot-clé ON pour spécifier que la colonne SalesOrderID sera utilisée pour joindre les deux tables.
  • Cette requête renverra un ensemble de résultats comprenant toutes les commandes de vente dans la table SalesLT.SalesOrderHeader, ainsi que leurs informations détaillées correspondantes de la table SalesLT.SalesOrderDetail. Elle inclura également tous les détails de la table SalesLT.SalesOrderDetail, ainsi que leurs informations d’en-tête de commande correspondantes si elles sont disponibles.
  • Si une commande de vente n’a pas de détails dans la table SalesLT.SalesOrderDetail, alors les colonnes seront NULL. Si un détail n’a pas de commande de vente correspondante dans la table SalesLT.SalesOrderHeader, alors les colonnes de la commande de vente seront NULL.

Les résultats de cette opération FULL OUTER JOIN sont présentés dans la figure suivante.

The results of our FULL OUTER JOIN operation (Image credit: Petri/Michael Otey)

Apprendre les fondamentaux de la jointure SQL

Dans ce tutoriel, j’ai couvert les types de JOINTURES SQL les plus courantes. J’ai montré comment utiliser la JOINTURE INTERNE, la JOINTURE GAUCHE, la JOINTURE DROITE et la JOINTURE EXTERNE, et j’ai également expliqué en quoi elles sont différentes et où elles peuvent être utilisées. Dans un prochain article, je couvrirai certaines des jointures moins courantes comme la JOINTURE CROISÉE et la JOINTURE AUTO-JOIN, alors restez à l’écoute sur Petri!

Article connexe:

Source:
https://petri.com/sql-join/