Cours SQL Complet - Du débutant à l'intermédiaire
COURS COMPLET
🗄️ SQL
Du débutant à l'intermédiaire
Page 1
Cours SQL Complet - Du débutant à l'intermédiaire
Table des matières
Table des matières .................................................................................................................... 2
Introduction ................................................................................................................................ 4
Comment utiliser ce cours ? ................................................................................................... 4
Outils recommandés............................................................................................................... 4
Module 1 — Introduction aux bases de données........................................................................ 5
1.1 Qu'est-ce qu'une base de données ?................................................................................ 5
1.2 Base relationnelle vs non-relationnelle ............................................................................. 5
1.3 Qu'est-ce que SQL ? ........................................................................................................ 5
1.4 Votre première requête SQL ............................................................................................. 6
Module 2 — Les bases du SELECT ........................................................................................... 7
2.1 SELECT et FROM ............................................................................................................ 7
2.2 WHERE — Filtrer les résultats.......................................................................................... 7
2.3 AND, OR, NOT — Conditions multiples ............................................................................ 8
2.4 ORDER BY et LIMIT ......................................................................................................... 8
2.5 DISTINCT — Éviter les doublons...................................................................................... 8
Module 3 — Manipuler les données ..........................................................................................10
3.1 INSERT INTO — Ajouter des données ............................................................................10
3.2 UPDATE — Modifier des données...................................................................................10
3.3 DELETE — Supprimer des données ...............................................................................10
3.4 CREATE TABLE et les types de données .......................................................................11
Module 4 — Fonctions et Agrégats ...........................................................................................13
4.1 Fonctions d'agrégation ....................................................................................................13
4.2 GROUP BY — Regrouper les résultats ...........................................................................13
4.3 HAVING — Filtrer les groupes .........................................................................................14
4.4 Fonctions sur les chaînes et les dates .............................................................................14
Module 5 — Les Jointures ........................................................................................................17
5.1 Comprendre les relations entre tables .............................................................................17
5.2 INNER JOIN — Intersection ............................................................................................17
5.3 LEFT JOIN — Tout garder à gauche ...............................................................................17
5.4 Comparatif visuel des jointures ........................................................................................18
5.5 Jointures multiples ...........................................................................................................18
Module 6 — Niveau Intermédiaire .............................................................................................20
6.1 Les sous-requêtes (Subqueries) ......................................................................................20
6.2 EXISTS et NOT EXISTS ..................................................................................................20
6.3 CREATE VIEW — Les vues ............................................................................................20
Page 2
Cours SQL Complet - Du débutant à l'intermédiaire
6.4 Index et Performance ......................................................................................................21
6.5 Bonnes pratiques SQL.....................................................................................................21
Annexes ....................................................................................................................................24
Récapitulatif des commandes SQL........................................................................................24
Ressources pour aller plus loin ..............................................................................................24
Prochaines étapes après ce cours.........................................................................................24
Page 3
Cours SQL Complet - Du débutant à l'intermédiaire
Introduction
Bienvenue dans ce cours SQL complet ! Que vous soyez étudiant, professionnel en
reconversion, ou simplement curieux, ce cours vous guidera pas à pas dans l'apprentissage du
langage SQL.
SQL (Structured Query Language) est le langage universel pour communiquer avec les bases
de données. Il est utilisé partout : réseaux sociaux, banques, e-commerce, applications
mobiles... En apprenant SQL, vous ouvrez une porte vers des dizaines de métiers
passionnants.
Comment utiliser ce cours ?
• Lisez la théorie attentivement avant de pratiquer
• Faites tous les exercices, même les plus simples
• Les activités amusantes renforcent les notions vues en théorie
• Ne sautez pas les modules : chaque notion s'appuie sur la précédente
🎯 OBJECTIF DU COURS
A la fin de ce cours, vous serez capable de :
• Interroger une base de données pour en extraire des informations précises
• Créer, modifier et supprimer des données
• Utiliser des fonctions avancées (agrégats, jointures, sous-requêtes)
• Construire et interroger une mini base de données de A à Z
Outils recommandés
Pour suivre ce cours, vous aurez besoin d'un outil pour exécuter vos requêtes SQL :
Outil Description Idéal pour
DB Browser for SQLite Gratuit, simple, portable Débutants absolus
DBeaver Gratuit, puissant, multi-bases Intermédiaires
MySQL Workbench Officiel MySQL, complet Projets MySQL
[Link] En ligne, sans installation Test rapide
Page 4
Cours SQL Complet - Du débutant à l'intermédiaire
Module 1 - Introduction aux bases de données
Semaine 1 • Théorie fondamentale + Installation
1.1 Qu'est-ce qu'une base de données ?
Une base de données est un ensemble organisé d'informations stockées de manière structurée.
Imaginez un classeur avec des onglets : chaque onglet est une table, chaque ligne est un
enregistrement, chaque colonne est un champ.
Exemple concret : la base de données d'une bibliothèque contient les tables LIVRES,
MEMBRES, et EMPRUNTS.
TABLE :
LIVRES
id_livre titre auteur annee
1 Le Petit Prince A. de Saint-Exupéry 1943
2 1984 George Orwell 1949
3 Harry Potter T.1 J.K. Rowling 1997
1.2 Base relationnelle vs non-relationnelle
Il existe deux grandes familles de bases de données :
Type Exemples Points forts Usage typique
Relationnelle (SQL) MySQL, PostgreSQL, Structure rigide, Banques, ERP, e-
SQLite cohérence commerce
Non-relationnelle MongoDB, Redis, Flexibilité, scalabilité Big Data, réseaux
(NoSQL) Cassandra sociaux
💡 ASTUCE
Dans ce cours, nous utilisons uniquement les bases relationnelles (SQL).
C'est le standard dans 90% des entreprises traditionnelles.
1.3 Qu'est-ce que SQL ?
SQL signifie Structured Query Language (Langage de Requête Structuré). Il permet de :
• Lire des données (SELECT)
• Ajouter des données (INSERT)
• Modifier des données (UPDATE)
• Supprimer des données (DELETE)
Page 5
Cours SQL Complet - Du débutant à l'intermédiaire
• Créer des structures (CREATE TABLE)
1.4 Votre première requête SQL
Voici à quoi ressemble une requête SQL simple :
-- Récupérer tous les livres de la bibliothèque
SELECT * FROM livres;
Le résultat affichera l'ensemble des lignes de la table livres. Facile non ?
✏️ EXERCICE 1 — Mise en place
1. Téléchargez et installez DB Browser for SQLite ([Link]
2. Créez une nouvelle base de données nommée 'ma_bibliotheque.db'
3. Créez la table LIVRES avec les colonnes : id, titre, auteur, annee
4. Insérez 5 livres de votre choix
5. Exécutez votre première requête : SELECT * FROM livres;
Bravo ! Vous venez d'exécuter votre première requête SQL !
🎮 ACTIVITÉ — La Base de Données Humaine !
Objectif : Comprendre les concepts de table, ligne et colonne de façon ludique.
1. Prenez une feuille de papier et tracez un tableau avec 4 colonnes :
Nom | Age | Ville | Hobby
2. Remplissez le tableau avec les informations de 5 personnes de votre entourage
3. Essayez maintenant de répondre à ces questions 'en SQL' :
- Qui a moins de 30 ans ? (= SELECT WHERE age < 30)
- Qui habite Paris ? (= SELECT WHERE ville = 'Paris')
- Combien de personnes avez-vous ? (= SELECT COUNT(*))
Vous venez de faire du SQL... sans ordinateur ! C'est la magie du langage.
Page 6
Cours SQL Complet - Du débutant à l'intermédiaire
Module 2 - Les bases du SELECT
Semaine 2 • L'art d'interroger une base de données
Le SELECT est la commande la plus utilisée en SQL. Elle permet de lire des données stockées
dans vos tables. Dans ce module, vous apprendrez à poser des questions précises à votre
base de données.
2.1 SELECT et FROM
La structure minimale d'une requête SQL est :
SELECT colonne1, colonne2 -- quoi afficher ?
FROM nom_de_la_table; -- depuis quelle table ?
Pour sélectionner TOUTES les colonnes, utilisez l'astérisque * :
-- Afficher tous les films
SELECT * FROM films;
-- Afficher seulement le titre et l'année
SELECT titre, annee FROM films;
2.2 WHERE - Filtrer les résultats
La clause WHERE permet de filtrer les résultats selon des conditions :
-- Films sortis après 2000
SELECT titre, annee FROM films
WHERE annee > 2000;
-- Films du réalisateur Spielberg
SELECT * FROM films
WHERE realisateur = 'Spielberg';
Les opérateurs de comparaison disponibles :
Opérateur Signification Exemple
= Egal à WHERE genre = 'Action'
<> ou != Différent de WHERE genre <> 'Horreur'
> Supérieur à WHERE note > 7
< Inférieur à WHERE annee < 2000
Page 7
Cours SQL Complet - Du débutant à l'intermédiaire
>= Supérieur ou égal WHERE note >= 8
<= Inférieur ou égal WHERE duree <= 120
LIKE Ressemble à (avec %) WHERE titre LIKE 'Le%'
BETWEEN Entre deux valeurs WHERE annee BETWEEN 1990 AND 2000
IN Dans une liste WHERE genre IN ('Action', 'Comédie')
IS NULL Valeur manquante WHERE note IS NULL
2.3 AND, OR, NOT - Conditions multiples
-- Films d'action notés au-dessus de 8
SELECT titre FROM films
WHERE genre = 'Action' AND note > 8;
-- Films d'action OU de comédie
SELECT titre FROM films
WHERE genre = 'Action' OR genre = 'Comedie';
-- Films qui ne sont PAS des documentaires
SELECT titre FROM films
WHERE NOT genre = 'Documentaire';
2.4 ORDER BY et LIMIT
-- Films du plus récent au plus ancien
SELECT titre, annee FROM films
ORDER BY annee DESC; -- ASC = croissant, DESC = décroissant
-- Top 5 des films les mieux notés
SELECT titre, note FROM films
ORDER BY note DESC
LIMIT 5;
2.5 DISTINCT - Éviter les doublons
-- Liste des genres sans doublons
SELECT DISTINCT genre FROM films;
Page 8
Cours SQL Complet - Du débutant à l'intermédiaire
-- Pays où nos clients habitent
SELECT DISTINCT pays FROM clients
ORDER BY pays ASC;
✏️ EXERCICE 2 — Interroger la base Cinéma
Créez une table FILMS avec les colonnes : id, titre, annee, genre, note, realisateur
Insérez 10 films de votre choix (mix de genres différents)
Écrivez les requêtes suivantes :
Niveau 1 (facile) :
a) Afficher tous les films
b) Afficher seulement les titres et les notes
c) Afficher les films sortis avant 1990
Niveau 2 (intermédiaire) :
d) Afficher les 3 films les mieux notés
e) Afficher les films d'action ou de science-fiction
f) Afficher les films dont le titre commence par 'Le' ou 'La'
Défi bonus : Trouvez tous les films notés au-dessus de 7 sortis après 2010, triés par note
décroissante
Page 9
Cours SQL Complet - Du débutant à l'intermédiaire
Module 3 - Manipuler les données
Semaine 3 • INSERT, UPDATE, DELETE et structure des tables
3.1 INSERT INTO - Ajouter des données
Pour ajouter une ligne dans une table :
-- Insérer un nouveau client
INSERT INTO clients (nom, prenom, email, ville)
VALUES ('ABALO', 'Marie', 'marie@[Link]', 'Lomé');
-- Insérer plusieurs lignes en une seule requête
INSERT INTO produits (nom, prix, categorie) VALUES
('Laptop', 500000, 'Informatique'),
('Souris', 8000, 'Informatique'),
('Bureau', 250000, 'Mobilier');
3.2 UPDATE 6 Modifier des données
⚠️ IMPORTANT
TOUJOURS utiliser WHERE avec UPDATE !
Sans clause WHERE, vous modifierez TOUTES les lignes de la table.
Exemple dangereux : UPDATE clients SET ville = 'Paris'; -- modifie TOUT le monde !
Exemple correct : UPDATE clients SET ville = 'Paris' WHERE id = 5;
-- Corriger l'adresse email d'un client
UPDATE clients
SET email = 'nouveau@[Link]'
WHERE id = 42;
-- Appliquer une remise de 10% sur tous les produits d'électronique
UPDATE produits
SET prix = prix * 0.90
WHERE categorie = 'Electronique';
3.3 DELETE - Supprimer des données
⚠️ IMPORTANT
Page 10
Cours SQL Complet - Du débutant à l'intermédiaire
TOUJOURS utiliser WHERE avec DELETE !
DELETE FROM commandes; -- supprime TOUTES les commandes ! DANGER !
Conseil pro : Testez d'abord avec SELECT avant de faire DELETE.
-- Tester avant de supprimer (bonne pratique !)
SELECT * FROM commandes WHERE statut = 'annulee' AND date < '2020-01-01';
-- Supprimer les vieilles commandes annulées (si le SELECT est correct)
DELETE FROM commandes
WHERE statut = 'annulee' AND date < '2020-01-01';
3.4 CREATE TABLE et les types de données
Avant d'insérer des données, il faut créer la structure de la table :
CREATE TABLE employes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nom VARCHAR(100) NOT NULL,
prenom VARCHAR(100) NOT NULL,
email VARCHAR(200) UNIQUE,
salaire DECIMAL(10,2) DEFAULT 0,
date_embauche DATE,
actif BOOLEAN DEFAULT TRUE
);
Type Description Exemple de valeur
INTEGER / INT Nombre entier 42, -5, 0
DECIMAL(10,2) Nombre décimal 1234.56
VARCHAR(n) Texte de longueur variable (max 'Bonjour'
n)
TEXT Texte long (sans limite) Un long paragraphe...
DATE Date (AAAA-MM-JJ) '2024-03-15'
DATETIME Date et heure '2024-03-15 14:30:00'
BOOLEAN Vrai/Faux TRUE, FALSE, 1, 0
✏️ EXERCICE 3 — Gestion d'une boutique en ligne
Créez une mini base de données pour une boutique en ligne avec :
Page 11
Cours SQL Complet - Du débutant à l'intermédiaire
Table PRODUITS : id, nom, prix, stock, categorie
Table CLIENTS : id, nom, email, ville, date_inscription
Exercices :
1. Insérez 8 produits de catégories variées (vêtements, électronique, sport...)
2. Insérez 5 clients fictifs
3. Un client a changé de ville : mettez à jour son adresse
4. Le prix de tous les vêtements augmente de 5% : écrivez l'UPDATE
5. Un produit est retiré de la vente : supprimez-le
6. Vérifiez vos modifications avec des SELECT
Page 12
Cours SQL Complet - Du débutant à l'intermédiaire
Module 4 - Fonctions et Agrégats
Semaine 4 • Calculer, regrouper, analyser
Les fonctions SQL vous permettent de faire des calculs directement dans vos requêtes, sans
avoir à exporter vos données dans Excel. C'est là que SQL devient vraiment puissant !
4.1 Fonctions d'agrégation
-- Combien y a-t-il de produits ?
SELECT COUNT(*) AS nombre_produits FROM produits;
-- Quel est le prix moyen des produits ?
SELECT AVG(prix) AS prix_moyen FROM produits;
-- Quel est le chiffre d'affaires total ?
SELECT SUM(montant) AS ca_total FROM commandes;
-- Produit le plus cher et le moins cher
SELECT MAX(prix) AS prix_max, MIN(prix) AS prix_min FROM produits;
Fonction Description Exemple
COUNT(*) Nombre de lignes SELECT COUNT(*) FROM clients
COUNT(colonne) Nombre de valeurs non nulles SELECT COUNT(email) FROM
clients
SUM(col) Somme des valeurs SELECT SUM(prix) FROM
commandes
AVG(col) Moyenne des valeurs SELECT AVG(note) FROM avis
MAX(col) Valeur maximale SELECT MAX(salaire) FROM
employes
MIN(col) Valeur minimale SELECT MIN(prix) FROM produits
4.2 GROUP BY — Regrouper les résultats
GROUP BY permet d'appliquer des agrégations par catégorie :
-- Nombre de produits par catégorie
SELECT categorie, COUNT(*) AS nb_produits
FROM produits
GROUP BY categorie;
Page 13
Cours SQL Complet - Du débutant à l'intermédiaire
-- Chiffre d'affaires par mois
SELECT strftime('%Y-%m', date) AS mois,
SUM(montant) AS ca_mensuel
FROM commandes
GROUP BY strftime('%Y-%m', date)
ORDER BY mois;
💡 ASTUCE
Règle d'or avec GROUP BY :
Toute colonne dans le SELECT (sauf les agrégats) doit être dans le GROUP BY.
Exemple : SELECT categorie, COUNT(*) → GROUP BY categorie ✓
Exemple : SELECT categorie, nom, COUNT(*) → GROUP BY categorie, nom ✓
4.3 HAVING - Filtrer les groupes
HAVING fonctionne comme WHERE, mais APRÈS le GROUP BY :
-- Catégories avec plus de 10 produits
SELECT categorie, COUNT(*) AS nb
FROM produits
GROUP BY categorie
HAVING COUNT(*) > 10;
-- Clients ayant dépensé plus de 500€ au total
SELECT client_id, SUM(montant) AS total_depense
FROM commandes
GROUP BY client_id
HAVING SUM(montant) > 500
ORDER BY total_depense DESC;
4.4 Fonctions sur les chaînes et les dates
-- Fonctions sur les textes
SELECT UPPER(nom) AS nom_majuscule FROM clients; -- DUPONT
SELECT LOWER(email) AS email_minuscule FROM clients; -- marie@[Link]
SELECT LENGTH(description) AS taille FROM produits; -- 42
SELECT CONCAT(prenom, ' ', nom) AS nom_complet FROM clients;
-- Fonctions sur les dates (SQLite)
Page 14
Cours SQL Complet - Du débutant à l'intermédiaire
SELECT DATE('now') AS aujourd_hui; -- 2024-03-09
SELECT strftime('%d/%m/%Y', date_commande) AS date_fr FROM commandes;
✏️ EXERCICE 4 — Tableau de bord d'une boutique
En utilisant vos tables PRODUITS et COMMANDES, créez un 'tableau de bord' :
1. Nombre total de produits en catalogue
2. Prix moyen, maximum et minimum des produits
3. Nombre de produits par catégorie (trié du plus grand au plus petit)
4. Valeur totale du stock (prix × quantité en stock)
5. Les 3 catégories avec le plus grand nombre de produits
6. Catégories dont la moyenne de prix est supérieure à 100€
Bonus : Créez une table VENTES (id, produit_id, quantite, montant, date)
et calculez le chiffre d'affaires par mois sur les 6 derniers mois.
🎮 ACTIVITÉ — Bataille de Statistiques !
À jouer en équipe de 2 — Durée : 15 minutes
Chaque joueur crée UNE table avec des données inventées (au moins 15 lignes).
Exemples : matchs de foot, films vus, livres lus, recettes de cuisine...
Ensuite, les joueurs ÉCHANGENT leurs bases de données.
Chaque joueur doit écrire 5 requêtes avec agrégats sur la table de l'autre.
Objectifs de chaque requête :
1. Un COUNT() pour compter quelque chose
2. Un AVG() pour calculer une moyenne
3. Un MAX() ou MIN() pour trouver un extrême
4. Un GROUP BY pour regrouper
5. Un HAVING pour filtrer les groupes
Le premier joueur qui obtient des résultats corrects sur les 5 requêtes gagne !
Page 15
Cours SQL Complet - Du débutant à l'intermédiaire
Page 16
Cours SQL Complet - Du débutant à l'intermédiaire
Module 5 — Les Jointures
Semaine 5 • Relier les tables entre elles
Les jointures sont souvent perçues comme complexes, mais elles sont en réalité très logiques.
Elles permettent de relier des informations stockées dans différentes tables. C'est le cœur du
modèle relationnel !
5.1 Comprendre les relations entre tables
Dans une base bien conçue, les informations sont réparties dans plusieurs tables liées par des
clés :
Table CLIENTS : id, nom, email
Table COMMANDES : id, client_id, date, montant
^^^^^^^^^
Clé étrangère qui fait
référence à [Link]
Pour voir les commandes AVEC le nom du client, on doit joindre les deux tables.
5.2 INNER JOIN — Intersection
INNER JOIN retourne uniquement les lignes qui ont une correspondance dans LES DEUX
tables.
-- Afficher les commandes avec le nom du client
SELECT [Link], [Link], [Link]
FROM commandes
INNER JOIN clients ON commandes.client_id = [Link];
-- Avec des alias (plus lisible)
SELECT [Link], [Link], [Link]
FROM commandes AS cmd
INNER JOIN clients AS c ON cmd.client_id = [Link];
5.3 LEFT JOIN — Tout garder à gauche
LEFT JOIN retourne TOUTES les lignes de la table de gauche, même sans correspondance.
-- Tous les clients, même ceux qui n'ont jamais commandé
SELECT [Link], COUNT([Link]) AS nb_commandes
FROM clients AS c
LEFT JOIN commandes AS cmd ON [Link] = cmd.client_id
GROUP BY [Link], [Link];
Page 17
Cours SQL Complet - Du débutant à l'intermédiaire
-- Résultat : les clients sans commande auront 0
-- Avec INNER JOIN, ils n'apparaîtraient pas du tout
5.4 Comparatif visuel des jointures
Type Retourne Usage typique
INNER JOIN Lignes avec correspondance dans les 2 Commandes avec leurs
tables clients
LEFT JOIN Toutes les lignes de gauche + Clients avec ou sans
correspondances droite commandes
RIGHT JOIN Toutes les lignes de droite + Commandes avec produits
correspondances gauche (même archivés)
FULL OUTER JOIN Toutes les lignes des 2 tables Audit complet, analyse
d'écarts
5.5 Jointures multiples
-- Commandes avec nom du client et nom du produit
SELECT
[Link] AS client,
[Link] AS produit,
[Link],
[Link]
FROM commandes AS cmd
INNER JOIN clients AS c ON cmd.client_id = [Link]
INNER JOIN produits AS p ON cmd.produit_id = [Link]
ORDER BY [Link] DESC;
✏️ EXERCICE 5 — La base e-commerce complète
Créez ces 3 tables liées :
CLIENTS : id, nom, email, ville
PRODUITS : id, nom, prix, categorie
COMMANDES: id, client_id, produit_id, quantite, date
Insérez des données de test (5 clients, 8 produits, 15 commandes)
Page 18
Cours SQL Complet - Du débutant à l'intermédiaire
Requêtes à écrire :
1. Liste de toutes les commandes avec le nom du client (INNER JOIN)
2. Liste de toutes les commandes avec nom du client ET nom du produit
3. Clients qui n'ont jamais commandé (LEFT JOIN + WHERE IS NULL)
4. Chiffre d'affaires total par client (JOIN + GROUP BY + SUM)
5. Top 3 des produits les plus vendus (en quantité)
🎮 ACTIVITÉ — Enquête SQL : Qui a volé le diamant ?
Jeu d'enquête — Durée : 25 minutes
Contexte : Un diamant a disparu du musée. Vous êtes analyste de données.
La base de données du musée contient 3 tables :
VISITEURS(id, nom, ville, heure_entree, heure_sortie)
BADGES_ACCES(id, visiteur_id, zone, timestamp)
INCIDENTS(id, zone, type, timestamp)
Créez et remplissez ces tables avec des données inventées (10 visiteurs).
Placez un incident 'vol' dans la zone 'Salle des Gemmes' à 14h32.
Mission : Retrouvez le coupable en écrivant des requêtes SQL !
Indices à suivre :
1. Qui était dans le musée entre 14h00 et 15h00 ?
2. Parmi eux, qui a accédé à la 'Salle des Gemmes' ?
3. Qui était dans cette zone EXACTEMENT au moment du vol ?
4. Joignez avec la table VISITEURS pour obtenir le nom du suspect !
Le premier qui identifie le coupable avec ses requêtes SQL a gagné !
Page 19
Cours SQL Complet - Du débutant à l'intermédiaire
Module 6 — Niveau Intermédiaire
Semaine 6 • Sous-requêtes, vues, index et projet final
6.1 Les sous-requêtes (Subqueries)
Une sous-requête est une requête imbriquée dans une autre requête. Elle est exécutée en
premier, et son résultat est utilisé par la requête principale.
-- Produits dont le prix est supérieur à la moyenne
SELECT nom, prix
FROM produits
WHERE prix > (SELECT AVG(prix) FROM produits);
-- Clients qui ont passé au moins une commande
SELECT nom FROM clients
WHERE id IN (SELECT DISTINCT client_id FROM commandes);
-- Clients qui n'ont JAMAIS commandé
SELECT nom FROM clients
WHERE id NOT IN (SELECT DISTINCT client_id FROM commandes);
6.2 EXISTS et NOT EXISTS
-- Plus efficace que IN pour les grandes tables
-- Clients ayant commandé le produit id=5
SELECT [Link]
FROM clients c
WHERE EXISTS (
SELECT 1 FROM commandes cmd
WHERE cmd.client_id = [Link]
AND cmd.produit_id = 5
);
6.3 CREATE VIEW — Les vues
Une vue est une requête sauvegardée qui se comporte comme une table virtuelle. Elle simplifie
les requêtes complexes répétitives :
-- Créer une vue des commandes détaillées
CREATE VIEW vue_commandes_detail AS
SELECT
Page 20
Cours SQL Complet - Du débutant à l'intermédiaire
[Link] AS commande_id,
[Link] AS client,
[Link] AS produit,
[Link],
[Link],
([Link] * [Link]) AS total
FROM commandes cmd
JOIN clients c ON cmd.client_id = [Link]
JOIN produits p ON cmd.produit_id = [Link];
-- Utiliser la vue comme une table normale
SELECT * FROM vue_commandes_detail
WHERE total > 100;
6.4 Index et Performance
Un index accélère considérablement les recherches sur les grandes tables :
-- Créer un index sur une colonne fréquemment recherchée
CREATE INDEX idx_clients_ville ON clients(ville);
CREATE INDEX idx_commandes_date ON commandes(date);
-- Index unique (comme une contrainte UNIQUE)
CREATE UNIQUE INDEX idx_clients_email ON clients(email);
-- Supprimer un index
DROP INDEX idx_clients_ville;
💡 ASTUCE
Quand créer un index ?
• Sur les colonnes utilisées dans WHERE (ex: ville, email, date)
• Sur les colonnes utilisées dans JOIN (clés étrangères)
• Sur les colonnes utilisées dans ORDER BY
Attention : trop d'index ralentissent les INSERT/UPDATE/DELETE !
6.5 Bonnes pratiques SQL
Pratique Pourquoi ? Exemple
Page 21
Cours SQL Complet - Du débutant à l'intermédiaire
Toujours mettre WHERE sur Éviter de modifier tout le tableau DELETE ... WHERE id = 5
UPDATE/DELETE
Tester avec SELECT avant Vérifier ce qui sera supprimé SELECT * puis DELETE
DELETE
Utiliser des alias clairs Lisibilité du code FROM clients AS c
Indenter et commenter le SQL Maintenabilité -- Commentaire explicatif
Éviter SELECT * en Performance et lisibilité SELECT id, nom, email
production
Nommer les colonnes Clarté des résultats SUM(prix) AS total
calculées
✏️ EXERCICE 6 — Projet Final : La Médiathèque
Construisez une base de données complète pour une médiathèque !
Tables à créer :
MEMBRES : id, nom, prenom, email, date_inscription, ville
MEDIAS : id, titre, type (livre/dvd/cd), auteur, annee, disponible
EMPRUNTS : id, membre_id, media_id, date_emprunt, date_retour_prevue,
date_retour_reelle
Missions :
1. Créez les tables avec les bonnes contraintes (NOT NULL, UNIQUE, DEFAULT...)
2. Insérez au moins 10 membres, 20 médias et 30 emprunts
3. Créez une vue 'emprunts_en_cours' (date_retour_reelle IS NULL)
4. Requêtes à écrire :
a) Liste des médias actuellement empruntés avec le nom du membre
b) Membres ayant emprunté plus de 3 médias
c) Médias jamais empruntés (sous-requête avec NOT IN)
d) Retards : emprunts dépassant la date de retour prévue
e) Statistiques : nombre d'emprunts par type de média
f) Top 5 des membres les plus actifs
5. Créez les index appropriés pour optimiser les recherches
🎮 ACTIVITÉ — Tournoi SQL en 4 manches !
Page 22
Cours SQL Complet - Du débutant à l'intermédiaire
Jeu final pour réviser tout le cours — À jouer en groupe ou seul contre la montre
MANCHE 1 — Le SELECT Challenge (3 min) :
Écrivez une requête qui utilise WHERE, ORDER BY et LIMIT en même temps.
MANCHE 2 — L'Agrégat Express (3 min) :
Sans regarder vos notes, écrivez une requête avec GROUP BY et HAVING.
MANCHE 3 — Le JOIN Marathon (5 min) :
Joignez 3 tables en une seule requête avec des alias propres.
MANCHE 4 — La Sous-requête Mystère (5 min) :
Trouvez les produits dont le prix est supérieur à la moyenne de leur catégorie.
(Indice : vous aurez besoin d'une sous-requête corrélée !)
Réponse Manche 4 :
SELECT [Link], [Link], [Link] FROM produits p1
WHERE [Link] > (SELECT AVG([Link]) FROM produits p2
WHERE [Link] = [Link]);
Page 23
Cours SQL Complet - Du débutant à l'intermédiaire
Annexes
Récapitulatif des commandes SQL
Commande Syntaxe de base Usage
SELECT SELECT col FROM table WHERE ... Lire des données
INSERT INSERT INTO table (cols) VALUES (...) Ajouter des données
UPDATE UPDATE table SET col=val WHERE ... Modifier des données
DELETE DELETE FROM table WHERE ... Supprimer des données
CREATE TABLE CREATE TABLE nom (col type, ...) Créer une table
DROP TABLE DROP TABLE nom; Supprimer une table
ALTER TABLE ALTER TABLE nom ADD col type; Modifier une table
CREATE VIEW CREATE VIEW nom AS SELECT ... Créer une vue
CREATE INDEX CREATE INDEX nom ON table(col) Créer un index
Ressources pour aller plus loin
• SQLZoo ([Link]) — Exercices interactifs en ligne
• Mode Analytics SQL Tutorial — Tutoriels avec vraies données
• W3Schools SQL — Référence rapide complète
• [Link] — Pratiquer en ligne sans installation
• Kaggle — Jeux de données réels pour pratiquer
• LeetCode SQL — Défis SQL pour entretiens techniques
Prochaines étapes après ce cours
1. Pratiquer sur des données réelles (Kaggle, [Link])
2. Apprendre les transactions (BEGIN, COMMIT, ROLLBACK)
3. Découvrir les triggers et les procédures stockées
4. Explorer un SGBD spécifique : PostgreSQL ou MySQL
5. Combiner SQL avec Python (bibliothèque pandas, SQLAlchemy)
6. Découvrir les notions de normalisation (1NF, 2NF, 3NF)
🎓 FÉLICITATIONS !
Vous avez terminé le cours SQL complet !
Page 24
Cours SQL Complet - Du débutant à l'intermédiaire
Vous savez maintenant :
✓ Interroger une base de données avec SELECT, WHERE, ORDER BY
✓ Manipuler les données avec INSERT, UPDATE, DELETE
✓ Utiliser les fonctions d'agrégation et GROUP BY
✓ Joindre plusieurs tables avec INNER JOIN et LEFT JOIN
✓ Utiliser des sous-requêtes et créer des vues
La pratique régulière est la clé. Continuez à coder !
Page 25