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.


Série d'exercices sur les requêtes sélection multitables avec jointure

Travaux dirigés 8

			##Auteur : Enseignant
			##École : Collège Marie Victorin 
			##Session : Hiver 2026
			##Titre du cours : Introduction aux bases de données
			##Titre du programme : Travaux dirigés 8
			##Version : 1.0
			##Date : 00/00/2026
			##Langage et version : SQL 
			##Moteur : SQL Server Express
		
			-- Les requêtes sélection dans le langage SQL

			-- Objectif : 
			-- Ce travail dirigé portera sur la création de requêtes sélection multitables avec des jointures
			-- ==============================================================================================

			-- ***************************************************************************
			-- Vérifications à faire systématiquement AVANT d'écrire les requêtes
			-- Vérifier la structure de la table à utiliser, c'est à dire :
			--		Le nom de la table
			--		Le nom des colonnes
			--		Le type des colonnes
			--		Les données contenues dans la table

			-- Base de données à utiliser : BDRH

			-- ***************************************************************************

			-- ---------
			-- Requête 1
			-- Écrire une requête qui affiche les données personnelles des employés ainsi que les personnes à charge
			-- Démarche
			-- Quelle est la table maitre ? La clé primaire ?
			-- Quelle est la table secondaire ? La clé étrangère

			-- On affichera : 

			-- Le nom de l'employé
			-- Le prénom de l'employé
			-- le courriel
			-- Le téléphone
			-- le nom et le prénom de la personne à charge (Nom, Prenom)
			-- le lien de parenté

			-- Votre code ici
			-- Cette requete est incorrecte car elle fait un produit cartésien
			-- Il n'y a pas de jointure
			-- version I
			SELECT
				A.[nom],
				A.[prenom],
				A.[courriel],
				A.[telephone],
				CONCAT(B.nom, ', ', B.prenom) NomComplet,
				B.lien_parente
			FROM 
				[tbl_employes] A,
				[dbo].[tbl_personnes_a_charge] B
			ORDER BY A.nom

			-- ---------
			-- Version II
			-- Cette requete est correcte avec la jointure
			SELECT
				A.[nom],
				A.[prenom],
				A.[courriel],
				A.[telephone],
				CONCAT(B.nom, ', ', B.prenom) NomComplet,
				B.lien_parente
			FROM 
				[tbl_employes] A,
				[dbo].[tbl_personnes_a_charge] B
			WHERE
				A.id_employe = B.id_employe -- jointure (équi-jointure)
			ORDER BY A.nom

			-- -----------
			-- Version III
			-- Cette requete est correcte avec la jointure
			SELECT
				A.[nom],
				A.[prenom],
				A.[courriel],
				A.[telephone],
				CONCAT(B.nom, ', ', B.prenom) NomComplet,
				B.lien_parente
			FROM 
				[tbl_employes] A
				INNER JOIN [dbo].[tbl_personnes_a_charge] B
				ON A.id_employe = B.id_employe -- jointure (équi jointure)
			ORDER BY A.nom			
		
			-- ---------
			-- Requête 2
			-- Écrire une requête qui affiche les pays ainsi que les régions ou ils sont situés.

			-- Démarche
			-- Quelle est la table maitre ? La clé primaire ?
			-- Quelle est ;a table secondaire ? La clé étrangère

			-- On affichera : 

			-- La région
			-- Le pays

			-- La liste sera triée par région et par pays

			-- Votre code ici
			SELECT
				A.nom_region,
				B.nom_pays
			FROM
				[tbl_regions] A,
				[tbl_pays] B
			WHERE
				A.id_region = B.id_region
			ORDER BY 1, 2
		
			-- ---------
			-- Requête 3
			-- Modifier la requête précédente pour afficher le nombre de pays dans chaque région

			-- On affichera : 
			-- La région
			-- Le nombre de pays
			-- 
			-- Votre code ici
			SELECT
				A.nom_region,
				COUNT(B.nom_pays)
			FROM
				[tbl_regions] A,
				[tbl_pays] B
			WHERE
				A.id_region = B.id_region
			GROUP BY 
				A.nom_region
			ORDER BY 1, 2
		
			-- ---------
			-- Requête 4
			-- Modifier la requête précédente pour afficher les régions ayant plus de 5 pays

			-- On affichera : 
			-- La région
			-- Le nombre de pays
			-- 
			-- Votre code ici
			SELECT
				A.nom_region,
				COUNT(B.nom_pays) NbPays
			FROM
				[tbl_regions] A,
				[tbl_pays] B
			WHERE
				A.id_region = B.id_region
			GROUP BY 
				A.nom_region
			HAVING 
				COUNT(B.nom_pays) > 5
			ORDER BY 1, 2
		
			-- ----------
			-- Requête 5
			-- Écrire une requête qui affiche les informations professionnelles des employés.

			-- Démarche
			-- Quelle est la table maitre ? La clé primaire ?
			-- Quelle est ;a table secondaire ? La clé étrangère

			-- On affichera : 
			-- le nom complet de l'employé (Nom, Prenom)
			-- Le courriel
			-- Le téléphone
			-- Le poste accupé

			-- La liste sera triée par intitulé de poste.

			-- Votre code ici
			SELECT
				CONCAT(A.nom, ' ', A.prenom) NomComplet,
				A.[courriel],
				A.[telephone],
				B.intitule_poste
			FROM
				[tbl_employes] A,
				[dbo].[tbl_postes] B
			WHERE
				A.id_poste = B.id_poste
			ORDER BY
				B.intitule_poste;
		
			-- ----------
			-- Requête 6
			-- Modifier la requête précédente pour affichier le nombre d'employés dans chaque poste.
			-- Afficher les postes ayant le plus d'employés en premier
			-- On affichera : 
			-- le nom du poste
			-- le nombre total d’employés qui occupent ce poste

			-- Votre code ici
			SELECT
				B.intitule_poste Poste,
				COUNT(A.id_employe) NbEmployes
			FROM
				[tbl_employes] A,
				[dbo].[tbl_postes] B
			WHERE
				A.id_poste = B.id_poste
			GROUP BY
				B.intitule_poste
			ORDER BY COUNT(A.id_employe) DESC;
		
			-- ----------
			-- Requête 7
			-- Modifier la requête précédente pour affichier les postes ayant plus de 2 employés
			-- Afficher les postes ayant le plus d'employés en premier
			-- On affichera : 
			-- le nom du poste
			-- le nombre total d’employés qui occupent ce poste

			-- Votre code ici
			SELECT
				B.intitule_poste Poste,
				COUNT(A.id_employe) NbEmploye
			FROM
				[tbl_employes] A,
				[dbo].[tbl_postes] B
			WHERE
				A.id_poste = B.id_poste
			GROUP BY
				B.intitule_poste
			HAVING 
				COUNT(A.id_employe) > 2
			ORDER BY 
				COUNT(A.id_employe) DESC;
		
			-- ----------
			-- Requête 8
			-- Écrire une requête qui affiche l'emplacement ou travaillent les employés.
			-- 
			-- On affichera : 
			-- le nom complet de l'employé (table employe) *
			-- La date d'embauche (table employe) *
			-- Salaire (table employe) *
			-- Le téléphone (table employe) *
			-- Le département (table departement) *
			-- L'adresse du lieu de travail (table employe) *
			-- la ville (table site) *
			-- La province (table site) *
			-- Le pays (table site) *
			-- La région (table region)
			--
			-- Votre code ici

			SELECT
				CONCAT(emp.nom, ', ', emp.prenom) NomComplet,
				emp.date_embauche,
				emp.salaire,
				emp.telephone,
				dept.nom_departement,
				sites.adresse_rue,
				sites.province,
				sites.ville,
				pays.nom_pays,
				regi.nom_region
			FROM 
				[dbo].[tbl_employes] emp,
				[dbo].[tbl_departements] dept,
				[dbo].[tbl_sites] sites,
				[dbo].[tbl_pays] pays,
				[dbo].[tbl_regions] regi
			WHERE
				emp.id_departement = dept.id_departement AND
				dept.id_site = sites.id_site AND
				sites.id_pays =pays.id_pays AND
				pays.id_region = regi.id_region
		

		

W3schools

Python.org