All guides
IntermediateSelf-pacedFree GuideSection 23/95

SQL — JOIN et relations entre tables

Practise development foundations: programming, web, APIs, data and AI tools. Work through sections and exercises to build your first projects.

The full lessons for this course are currently available in French. Use the section menu to navigate the French course.

💡

Free content, available without an account. Tools and models change: use the current model guide to check their versions. Models and 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
Quick Check

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

Quick Check

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

Your progress

Progress is self-reported and stored in your browser. The final completion record is not a qualification or an independent assessment.

View progress and completion record

Learn AI, from prompts to agents

15 free guidesQuizzes, diagrams and workshopsNo account needed

One practical AI workflow in your inbox

Methods, resources and new exercises. Free, unsubscribe at any time.