Leçon 3 / 9 — Chapitre 2: Jointures avancées et combinées
NATURAL JOIN et la clause USING
NATURAL JOIN joint automatiquement deux tables sur toutes les colonnes qui portent le même nom des deux côtés, sans écrire de condition ON. Le danger : cette correspondance se fait uniquement sur le nom des colonnes, pas sur leur signification.
produits et commandes possèdent chacune une colonne id — mais dans produits, id identifie un produit, alors que dans commandes, id identifie une commande, deux choses sans rapport.
SELECT * FROM produits NATURAL JOIN commandes;
Cette requête joint donc sur id, ce qui associe le produit d'id 1 à la commande d'id 1, le produit d'id 2 à la commande d'id 2, etc. — un résultat sans aucun sens, complètement différent de la vraie relation (produits.id = commandes.produit_id) vue depuis le début de ce chapitre.
Voici une table livraisons, où l'id désigne volontairement la commande livrée elle-même (une commande a au plus une livraison, donc les deux partagent le même identifiant) :
livraisons
id | transporteur | statut
1 | Rapido | livree
3 | Rapido | livree
4 | Expressa | en_cours
Ici, id signifie la même chose dans commandes et dans livraisons : la commande concernée. NATURAL JOIN fonctionne donc correctement :
SELECT c.quantite, l.transporteur
FROM commandes c
NATURAL JOIN livraisons l;
La clause USING (colonne) fait la même chose que ce NATURAL JOIN réussi, mais en le rendant explicite plutôt qu'implicite :
SELECT c.quantite, l.transporteur
FROM commandes c
JOIN livraisons l USING (id);
À retenir :
NATURAL JOINjoint automatiquement sur toutes les colonnes de même nom — un raccourci risqué si ce nom ne désigne pas la même chose des deux côtés.USING (colonne)exprime la même idée qu'un NATURAL JOIN réussi, mais explicitement : plus sûr à relire, et insensible à l'ajout futur d'une colonne homonyme sans rapport.- Par défaut, NATURAL JOIN et JOIN ... USING se comportent comme un INNER JOIN : seules les lignes avec correspondance sont gardées.
À vous de jouer : identifiez pourquoi produits NATURAL JOIN commandes est un piège, alors que commandes NATURAL JOIN livraisons fonctionne correctement.
Continuez ce module
Débloquez les leçons restantes ainsi que la certification finale.
2 500 XOF / 3,81 € / 4,15 $
Débloquez les 80 leçons restantes de ce module
Votre paiement est vérifié avant l'activation de l'accès