Bienvenue

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.


Devoirs

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