Imaginez que vous êtes le développeur en charge de la base de données d'une petite boutique en ligne. Votre base de données contient des informations sur les Clients, les Produits qu'ils achètent, et les Commandes qu'ils passent.
Mise en Place : Le Code SQL pour Créer et Remplir les Tables
Avant de commencer les exercices, exécutez ce code SQL dans votre SGBD (MySQL, PostgreSQL, SQLite, etc.) pour créer la structure et insérer les données de départ.
-- Création de la table des clients
CREATE TABLE Clients (
id INT PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
ville VARCHAR(100)
);
-- Création de la table des produits
CREATE TABLE Produits (
id INT PRIMARY KEY AUTO_INCREMENT,
nom_produit VARCHAR(150) NOT NULL,
categorie VARCHAR(50),
prix DECIMAL(10, 2) NOT NULL
);
-- Création de la table des commandes
CREATE TABLE Commandes (
id INT PRIMARY KEY AUTO_INCREMENT,
client_id INT,
date_commande DATE,
montant_total DECIMAL(10, 2),
FOREIGN KEY (client_id) REFERENCES Clients(id)
);
-- Insertion des données initiales
INSERT INTO Clients (nom, email, ville) VALUES
('Alice Martin', 'alice@example.com', 'Paris'),
('Bob Durand', 'bob@example.com', 'Lyon'),
('Charlie Dupont', 'charlie@example.com', 'Marseille'),
('Diane Leroy', 'diane@example.com', 'Paris');
INSERT INTO Produits (nom_produit, categorie, prix) VALUES
('Livre SQL pour Débutants', 'Livres', 25.50),
('Clavier Mécanique', 'Électronique', 120.00),
('Souris Ergonomique', 'Électronique', 45.99),
('Tasse à Café', 'Maison', 12.00),
('Stylo Plume', 'Fournitures', 55.00);
INSERT INTO Commandes (client_id, date_commande, montant_total) VALUES
(1, '2024-01-15', 145.50),
(2, '2024-01-17', 12.00),
(1, '2024-02-05', 55.00),
(4, '2024-02-12', 45.99),
(2, '2024-03-21', 145.50);
Module 2 : Premiers Pas avec SQL
Objectif : Maîtriser les commandes de base SELECT, INSERT, UPDATE, DELETE et les clauses WHERE, ORDER BY.
1. Lire les Données (Read)
Question 2.1
Quelle requête permet d'afficher le nom et l'email de tous les clients ?
Réponse correcte : b) SELECT nom, email FROM Clients;
Question 2.2
Quelle requête permet de trouver tous les produits de la catégorie 'Électronique' ?
Réponse correcte : a) SELECT * FROM Produits WHERE categorie = 'Électronique';
Question 2.3
Quelle requête permet de lister tous les clients de 'Paris', triés par ordre alphabétique de leur nom ?
Réponse correcte : c) SELECT * FROM Clients WHERE ville = 'Paris' ORDER BY nom;
Question 2.4
Quelle requête permet de trouver la commande la plus récente ?
Réponse correcte : b) SELECT * FROM Commandes ORDER BY date_commande DESC LIMIT 1;
2. Créer des Données (Create)
Question 2.5
Quelle est la syntaxe correcte pour ajouter un "Carnet de Notes" (categorie: "Fournitures", prix: 7.50) ?
Réponse correcte : c) INSERT INTO Produits (nom_produit, categorie, prix) VALUES ('Carnet de Notes', 'Fournitures', 7.50);
3. Mettre à Jour des Données (Update)
Question 2.6
Comment mettre à jour le prix de la "Souris Ergonomique" à 49.99€ ?
Réponse correcte : a) UPDATE Produits SET prix = 49.99 WHERE nom_produit = 'Souris Ergonomique';
4. Supprimer des Données (Delete)
Question 2.7
Quelle requête supprime le "Stylo Plume" de la table Produits ?
Réponse correcte : b) DELETE FROM Produits WHERE nom_produit = 'Stylo Plume';
Module 3 : Conception d'un Schéma Relationnel
Objectif : Appliquer les concepts de modélisation en créant une nouvelle table et en la reliant aux tables existantes.
Le Problème : Notre table Commandes ne nous dit pas quels produits ont été achetés, ni en quelle quantité. C'est une relation Plusieurs-à-Plusieurs : une commande peut contenir plusieurs produits, et un produit peut être dans plusieurs commandes.
Question 3.1
Quelle est la meilleure structure pour la table de jonction Details_Commande afin de lier Commandes et Produits ?
Réponse correcte : c) La structure complète avec PRIMARY KEY composite et FOREIGN KEY.
Question 3.3
Quel est le rôle principal d'une PRIMARY KEY (Clé Primaire) ?
Réponse correcte : b) S'assurer que chaque ligne de la table est identifiable de manière unique.
Question 3.4
Pour modéliser une relation "Un-à-Plusieurs" entre Auteurs (un) et Livres (plusieurs), où doit être placée la FOREIGN KEY (Clé Étrangère) ?
Réponse correcte : c) Dans la table Livres, faisant référence à la table Auteurs.
Question 3.5
Une table contient une colonne telephones où une seule cellule peut contenir la valeur "0612345678, 0198765432". Quelle règle de normalisation est violée ?
Réponse correcte : b) La Première Forme Normale (1NF).