Dans cette section, vous trouverez des ressources sur les cours que j'enseigne à savoir de la documentation, du code, des vidéos etc. Dès que je trouve quelque chose d'intéressant à partager, je le mettrai à disposition ici pour mes étudiants.
Devoir 3
##Auteur : Enseignant ##École : Collège Marie Victorin ##Session : Hiver 2026 ##Titre du cours : Introduction aux bases de données ##Titre du programme : Examen blanc ##Version : 1.0 ##Date : 00/00/2026 ##Langage et version : SQL ##Moteur : SQL Server Express
Question 1 — Analyse des abonnements les plus utilisés La direction veut connaître les abonnements les plus utilisés parmi ceux dont le prix est supérieur au prix moyen de tous les abonnements. Afficher les informations suivantes : type d’abonnement prix durée en mois nombre d’adhérents inscrits à cet abonnement. Contraintes : afficher seulement les abonnements dont le prix est supérieur au prix moyen des abonnements afficher seulement les abonnements ayant au moins 3 adhérents trier les résultats du plus grand nombre d’adhérents au plus petit. Commentaire : **************************************************************************************/ -- # Votre code ici USE SalleDeSport; GO SELECT A.type AS TypeAbonnement, A.prix AS Prix, A.duree_mois AS DureeMois, COUNT(AD.adherent_id) AS NombreAdherents FROM Abonnements A INNER JOIN Adherents AD ON A.abonnement_id = AD.abonnement_id WHERE A.prix > ( SELECT AVG(prix) FROM Abonnements ) GROUP BY A.type, A.prix, A.duree_mois HAVING COUNT(AD.adherent_id) >= 3 ORDER BY NombreAdherents DESC;
/************************************************************************************* Question 2 — Analyse des cours populaires en soirée La direction veut connaître les cours du soir les plus populaires. Afficher les informations suivantes : nom du cours jour de la semaine heure du cours durée du cours nom du coach prénom du coach nombre total de réservations. Contraintes : afficher seulement les cours donnés à partir de 17h00 afficher seulement les cours d’une durée d’au moins 45 minutes afficher seulement les cours dont le nombre de réservations est supérieur à la moyenne des réservations par cours trier les résultats du cours le plus réservé au moins réservé. **************************************************************************************/ -- # Votre code ici SELECT C.nom AS NomCours, C.jour_semaine AS JourSemaine, C.heure AS HeureCours, C.duree_minutes AS DureeMinutes, CO.nom AS NomCoach, CO.prenom AS PrenomCoach, COUNT(R.reservation_id) AS NombreReservations FROM Cours C INNER JOIN Coachs CO ON C.coach_id = CO.coach_id INNER JOIN Reservations R ON C.cours_id = R.cours_id WHERE C.heure >= '17:00' AND C.duree_minutes >= 45 GROUP BY C.nom, C.jour_semaine, C.heure, C.duree_minutes, CO.nom, CO.prenom HAVING COUNT(R.reservation_id) > ( SELECT COUNT(*) * 1.0 / COUNT(DISTINCT cours_id) FROM Reservations ) ORDER BY NombreReservations DESC;
/************************************************************************************* Question 3 — Adhérents actifs avec abonnement long La direction veut repérer les adhérents actifs qui possèdent un abonnement de longue durée. Afficher les informations suivantes : nom de l’adhérent prénom de l’adhérent email type d’abonnement durée de l’abonnement nombre total de réservations. Contraintes : afficher seulement les adhérents ayant fait au moins 2 réservations afficher seulement les adhérents dont la durée d’abonnement est supérieure à la durée moyenne des abonnements trier les résultats par nombre de réservations décroissant. **************************************************************************************/ -- # Votre code ici SELECT AD.nom AS NomAdherent, AD.prenom AS PrenomAdherent, AD.email AS Email, A.type AS TypeAbonnement, A.duree_mois AS DureeMois, COUNT(R.reservation_id) AS NombreReservations FROM Adherents AD INNER JOIN Abonnements A ON AD.abonnement_id = A.abonnement_id INNER JOIN Reservations R ON AD.adherent_id = R.adherent_id WHERE A.duree_mois > ( SELECT AVG(duree_mois) FROM Abonnements ) GROUP BY AD.nom, AD.prenom, AD.email, A.type, A.duree_mois HAVING COUNT(R.reservation_id) >= 2 ORDER BY NombreReservations DESC;
/************************************************************************************* Partie III Contexte La direction de la salle de sport veut mettre en place un petit système interne pour identifier les adhérents les plus fidèles. Elle souhaite attribuer un statut et des points de fidélité aux adhérents. Cependant, les données originales ne doivent pas être modifiées. Vous devez donc travailler uniquement sur des copies des tables. **************************************************************************************/ /************************************************************************************** Étape 1 — Créer des copies de tables Créer une copie des tables suivantes : - Adherents vers tblAdherents - Reservations vers tblReservations. **************************************************************************************/ -- # Votre code ici -- — Nettoyage de sécurité -- Cette étape permet de relancer le script sans bloquer si les objets existent déjà. USE SalleDeSport; GO DROP VIEW IF EXISTS vAdherentsFideles; GO DROP TABLE IF EXISTS tblReservations; GO DROP TABLE IF EXISTS tblAdherents; GO -- — Création des copies SELECT * INTO tblAdherents FROM Adherents; SELECT * INTO tblReservations FROM Reservations;
/************************************************************************************** Étape 2 — Modifier la structure de la copie des adhérents Ajouter les colonnes suivantes à la table tblAdherents : - statut_fidelite de type VARCHAR(30) - nb_points de type INT. **************************************************************************************/ -- # Votre code ici ALTER TABLE tblAdherents ADD statut_fidelite VARCHAR(30), nb_points INT; GO
/************************************************************************************* Étape 3 — Initialiser les statuts et les points Mettre à jour la table tblAdherents selon les règles suivantes : - les adhérents inscrits en 2025 obtiennent le statut "Nouveau" - les adhérents inscrits avant 2025 obtiennent le statut "Fidele" - tous les adhérents obtiennent 10 points de départ. **************************************************************************************/ -- # Votre code ici UPDATE tblAdherents SET nb_points = 10, statut_fidelite = CASE WHEN YEAR(date_inscription) = 2025 THEN 'Nouveau' WHEN YEAR(date_inscription) < 2025 THEN 'Fidele' ELSE 'A verifier' END; GO
/************************************************************************************* Étape 4 — Ajouter des points aux adhérents actifs Ajouter 20 points supplémentaires aux adhérents ayant effectué au moins 2 réservations. **************************************************************************************/ -- # Votre code ici UPDATE tblAdherents SET nb_points = nb_points + 20 WHERE adherent_id IN ( SELECT adherent_id FROM tblReservations GROUP BY adherent_id HAVING COUNT(reservation_id) >= 2 ); GO
/************************************************************************************* Étape 5 — Créer une vue de suivi Créer une vue nommée vAdherentsFideles. Cette vue doit afficher les adhérents ayant au moins une réservation, avec les colonnes suivantes : - nom - prénom - email - date d’inscription - statut de fidélité - nombre de points - nombre total de réservations. **************************************************************************************/ -- # Votre code ici CREATE VIEW vAdherentsFideles AS SELECT AC.nom AS Nom, AC.prenom AS Prenom, AC.email AS Email, AC.date_inscription AS DateInscription, AC.statut_fidelite AS StatutFidelite, AC.nb_points AS NombrePoints, COUNT(RC.reservation_id) AS NombreReservations FROM tblAdherents AC INNER JOIN tblReservations RC ON AC.adherent_id = RC.adherent_id GROUP BY AC.nom, AC.prenom, AC.email, AC.date_inscription, AC.statut_fidelite, AC.nb_points; GO
/************************************************************************************* Étape 6 — Nettoyage À la fin du travail, écrire les commandes permettant de supprimer : - la vue vAdherentsFideles - les tables tblAdherents et tblReservations. **************************************************************************************/ -- # Votre code ici DROP VIEW IF EXISTS vAdherentsFideles; GO DROP TABLE IF EXISTS tblReservations; GO DROP TABLE IF EXISTS tblAdherents; GO
W3schools
Python.org