Programme du Cours

Un parcours complet pour maîtriser SQL et MySQL, du premier SELECT au reporting avancé. Chaque chapitre contient de la théorie, des exemples SQL et des exercices pratiques basés sur le projet SunuShop.

Chapitres: 17
Durée totale: ~20 heures
Niveau: Débutant (aucun prérequis)
Chapitre 030 min

Introduction — Pourquoi les bases de données

Le problème sans BDD. Ce qu'est une BDD relationnelle. SQL le langage universel (DDL, DML, DCL). MySQL et phpMyAdmin. Installer XAMPP. Créer la base sunushop.

Base relationnelleSQL (DDL, DML, DCL)MySQLphpMyAdminXAMPP
Chapitre 145 min

Créer ses premières tables — CREATE TABLE

Types de colonnes (INT, VARCHAR, TEXT, DECIMAL, DATETIME, BOOLEAN, ENUM, JSON). Contraintes (PK, AUTO_INCREMENT, NOT NULL, DEFAULT, UNIQUE, CHECK, UNSIGNED). Conventions de nommage Laravel. Tables categories + products.

CREATE TABLETypes de colonnesContraintesConventions Laravel
Chapitre 235 min

Insérer des données — INSERT

INSERT INTO ... VALUES (une ligne, plusieurs lignes). Guillemets et types. AUTO_INCREMENT. Apostrophes et échappement. ON DUPLICATE KEY UPDATE. Seed : 5 catégories + 20 produits sénégalais réalistes.

INSERT INTOVALUES multiplesON DUPLICATE KEYSeed données
Chapitre 350 min

Lire les données — SELECT

SELECT *, SELECT colonnes. WHERE (=, !=, >, <, AND, OR, NOT). IN, BETWEEN, LIKE (%), IS NULL. ORDER BY (ASC, DESC). LIMIT, OFFSET (pagination). AS (alias). DISTINCT. Colonnes calculées.

SELECT / WHEREIN / BETWEEN / LIKEORDER BY / LIMITDISTINCT / AS
Chapitre 435 min

Modifier et supprimer — UPDATE et DELETE

UPDATE SET WHERE (expressions : stock - 1, price * 0.9). DELETE FROM WHERE. Le danger du sans WHERE. TRUNCATE vs DELETE. Le filet de sécurité (SELECT avant UPDATE/DELETE). Safe update mode.

UPDATE SET WHEREDELETE FROM WHERETRUNCATE vs DELETESafe update mode
Chapitre 540 min

Modifier la structure — ALTER TABLE

ADD COLUMN, DROP COLUMN, MODIFY, CHANGE, RENAME TABLE. Ajouter/supprimer des contraintes et index. Bonnes pratiques (backup avant, tester en dev). Application : ajouter weight_kg, discount_percent, brand. Créer tags + product_tag.

ALTER TABLEADD / DROP COLUMNMODIFY / CHANGETable pivot N-N
Chapitre 650 min

Les relations — clés étrangères

Clé primaire vs clé étrangère. Intégrité référentielle. Relations 1-N, N-N (table pivot), 1-1. ON DELETE (CASCADE, RESTRICT, SET NULL). Tables customers et orders.

FOREIGN KEYRelations 1-N / N-N / 1-1ON DELETE CASCADENormalisation
Chapitre 750 min

Compléter le schéma — commandes, avis, paiements

Créer order_items (table pivot commande-produit), reviews (avec CHECK), payments (Wave, Orange Money). Insérer toutes les données de seed. Mettre à jour les totaux des commandes. Le schéma complet à 7 tables.

order_itemsreviews / paymentsTransactionsSchéma complet
Chapitre 850 min

Les jointures — INNER JOIN et LEFT JOIN

Pourquoi joindre (le problème des 4 requêtes séparées). INNER JOIN (correspondance obligatoire). LEFT JOIN (garder les lignes sans correspondance). Alias de tables. Joindre 3, 4, 5 tables. Self-join.

INNER JOINLEFT JOINAlias de tablesSelf-join
Chapitre 945 min

Fonctions d'agrégation — COUNT, SUM, AVG, GROUP BY

Les 5 fonctions (COUNT, COUNT DISTINCT, SUM, AVG, MIN, MAX). GROUP BY — regrouper par catégorie, par mois, par client. HAVING — filtrer les groupes (HAVING vs WHERE). Stats catalogue, CA, panier moyen, top clients.

COUNT / SUM / AVGMIN / MAXGROUP BYHAVING
Chapitre 1045 min

Sous-requêtes et requêtes imbriquées

Sous-requête dans WHERE (valeur unique, IN, NOT IN). Sous-requête corrélée. Sous-requête dans FROM (table dérivée). EXISTS / NOT EXISTS. Quand utiliser sous-requête vs JOIN.

Sous-requête WHERECorréléeTable dérivéeEXISTS / NOT EXISTS
Chapitre 1150 min

Fonctions MySQL — texte, dates, nombres, CASE WHEN

Fonctions texte (CONCAT, UPPER, TRIM, SUBSTRING, REPLACE, LENGTH). Fonctions date (NOW, DATE_FORMAT, DATEDIFF, DATE_ADD, YEAR/MONTH). Fonctions numériques (ROUND, FORMAT). CASE WHEN. COALESCE, IFNULL.

CONCAT / UPPER / TRIMDATE_FORMAT / DATEDIFFCASE WHENCOALESCE / IFNULL
Chapitre 1240 min

Les vues — VIEW

CREATE VIEW, CREATE OR REPLACE VIEW, DROP VIEW. Pourquoi les vues (simplifier, sécuriser, standardiser, reporting). Limitations. 4 vues métier : v_catalog, v_orders_summary, v_monthly_revenue, v_stock_alerts.

CREATE VIEWSimplifier les requêtesSécuriser l'accèsVues de reporting
Chapitre 1345 min

Index et performance — EXPLAIN

Comment fonctionne un index (B-tree, métaphore du livre). CREATE INDEX (simple, composite, unique). EXPLAIN — lire le résultat (type, key, rows). Quand indexer et quand NE PAS indexer. Index stratégiques pour SunuShop.

CREATE INDEXEXPLAINB-treeIndex composite
Chapitre 1450 min

Sécurité — injection SQL, utilisateurs, sauvegardes

Injection SQL (comment ça marche, démonstration, requêtes préparées). Utilisateurs MySQL (CREATE USER, GRANT, REVOKE, principe moindre privilège). Sauvegardes (mysqldump, restauration, test). Mots de passe hashés.

Injection SQLRequêtes préparéesGRANT / REVOKEmysqldump
Chapitre 1560 min

Reporting métier — les requêtes du patron

Théorie du reporting (KPIs, dimensions, métriques, questions business). 12 requêtes métier complètes pour SunuShop : CA total et mensuel, CA par catégorie, top produits, top clients, panier moyen, taux d'annulation, stock mort, alertes.

KPIs / MétriquesTop produits / clientsPanier moyenExport CSV
Chapitre 1690 min

Projet final — SunuShop complet

Schéma relationnel récapitulatif (7 tables). Récapitulatif de TOUTES les commandes SQL. Checklist complète. Examen final : 12 questions métier à résoudre en SQL pur. La suite : PHP + PDO, Laravel + Eloquent, PostgreSQL.

Schéma completChecklistExamen finalPHP / Laravel

Prêt à commencer ?

Cliquez sur un chapitre pour accéder au contenu détaillé avec des exemples SQL et des exercices pratiques.

Commencer par l'Introduction