Les requêtes avec jointure en SQL

Voici un tableau des principales requêtes SQL utilisant des jointures, compatibles avec MySQL.

Type de jointureSyntaxeExempleUtilité
Jointure interne (INNER JOIN)SELECT colonne(s)
FROM table1
INNER JOIN table2
ON table1.colonne = table2.colonne;
SELECT u.nom, o.date
FROM utilisateurs u
INNER JOIN commandes o
ON u.id = o.utilisateur_id;
Retourne les lignes qui ont des correspondances dans les deux tables. Seules les lignes « communes » sont prises.
Jointure gauche (LEFT JOIN)SELECT colonne(s)
FROM table1
LEFT JOIN table2
ON table1.colonne = table2.colonne;
SELECT u.nom, o.date
FROM utilisateurs u
LEFT JOIN commandes o
ON u.id = o.utilisateur_id;
Retourne toutes les lignes de la première table (table de gauche), et les correspondances de la deuxième table. Si pas de correspondance, les résultats de la deuxième table sont nuls.
Jointure droite (RIGHT JOIN)SELECT colonne(s)
FROM table1
RIGHT JOIN table2
ON table1.colonne = table2.colonne;
SELECT u.nom, o.date
FROM utilisateurs u
RIGHT JOIN commandes o
ON u.id = o.utilisateur_id;
Retourne toutes les lignes de la deuxième table (table de droite), et les correspondances de la première table. Si pas de correspondance, les résultats de la première table sont nuls.
Jointure externe complète (FULL OUTER JOIN)SELECT colonne(s)
FROM table1
FULL OUTER JOIN table2
ON table1.colonne = table2.colonne;
MySQL ne supporte pas FULL OUTER JOIN directement. Utiliser une combinaison de LEFT JOIN et RIGHT JOIN avec UNION.Combine toutes les lignes des deux tables. Les correspondances apparaissent une fois, et les lignes sans correspondance sont remplies avec des valeurs nulles.
Jointure croisée (CROSS JOIN)SELECT *
FROM table1
CROSS JOIN table2;
SELECT *
FROM produits
CROSS JOIN categories;
Retourne le produit cartésien des deux tables (toutes les combinaisons possibles de lignes des deux tables).
Jointure avec USING (simplification)SELECT colonne(s)
FROM table1
JOIN table2
USING (colonne);
SELECT u.nom, o.date
FROM utilisateurs u
JOIN commandes o
USING (utilisateur_id);
Simplifie la syntaxe lorsqu’une colonne a le même nom dans les deux tables, évite l’utilisation explicite de ON table1.colonne = table2.colonne.
Jointure avec sous-requête (subquery join)SELECT colonne(s)
FROM table
WHERE colonne = (SELECT colonne FROM table2 WHERE condition);
SELECT nom
FROM utilisateurs
WHERE id = (SELECT utilisateur_id FROM commandes WHERE montant > 500);
Utiliser une sous-requête dans une jointure pour filtrer les résultats basés sur une autre table.

Explications complémentaires

1. Jointure interne (INNER JOIN)

  • Syntaxe :
  SELECT colonne(s)
  FROM table1
  INNER JOIN table2
  ON table1.colonne = table2.colonne;
  • Exemple :
  SELECT u.nom, o.date
  FROM utilisateurs u
  INNER JOIN commandes o
  ON u.id = o.utilisateur_id;

Utilité : Cette jointure ne retourne que les lignes pour lesquelles il existe une correspondance entre les deux tables. Elle est utilisée lorsque l’on ne s’intéresse qu’aux données qui existent dans les deux tables.

2. Jointure gauche (LEFT JOIN)

  • Syntaxe :
  SELECT colonne(s)
  FROM table1
  LEFT JOIN table2
  ON table1.colonne = table2.colonne;
  • Exemple :
  SELECT u.nom, o.date
  FROM utilisateurs u
  LEFT JOIN commandes o
  ON u.id = o.utilisateur_id;

Utilité : Retourne toutes les lignes de la table de gauche (table1), même si aucune correspondance n’existe dans la table de droite (table2). Si aucune correspondance n’est trouvée, les colonnes de la table de droite auront la valeur NULL.

