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.
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