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 commandes DDL et DML

Travaux dirigés 14

			##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 14
			##Version : 1.0
			##Date : 00/00/2026
			##Langage et version : SQL 
			##Moteur : SQL Server Express
		
			-- ==============================================================================
			-- Les commandes DML : INSERT - UPDATE - DELETE
			-- Les vues : CREATE / DROP  VIEW

			-- Objectif : 
			-- Ce Laboratoire vise à acquérir les compétences suivantes
			-- ========================================================
			-- La commandes DML : INSERT - UPDATE - DELETE
			-- Les vues

			-- Base de données à utiliser : xtremefr
			-- Effectuer la copie de toutes les tables de base de données xtremefr
			-- Les nouvelles tables seront préfixées de tbl. 
			-- Exemple : Achats deviendra tblAchats et ainsi de suite.


		
			-- Utilisation de la base master
			USE master
			GO

			-- Vérification
			SELECT DB_NAME() BaseActive

			-- Vérification de l'existence de la base de données TD14
			DROP DATABASE IF EXISTS TD14;
			GO

			-- Créer une nouvelle base de données TD14
			CREATE DATABASE TD14;
			GO

			-- Utiliser la base de donnée TD14
			USE TD14
			GO

			-- Vérification de la BD
			SELECT DB_NAME() BaseActive


			-- Réaliser une copie des toutes les tables de la base de doonées xtremefr
			-- Les copiues seront créés dans la base de données TD14
			-- Elles auront :
			-- le préfixe tbl ex: tblClients
			-- Le nom des copies doit être sans espace et caractères accentués. 
			-- Exemple : tblDetailCommandes et non "Détail des Commandes"

			-- Comment utiliser des données d'une autre base de données
			-- Pour utiliser les données d'une autre base de données,
			-- il faut préfixer l'objet : (la table, la vue) du nom de la base de données
			-- sous la forme : base_de_donnees.schema.table


			-- Copie de la table Achats
			DROP TABLE IF EXISTS tblAchats;
			SELECT * 
			INTO tblAchats
			FROM xtremefr.[dbo].[Achats];


			-- Vérification de la copie
			SELECT * FROM tblAchats;


			-- Copie de la table tblAdresseEmployes
			DROP TABLE IF EXISTS tblAdresseEmployes;
			SELECT * 
			INTO tblAdresseEmployes
			FROM xtremefr.[dbo].[Adresses des employés];


			-- Vérification de la copie
			SELECT * FROM tblAdresseEmployes;


			-- Copie de la table tblCommandes
			DROP TABLE IF EXISTS tblCommandes;
			SELECT * 
			INTO tblCommandes
			FROM xtremefr.[dbo].[Commandes];


			-- Vérification de la copie
			SELECT * FROM tblCommandes;


			-- Copie de la table tblCredits
			DROP TABLE IF EXISTS tblCredits;
			SELECT * 
			INTO tblCredits
			FROM xtremefr.[dbo].[Crédits];


			-- Vérification de la copie
			SELECT * FROM tblCredits;


			-- Copie de la table tblClients
			DROP TABLE IF EXISTS tblClients;
			SELECT * 
			INTO tblClients
			FROM xtremefr.[dbo].[Clients];


			-- Vérification de la copie
			SELECT * FROM tblAchats;


			-- Copie de la table tblDetailCommandes
			DROP TABLE IF EXISTS tblDetailCommandes;
			SELECT * 
			INTO tblDetailCommandes
			FROM xtremefr.[dbo].[Détails des commandes];


			-- Vérification de la copie
			SELECT * FROM tblDetailCommandes;


			-- Copie de la table tblEmployes
			DROP TABLE IF EXISTS tblEmployes;
			SELECT * 
			INTO tblEmployes
			FROM xtremefr.[dbo].[Employés];


			-- Vérification de la copie
			SELECT * FROM tblEmployes;


			-- Copie de la table tblFournisseurs
			DROP TABLE IF EXISTS tblFournisseurs;
			SELECT * 
			INTO tblFournisseurs
			FROM xtremefr.[dbo].[Fournisseurs];


			-- Vérification de la copie
			SELECT * FROM tblFournisseurs;


			-- Copie de la table tblRegions
			DROP TABLE IF EXISTS tblRegions;
			SELECT * 
			INTO tblRegions
			FROM xtremefr.[dbo].[Régions];


			-- Vérification de la copie
			SELECT * FROM tblRegions;


			-- Copie de la table tblProduits
			DROP TABLE IF EXISTS tblProduits;
			SELECT * 
			INTO tblProduits
			FROM xtremefr.[dbo].[Produits];


			-- Vérification de la copie
			SELECT * FROM tblProduits;


			-- Copie de la table tblTypeProduit
			DROP TABLE IF EXISTS tblTypeProduit;
			SELECT * 
			INTO tblTypeProduit
			FROM xtremefr.[dbo].[Types de produit];


			-- Vérification de la copie
			SELECT * FROM tblTypeProduit;
		
			-- *****************************************************************************************************************************************
			-- Les requêtes MISE à JOUR
			-- *****************************************************************************************************************************************

			-- Mise à jour de données. 
			-- Utilisation de la commande UPDATE
			-- Mise à jour globale
			-- Syntaxe de base de la commande UPDATE
			-- UPDATE 
			-- SET  = 

			-- Mise à jour conditionnelle
			-- Syntaxe avec la claude WHERE de la commande UPDATE
			-- UPDATE 
			-- SET  = 
			-- WHERE 

			-- ****************************************************************************************************************************************
			-- A T T E N T I O N - La commande UPDATE EST DANGEREUSE - Elle ne peut être annulée. (UNDO)
			-- Toutes les requêtes de mise à jour doivent suivre la démarche à trois étapes :
			-- 1- Identification des enregistrements à mettre à jour (une instruction SELECT avec ou sans condition)
			-- 2- Mise à jour à proprement parler (Une instruction UPDATE avec ou sans condition)
			-- 3- Vérification de la mise à jour (une instruction SELECT avec la condition appropriée pour vérifier que la mise à jour UPDATE a produit le résultat attendu)
			-- ****************************************************************************************************************************************
			-- ****************************************************************************************************************************************
			-- Mise à jour 1
			-- *************
			-- Écrire une requête qui effectue la mise à jour de la copie de la table clients en remplaçant les codes postaux qu'on ne connaît pas par 'NA'
			-- Démarche : 
			-- Étape 1 : Sélectionner les clients dont on ne connaît pas le code postal et Vérifier que le résultat obtenu est conforme à l'énoncé
			SELECT * 
			FROM [dbo].[tblClients]
			WHERE [Code postal] IS NULL;

			-- Etape 2 : Effectuer la mise à jour
			UPDATE [dbo].[tblClients]
			SET
				[Code postal] = 'NA'
			WHERE [Code postal] IS NULL;

			-- Étape 3 : Vérifier l'exactitude de la mise à jour
			SELECT * 
			FROM [dbo].[tblClients]
			WHERE [Code postal] = 'NA';

			-- ****************************************************************************************************************************************
			-- Mise à jour 2
			-- *************
			-- Ecrire une requête qui met à jour le prix du produit dont le type est  7. Le prix sera majoré de 3%.
			-- Votre code ici

			-- 1- Identification des enregistrements à mettre à jour (une instruction SELECT)
			SELECT *
			FROM tblproduits
			WHERE [ID type de produit] = 7;

			-- 2 - Mise à jour
			UPDATE tblproduits
			SET [Prix conseillé] = [Prix conseillé] + [Prix conseillé] * 0.03
			WHERE [ID type de produit] = 7;

			-- 3 - Vérification
			SELECT *
			FROM tblproduits
			WHERE [ID type de produit] = 7;


			-- ****************************************************************************************************************************************
			-- Mise à jour  3
			-- **************
			-- Ecrire une requête qui met à jour la couleur des produits dont le type est 8 du fournisseur 5. La nouvelle couleur est noire .
			-- Votre code ici

			-- 1- Identification des enregistrements à mettre à jour (une instruction SELECT)
			SELECT *
			FROM tblproduits
			WHERE 
				[ID type de produit] = 8 AND
				[ID fournisseur] = 5;

			-- 2 - Mise à jour
			UPDATE tblproduits
			SET [Couleur] = 'Noir'
			WHERE 	
				[ID type de produit] = 8 AND
				[ID fournisseur] = 5;

			-- 3 - Vérification
			SELECT *
			FROM tblproduits
			WHERE 
				[ID type de produit] = 8 AND
				[ID fournisseur] = 5;

			-- ****************************************************************************************************************************************
			-- Mise à jour  4
			-- **************
			-- Écrire une requête qui met à jour la copie de la table clients en remplacant la colonne 'adresse 2' qu'on ne connaît pas par 'inconnu'
			-- Démarche
			-- Étape 1 : Sélectionner les clients dont on ne connaît pas le code postal et Vérifier que le résultat obtenu est conforme à l'énoncé
			SELECT  
				[Nom du client],
				[Adresse 2]
			FROM [dbo].[tblClients]
			WHERE [Adresse 2] IS NULL;

			-- Etape 2 : Effectuer la mise à jour

			UPDATE [dbo].[tblClients]
			SET
				[Adresse 2] = 'inconnu'
			WHERE [Adresse 2] IS NULL;

			-- Étape 3 : Vériifier l'exactitude de la mise à jour

			SELECT  
				[Nom du client],
				[Adresse 2]
			FROM [dbo].[tblClients]
			WHERE [Adresse 2] = 'inconnu';

			-- ****************************************************************************************************************************************
			-- Mise à jour  5
			-- **************
			-- Mise à jour multiple
			-- Écrire une requête qui met à jour la copie de la table Achats.
			-- Lorsque les unités en commande sont nulles, le numéro de commamde est 0 et les dates de commande et réception sont la valeur minimum par défaut pour une date : '0001-01-01 00:00:00'.

			-- Démarche
			-- Étape 1 : Sélectionner les achats dont les unités en commande sont nulles 

			SELECT  
				[ID produit],
				[Unités en commande],
				[Numéro de commande],
				[Date de commande],
				[Date de réception prévue]
			FROM [dbo].[tblAchats]
			WHERE  [Unités en commande] = 0;

			-- Etape 2 : Effectuer la mise à jour

			UPDATE [dbo].[tblAchats]
			SET
				[Numéro de commande] = 0,
				[Date de commande] = '0001-01-01 00:00:00',
				[Date de réception prévue] = '0001-01-01 00:00:00'
			WHERE [Unités en commande] = 0;

			-- Étape 3 : Vériifier l'exactitude de la mise à jour

			SELECT  
				[ID produit],
				[Unités en commande],
				[Numéro de commande],
				[Date de commande],
				[Date de réception prévue]
			FROM [dbo].[tblAchats]
			WHERE  [Unités en commande] = 0;

			-- ****************************************************************************************************************************************
			-- Création de table
			-- *****************
			-- Écrire une requête qui crée une table tblProprietaires qui contient les propriétaires de la table tblClients
			-- La table contiendra les colonnes suivantes :
			-- IdClient
			-- NomClient
			-- PrenomContact
			-- NomContact
			-- PosteOccupe
			-- Titre
			-- Sexe (doit contenir H, F)
			-- VentesAnneeDerniere
			-- Courriel
			-- Telephone
			-- Pays
			-- IndicatifPays (les caracteres qui précèdent le premier '-' du téléphone
			-- Continent (classer les pays par Continent Exemple : Japon, Indonésie -> Asie, France, Angleterre -> Europe etc)

			DROP TABLE IF EXISTS tblProprietaires;
			SELECT
				[ID client] IDClient
				,[Nom du client] NomClient
				,[Prénom du contact] PrenomContact
				,[Nom du contact] NomContact
				,[Poste occupé] PosteOccupe
				,Titre
				,Sexe
				,[Ventes de l'année dernière] VentesAnneeDerniere
				,[Adresse électronique] Courriel
				,[Téléphone] Telephone
				,Pays
				,IndicatifPays
				,Continent
			INTO tblProprietaires
			FROM
				(
					SELECT
						[ID client]
						,[Nom du client]
						,[Prénom du contact]
						,[Nom du contact]
						,[Poste occupé]
						,[Titre]
						,CASE
							WHEN [Titre] IN ('mlle','mme') THEN 'F' ELSE 'H'
						 END Sexe
						,[Ventes de l'année dernière]
						,[Adresse électronique]
						,[Téléphone]
						,[Pays]
						,'000' IndicatifPays
						,'Amérique' Continent
					FROM [dbo].[tblClients]
					WHERE [Poste occupé] = 'Propriétaire'			
				) temp;

			-- Vérifier la table des propriétaires nouvellement créée.
			SELECT * FROM tblProprietaires ORDER BY 8;

			-- ****************************
			-- **** Création d'une Vue ****
			-- ****************************
			-- Une vue est un objet de base de données qui est une requête persistante, une table virtuelle.
			-- Elle est comparable à une table et s'utilise comme tel.

			-- Syntaxe de la création d'une vue
			-- CREATE VIEW 
			-- AS
			-- SELECT  FROM 

			-- La requête peut être simple ou complexe.

			-- ****************************************************************************************************************************************
			-- Vue 1
			-- *****
			-- Créer une vue qui affiche la liste des salaires des employés
			-- Elle contient les informations suivantes concernant les employés:
			-- FullName, Position, Salary
			-- Note : FullName est la concaténation du Nom et du Prénom

			-- Nom de la vue : vEmployeeSalaire

			-- Vérification de l'existence de la vue
			DROP VIEW IF EXISTS vEmployeeSalaire;
			GO

			-- Création de la vue
			CREATE VIEW vEmployeeSalaire AS
			SELECT
				CONCAT([Nom],', ',[Prénom]) FullName,
				[Poste occupé] Position,
				[Salaire] Salary
			FROM [dbo].[tblEmployes];
			GO

			-- Vérifier la création de la vue
			-- Votre code ici
			SELECT * FROM vEmployeeSalaire;

			-- ****************************************************************************************************************************************
			-- Vue 2
			-- *****
			-- Créer une vue qui contient l'adresse complète des employés.
			-- Le nom complet de l'employé
			-- Le poste occupé
			-- L'age de l'employé
			-- L'ancienneté de l'employé
			-- Le salaire
			-- Le téléphone personnel
			-- L'adresse
			-- La ville
			-- La région
			-- Le code postal
			-- Le pays

			-- Nom de la vue : vAdresseCompleteEmployes

			-- Vérification de l'existence de la vue
			DROP VIEW IF EXISTS vAdresseCompleteEmployes;
			GO

			-- Création de la vue
			CREATE VIEW vAdresseCompleteEmployes AS
			SELECT
				A.[ID employé]
				,CONCAT([Nom], ' ',[Prénom]) NomComplet
				,[Poste occupé]
				,DATEDIFF(YEAR, [Date de naissance], GETDATE()) Age
				,DATEDIFF(YEAR, [Date d'embauche], GETDATE()) Anciennete
				,[Salaire]
				,[Téléphone personnel]
				,[Adresse 1]
				,[Ville]
				,[Région]
				,[Code postal]
				,[Pays]
			FROM
				[dbo].[tblEmployes] A,
				[dbo].[tblAdresseEmployes] B
			WHERE
				A.[ID employé] = B.[ID employé];

			GO

			-- Vérification de la vue vAdresseCompleteEmployes
			SELECT * FROM vAdresseCompleteEmployes;

			-- ****************************************************************************************************************************************
			-- Vue 3
			-- *****
			-- Créer une vue qui affiche le montant du crédit accordé aux clients.
			-- La vue contient les colonnes suivantes :
			-- Nom du client
			-- Nom et prénom du contact
			-- Courriel
			-- Téléphone
			-- Ventes
			-- MontantCredit

			-- Nom de la vue : vCreditClients

			DROP VIEW IF EXISTS vCreditClients;
			GO

			CREATE VIEW vCreditClients 
			AS
			SELECT
				A.[Nom du client]
				,A.[Nom du contact]
				,A.[Prénom du contact]
				,A.[Adresse électronique]
				,A.Téléphone
				,A.[Ventes de l'année dernière]
				,B.Montant
			FROM
				[dbo].[tblClients] A,
				[dbo].[tblCredits] B
			WHERE
				A.[ID client] = B.[ID crédit client];

			GO

			-- Vérification de la vue vCreditClients
			SELECT * FROM vCreditClients;

			-- Créer une table tblCreditClients qui contient le total du crédit accordé à chaque client à partir de la vue précédente.
			DROP TABLE IF EXISTS tblCreditClients;

			SELECT *
			INTO tblCreditClients
			FROM
				(
					SELECT
						[Nom du client]
						,SUM(Montant) TotalCredit
					FROM
						vCreditClients
					GROUP BY 
						[Nom du client]
				) temp;

			-- Affichage du contenu de la table tblCreditClients
			SELECT * FROM tblCreditClients;


			-- Création d'une table recap qui contient :
			-- Le nom des copies des tables
			-- Le nombre de lignes qu'elles contiennent

			DROP TABLE IF EXISTS tblResume
			GO

			CREATE TABLE tblResume (
				IDTable tinyint primary key,
				NomTable nvarchar(20),
				NombreLigne smallint
			);
			GO


			-- Insertion des données
			INSERT INTO tblResume
			VALUES 
				(1,'tblClient',NULL);

			GO

			-- Vérification de l'insertion
			SELECT * FROM tblResume

			UPDATE tblResume
			SET NombreLigne =  (SELECT COUNT (*) FROM tblClients);
			GO

			-- Vérification de la mise à jour
			SELECT * FROM tblResume

			-- Vider le contenu de la copie de la table tblAchats
			DELETE FROM tblAchats;
			GO

			-- Vérifier le vidage
			SELECT * FROM tblAchats

			-- Supprimer la table tblAchats
			DROP TABLE IF EXISTS tblAchat
		

W3schools

Python.org

Copyright 2026 © - Tous droits réservés