Jointure SQL Server avec l’opérateur JOIN

Exemple de requêtes avec l’opérateur JOIN écrites en langage T-SQL pour joindre les données de plusieurs tables.

En T-SQL, c’est à dire le langage de programmation SQL de Microsoft, une jointure SQL Server entre deux ou plusieurs tables se fait avec l’opérateur JOIN. Cette liaison se fait en fonction de conditions spécifiées dans la clause WHERE. Il existe plusieurs variantes de l’opérateur JOIN, chacune avec ses propres caractéristiques et utilisations.

1. Créer les tables d’exemple des clients et des commandes

Voici comment créer deux tables d’exemple utilisées dans les requêtes JOIN suivantes.

1.1 Créer la table des Clients

Exécuter ce code dans SSMS par exemple pour créer la table des clients et y insérer des lignes.

-- Créer la table des clients
CREATE TABLE clients (
    id INT PRIMARY KEY,
    nom VARCHAR(255),
    ville VARCHAR(255)
);

-- Insérer des lignes dans la table des clients
INSERT INTO clients
(id, nom, ville)
VALUES
(1, 'Dupont', 'Paris'),
(2, 'Durand', 'Lyon'),
(3, 'Martin', 'Marseille');

1.2 Créer la table des Commandes

Ensuite, créer la table des commandes avec le code T-SQL ci-dessous.

-- Créer la table des commandes
CREATE TABLE commandes (
    id INT PRIMARY KEY,
    id_client INT,
    montant DECIMAL(10, 2),
    date_commande DATE
);

-- Insérer des lignes dans la table des commandes
INSERT INTO commandes
(id, id_client, montant, date_commande)
VALUES
(1, 1, 100.00, '2022-01-01'),
(2, 2, 50.00, '2022-01-02'),
(3, 1, 200.00, '2022-01-03'),
(4, 3, 75.00, '2022-01-04');

2. Jointure SQL Server de type INNER JOIN

L’opérateur INNER JOIN permet de lier les lignes de deux tables en ne retournant que les lignes qui ont une correspondance dans les deux tables. On utilise souvent une condition de jointure dans la clause ON pour spécifier comment les lignes sont liées.

SELECT *
FROM clients c
   INNER JOIN commandes co
      ON c.id = co.id_client;

Le résultat de la requête avec l’opérateur INNER JOIN comportera donc 4 lignes, comme ceci :

idnomvilleidid_clientmontantdate_commande
1DupontParis11100.002022-01-01
2DurandLyon2250.002022-01-02
1DupontParis31200.002022-01-03
3MartinMarseille4375.002022-01-04

3. Opérateur T-SQL LEFT JOIN

L’opérateur LEFT JOIN permet de lier les lignes de deux tables en retournant toutes les lignes de la table de gauche, ainsi que les correspondances dans la table de droite si elles existent. Si une ligne de la table de gauche n’a pas de correspondance dans la table de droite, une ligne NULL sera créée dans le résultat pour cette ligne.

SELECT *
FROM clients c
  LEFT JOIN commandes co
  ON c.id = co.id_client;

Le résultat de cette requête SQL LEFT JOIN écrite en T-SQL.

idnomvilleidid_clientmontantdate_commande
1DupontParis11100.002022-01-01
2DurandLyon2250.002022-01-02
1DupontParis31200.002022-01-03
3MartinMarseille4375.002022-01-04
4DupuisBordeauxNULLNULLNULLNULL

4. Opérateur SQL Server RIGHT JOIN

L’opérateur RIGHT JOIN est similaire au LEFT JOIN, mais il retourne toutes les lignes de la table de droite, ainsi que les correspondances dans la table de gauche si elles existent. Si une ligne de la table de droite n’a pas de correspondance dans la table de gauche, une ligne NULL sera créée dans le résultat pour cette ligne.

SELECT *
FROM clients c
   RIGHT JOIN commandes co
      ON c.id = co.id_client;

Le résultat de cette requête sera :

idnomvilleidid_clientmontantdate_commande
1DupontParis11100.002022-01-01
2DurandLyon2250.002022-01-02
1DupontParis31200.002022-01-03
3MartinMarseille4375.002022-01-04
NULLNULLNULL5225.002022-01-05

5. Jointure CROSS JOIN SQL Server

L’opérateur T-SQL CROSS JOIN permet de lier toutes les lignes de la table de gauche avec toutes les lignes de la table de droite, sans utiliser de condition de jointure.

SELECT *
FROM clients c
   CROSS JOIN commandes co;

Le résultat de cette requête de type CROSS JOIN, exécutée sur les tables d’exemple sera comme ceci.

