Tous les guides
IntermédiaireÀ votre rythmeGuide gratuitSection 23/95

SQL — JOIN et relations entre tables

Pratiquez les fondations du développement : programmation, web, API, données et usages de l’IA. Des sections et exercices pour construire vos premiers projets.

💡

Contenu gratuit, accessible sans compte. Les outils et modèles évoluent : consultez le dossier actuel pour vérifier leurs versions. Modèles et sources

Section 11.2.3 : SQL — JOIN et relations entre tables

🎯 Objectif pédagogique

Maîtriser les JOIN SQL pour croiser les données entre plusieurs tables. Vous serez capable de combiner les informations de différentes tables pour répondre à des questions complexes — la compétence qui distingue un utilisateur SQL débutant d'un utilisateur intermédiaire.


Pourquoi les JOIN sont essentiels

Avoir des données dans une seule table est rare en pratique. Un e-commerce a des tables users, orders, products, payments. Pour répondre à "quels produits a acheté Marc ?", il faut croiser ces tables. C'est exactement ce que fait JOIN.

Marc : "Les JOIN, c'est comme la RECHERCHEV d'Excel — sauf que ça marche sur des millions de lignes et avec plusieurs critères."

Les types de JOIN

Loading diagram…

INNER JOIN — Seulement les correspondances

-- Candidatures AVEC les infos de l'utilisateur
SELECT u.name, a.company, a.position, a.status
FROM applications a
INNER JOIN users u ON a.user_id = u.id;
-- Résultat : seulement les users qui ont des candidatures

LEFT JOIN — Tout à gauche + correspondances

-- Tous les users, même ceux sans candidature
SELECT u.name, COUNT(a.id) AS nb_candidatures
FROM users u
LEFT JOIN applications a ON u.id = a.user_id
GROUP BY u.name;
-- Résultat : Marc (4), Alice (1), Bob (0) ← Bob apparaît avec 0

RIGHT JOIN et FULL JOIN

-- RIGHT JOIN : tout à droite + correspondances (rare)
-- FULL JOIN : tout des deux côtés (encore plus rare)

-- En pratique, LEFT JOIN couvre 95% des besoins

Exemples pratiques

-- 1. Candidatures de Marc avec détails
SELECT a.company, a.position, a.status, a.applied_date
FROM applications a
JOIN users u ON a.user_id = u.id
WHERE u.name = 'Marc Dupont'
ORDER BY a.applied_date DESC;

-- 2. Nombre de candidatures par statut par utilisateur
SELECT u.name, a.status, COUNT(*) AS total
FROM applications a
JOIN users u ON a.user_id = u.id
GROUP BY u.name, a.status
ORDER BY u.name, total DESC;

-- 3. JOIN triple : users → applications → interviews
SELECT u.name, a.company, i.interview_date, i.interviewer
FROM users u
JOIN applications a ON u.id = a.user_id
JOIN interviews i ON a.id = i.application_id
WHERE a.status = 'interview'
ORDER BY i.interview_date;

Sous-requêtes

-- Utilisateurs avec plus de 3 candidatures
SELECT name FROM users 
WHERE id IN (
  SELECT user_id FROM applications 
  GROUP BY user_id 
  HAVING COUNT(*) > 3
);

-- Salaire moyen des postes en entretien vs refusés
SELECT status, ROUND(AVG(salary_min)) AS salaire_moyen
FROM applications
WHERE status IN ('interview', 'rejected')
GROUP BY status;

Nommer vos alias

Utilisez toujours des alias courts : FROM users u, FROM applications a. Quand vous avez 3-4 tables jointes, les alias rendent la requête lisible. Convention : première lettre du nom de la table.

🏋️ Exercice pratique (20 minutes)

-- Ajoutez une table users et pratiquez les JOIN
CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  email TEXT UNIQUE
);

INSERT INTO users (name, email) VALUES
('Marc Dupont', 'marc@email.com'),
('Alice Martin', 'alice@email.com'),
('Bob Chen', 'bob@email.com');

-- Réassignez user_id (ajoutez la colonne si nécessaire)
ALTER TABLE applications ADD COLUMN user_id INTEGER REFERENCES users(id);
UPDATE applications SET user_id = 1; -- Marc pour toutes

-- Exercices JOIN
-- 1. Affichez le nom de l'utilisateur avec chaque candidature
-- 2. Comptez les candidatures par utilisateur (incluant ceux avec 0)
-- 3. Trouvez l'utilisateur avec le plus de candidatures en entretien
Vérification rapide

Quelle est la différence entre INNER JOIN et LEFT JOIN ?

Vérification rapide

Dans la requête 'SELECT u.name FROM applications a JOIN users u ON a.user_id = u.id', que signifie ON ?

Votre progression

Cette progression est déclarative et conservée dans votre navigateur. L’attestation finale ne constitue pas un diplôme ni une évaluation indépendante.

Voir ma progression et mon attestation

Apprendre l’IA, du premier prompt aux agents

15 guides gratuitsQuiz, schémas et ateliersSans compte

Un cas pratique IA dans votre boîte mail

Méthodes, ressources et nouveaux exercices. Gratuit, avec désinscription à tout moment.