Jointures SQL
Les jointures SQL interne, externe et croisée
Les jointures permettent d'extraire des données issues de plusieurs tables qui doivent posséder un champ de valeur identique. Le champ utilisé pour la jointure est souvent la clé primaire. Si nous devons faire une jointure à l'aide d'une colonne autre que celle de la clé primaire, il est recommandé dans la majorité des cas que cette colonne soit indexée.
La jointure interne (INNER JOIN)
C'est le type par défaut. Elle permet de renvoyer les enregistrements de la première table qui ont une correspondance avec la deuxième table. Elle permet donc d'afficher des données communes. Il suffit d'utiliser le mot clé JOIN pour réaliser une jointure interne. Jusqu'à présent nous utilisions la virgule qui est une troisième manière d'effectuer une requête INNER JOIN.
Exemple : Faire le listing des articles par catégorie:
SELECT codearticle, articles.nom, categories.nom
FROM articles, categories
WHERE articles.idcategorie = categories.idcategorie;
SELECT nom, prenom, nom_societe
FROM formations, liste_nom_societe
WHERE formations.id_societe = liste_nom_societe.id_societe;
La jointure externe (LEFT JOIN ou RIGHT JOIN)
Elle permet de renvoyer les enregistrements ne répondant pas à la condition de la jointure et qui se verront attribuer la valeur NULL pour certaines colonnes. Le mot clé OUTER est optionnel. Il existe deux types de jointure externe: LEFT ou RIGHT (voir les deux cas du schéma ci-dessus). LEFT JOIN permet d'afficher tous les enregistrements de la table de gauche avec la valeur NULL pour les colonnes n'ayant pas de correspondance dans la table de droite.
Jointure LEFT JOIN (jointure gauche)
Lister tous les clients avec leurs commandes:
SELECT nom, prenom, numcommande
FROM clients LEFT JOIN commandes
ON clients.idclient = commandes.idclient;
Même requête mais avec uniquement les clients qui n'ont jamais commandés
SELECT nom, prenom, numcommande
FROM clients LEFT JOIN commandes
ON clients.idclient = commandes.idclient
WHERE numcommande IS NULL;
La jointure croisée (CROSS JOIN)
Elle effectue le produit cartésien des tables, c'est à dire que la requête renvoie toutes les combinaisons possibles de lignes entre les deux tables. Une telle requête est rarement utilisée.
Exemple de jointure croisée: afficher tout!SELECT codearticle, articles.nom, categories.nom
FROM articles CROSS JOIN categories;