JOIN
#JOIN
Combiner des lignes de plusieurs tables par des clés correspondantes.
Types principaux: INNER
, LEFT
, RIGHT
(pas dans SQLite), FULL
(via UNION).
sqlsql
1create table orders(id int, user_id int, amount real);2insert into orders values (1,1,19.9),(2,1,5.0),(3,2,12.0);3 4-- INNER JOIN: ne garde que les correspondances5select u.name, o.amount6from users u7join orders o on o.user_id = u.id;8 9-- LEFT JOIN: garde tout à gauche, NULL si pas de match10select u.name, o.amount11from users u12left join orders o on o.user_id = u.id;
#Playground
#Exercice : Trouver les utilisateurs sans commandes
Créez une requête qui affiche les utilisateurs qui n'ont passé aucune commande, en utilisant une jointure.
#Instructions
- Utilisez les mêmes tables que dans l'exemple :
users(id, name)
orders(id, user_id, amount)
- Utilisez une jointure appropriée pour trouver les utilisateurs sans commandes.
- Pensez à la différence entre INNER JOIN et LEFT JOIN.
#Exemple de requête
sqlsql
1-- Création des tables de démonstration2create table users(id int, name text);3create table orders(id int, user_id int, amount real);4 5-- Insertion de données6insert into users values (1, 'Alice'), (2, 'Bob'), (3, 'Charlie');7insert into orders values (1, 1, 100.0), (2, 1, 50.0);8 9-- Requête pour trouver les utilisateurs sans commandes10select u.name11from users u12left join orders o on u.id = o.user_id13where o.user_id is null;
#Pièges courants
Multiplication de lignes
Les jointures 1→N multiplient les lignes: attention aux agrégations; utiliser GROUP BY
.
#Animation: exécution d'un JOIN (vue conceptuelle)
1. Préparer les tables
Charger
users
(clé: id) et orders
(clé étrangère: user_id).Étape 1 / 6
#Quiz
Quel JOIN conserve toutes les lignes de la table de gauche ?