idnomvilleidid_clientmontantdate_commande
1DupontParis11100.002022-01-01
1DupontParis2250.002022-01-02
1DupontParis31200.002022-01-03
1DupontParis4375.002022-01-04
2DurandLyon11100.002022-01-01
2DurandLyon2250.002022-01-02
2DurandLyon31200.002022-01-03
2DurandLyon4375.002022-01-04
3MartinMarseille11100.002022-01-01
3MartinMarseille2250.002022-01-02
3MartinMarseille31200.002022-01-03
3MartinMarseille4375.002022-01-04

Il est important de noter que l’opérateur CROSS JOIN peut rapidement générer un très grand nombre de lignes dans le résultat si les tables impliquées sont de grande taille. Il est donc recommandé de ne l’utiliser que lorsque cela est vraiment nécessaire.

6. Opérateur T-SQL FULL OUTER JOIN

L’opérateur FULL OUTER JOIN permet de lier les lignes de deux tables en retournant toutes les lignes de la table de gauche, toutes les lignes de la table de droite, ainsi que les correspondances entre les deux tables si elles existent. Si une ligne d’une table n’a pas de correspondance dans l’autre table, une ligne NULL sera créée dans le résultat pour cette ligne.

SELECT *
FROM clients c
   FULL OUTER JOIN commandes co
      ON c.id = co.id_client;

Le résultat de la requête T-SQL avec FULL OUTER JOIN sera comme suit.

idnomvilleidid_clientmontantdate_commande
1DupontParis11100.002022-01-01
2DurandLyon2250.002022-01-02
1DupontParis31200.002022-01-03
3MartinMarseille4375.002022-01-04
4DupuisBordeauxNULLNULLNULLNULL

7. Jointure SQL Server avec SELF JOIN ou Auto-Jointure

L’opérateur SELF JOIN permet de lier les lignes d’une même table en utilisant deux alias différents pour la table. On peut utiliser une condition de jointure dans la clause ON pour spécifier comment les lignes sont liées. Cette requête est aussi appelée une auto-jointure.

SELECT c1.nom, c2.nom
FROM clients c1
   JOIN clients c2
      ON c1.ville = c2.ville
WHERE c1.nom != c2.nom;

Le résultat de cette requête avec l’auto-jointure sera comme ceci.

nomnom
DupontMartin
MartinDupont

Il est important de noter que ces exemples de requêtes avec l’opérateur SQL Server JOIN ne sont qu’une introduction aux opérateurs en T-SQL. Il est aussi possible de réaliser des jointures avec Integration Services, notamment avec le composant SSIS Merge Join.

Conclusion sur les opérateurs de jointures SQL Server

Une jointure SQL Server avec l’opérateur JOIN T-SQL et permet de combiner des données de différentes tables dans une seule requête. Il existe plusieurs types d’opérateurs JOIN, chacun ayant ses propres caractéristiques et utilisations. Voici quelques bonnes pratiques et avantages à retenir concernant l’utilisation des opérateurs JOIN en T-SQL :

  • Utiliser l’opérateur INNER JOIN pour renvoyer les lignes qui ont une correspondance dans les deux tables. Cet opérateur est le plus utilisé et le plus performant.
  • Utiliser l’opérateur LEFT JOIN pour renvoyer toutes les lignes de la table de gauche, ainsi que toutes les lignes correspondantes de la table de droite. Cet opérateur est utile pour inclure toutes les lignes de la table de gauche, même si elles n’ont pas de correspondance dans la table de droite.
  • Utiliser l’opérateur RIGHT JOIN de manière similaire à l’opérateur LEFT JOIN, mais en inversant l’ordre des tables.
  • Utiliser l’opérateur FULL OUTER JOIN pour renvoyer toutes les lignes des deux tables, qu’elles aient ou non une correspondance. Cet opérateur est moins performant que les autres opérateurs JOIN et n’est généralement pas recommandé dans les requêtes courantes.
  • Utiliser l’opérateur CROSS JOIN pour générer un produit cartésien de deux tables. Cet opérateur peut rapidement générer un très grand nombre de lignes dans le résultat, il est donc recommandé de ne l’utiliser que lorsque cela est vraiment nécessaire.

En résumé, les opérateurs JOIN en T-SQL permettent de combiner les données de plusieurs tables de manière efficace et pratique, ce qui peut être très utile dans de nombreuses situations. Il est important de choisir le bon type d’opérateur JOIN en fonction de vos besoins et de votre requête, afin d’obtenir le résultat souhaité de manière efficace. Voici enfin un autre tutoriel plus détaillé sur les jointures spécifiques de type LEFT JOIN.

Soyez le premier à commenter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.


*