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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.