3. Jointure droite (RIGHT JOIN)

  • Syntaxe :
  SELECT colonne(s)
  FROM table1
  RIGHT JOIN table2
  ON table1.colonne = table2.colonne;
  • Exemple :
  SELECT u.nom, o.date
  FROM utilisateurs u
  RIGHT JOIN commandes o
  ON u.id = o.utilisateur_id;

Utilité : Semblable à LEFT JOIN, mais elle retourne toutes les lignes de la table de droite (table2), même si aucune correspondance n’existe dans la table de gauche. Les colonnes de la table de gauche seront remplies de valeurs NULL si aucune correspondance n’est trouvée.

4. Jointure externe complète (FULL OUTER JOIN)

  • Syntaxe (non supportée directement par MySQL, il faut utiliser une combinaison de LEFT JOIN et RIGHT JOIN avec UNION) :
  SELECT colonne(s)
  FROM table1
  LEFT JOIN table2 ON table1.colonne = table2.colonne
  UNION
  SELECT colonne(s)
  FROM table1
  RIGHT JOIN table2 ON table1.colonne = table2.colonne;

Utilité : Retourne toutes les lignes des deux tables, que des correspondances existent ou non. Si aucune correspondance n’est trouvée, les colonnes de la table sans correspondance contiendront NULL.

5. Jointure croisée (CROSS JOIN)

  • Syntaxe :
  SELECT * FROM table1 CROSS JOIN table2;
  • Exemple :
  SELECT * FROM produits CROSS JOIN categories;

Utilité : Retourne le produit cartésien des deux tables, c’est-à-dire toutes les combinaisons possibles de lignes entre les deux tables. C’est rarement utilisé dans la pratique, sauf pour des calculs spéciaux comme les combinaisons.

6. Jointure avec USING

  • Syntaxe :
  SELECT colonne(s)
  FROM table1
  JOIN table2 USING (colonne_commune);
  • Exemple :
  SELECT u.nom, o.date
  FROM utilisateurs u
  JOIN commandes o USING (utilisateur_id);

Utilité : Simplifie l’écriture de la jointure lorsque les deux tables ont une colonne avec le même nom et que la condition de jointure se fait sur cette colonne.

7. Jointure avec sous-requête (subquery join)

  • Syntaxe :
  SELECT colonne(s)
  FROM table
  WHERE colonne = (SELECT colonne FROM table2 WHERE condition);
  • Exemple :
  SELECT nom
  FROM utilisateurs
  WHERE id = (SELECT utilisateur_id FROM commandes WHERE montant > 500);

Utilité : Utilisée pour combiner une requête principale avec une sous-requête, afin de filtrer les résultats basés sur les résultats d’une autre table.


Conclusion

Les jointures SQL permettent de combiner des données de plusieurs tables en une seule requête. Chaque type de jointure a une utilité spécifique en fonction de la relation entre les tables :

  • INNER JOIN : Quand on veut seulement les correspondances.
  • LEFT JOIN : Quand on veut toutes les données de la table de gauche, même sans correspondance.
  • RIGHT JOIN : Quand on veut toutes les données de la table de droite, même sans correspondance.
  • FULL OUTER JOIN : Quand on veut toutes les données des deux tables, avec ou sans correspondance.
  • CROSS JOIN : Quand on veut toutes les combinaisons possibles.
  • USING : Simplifie la syntaxe pour les colonnes communes.

Ces types de jointures permettent de manipuler des bases de données relationnelles complexes de manière efficace et flexible.

Lessons

  1. Exercice de création d'une base de données et requêtes SQL
  2. INNER JOIN
  3. LEFT JOIN
  4. RIGHT JOIN
  5. FULL OUTER JOIN
  6. CROSS JOIN
  7. USING
  8. Correction : Exercice de création d'une base de données et requêtes SQL

Greta -DWWM Membership Required

You must be a Greta -DWWM member to access this content.

S’inscrire maintenant

Already a member? Connectez-vous ici
Retour en haut