Vous êtes sur la page 1sur 81

Cours+TP

Cours TP SQL Server

Meryem AMEUR

ameurmeryem@gmail.com

Année Universitaire 2020/2021

Cours SQL Server version 0.


Avant Propos

Ce cours est représenté sous forme d'un ensemble des TPs sous SQL Server Express.
L'objectif de ce cours est : découvrir l'outil SQL Server et sa manipulation de la Base de Don-
nées(BD) et ses objets à savoir : Les tables, les procédures, les vues, les fonctions, les déclencheurs,
les curseurs, les indexes....
Ce cours est divisé en 3 axes principales, Dans la partie BDs et sa conception, nous présentons
la conception de la BD en utilisant la méthode de Merise à savoir : Le Modèle Conceptuel de
Données et le Modèle Logique de Données. La partie SQL expose le syntaxe des requêtes SQL
de chaque langage SQL à savoir : Langage de Dénition de Données(LDD), Langage de Mani-
pulation de Données(LMD), Langage de Contrôle de Données (LCD) et Langage de Contrôle
Transaction(LCT). Aussi trois TPs sur les requêtes SQL. La dernière partie présente le langage
de programmation de la BD Transact-SQL avec trois TPs sur les éléments de base ,les fonction
et procédures, les curseurs et les déclencheurs.
Nous avons trois chapitres :

1. Chapitre I : BD et conception.

2. Chapitre II : SQL sous SQL Server.

3. Chapitre III :Transact-SQL.

2
Table des matières

1 Rappel Sur La BD et sa conception 7


1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Exemple d'application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.1 Modèle Conceptuel de données(Entité/Association) : . . . . . . . . . . . . 8
1.2.2 Modèle Logique de Données . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2 Le Langage SQL sous SQL Server 15


2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.1 Le langage LDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.2 Le langage LMD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1.3 Le langage LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1.4 Le langage LCT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2 SQL sous SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.1 La requête Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.2 La requête Alter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.3 La requête Drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.4 La requête Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.5 la requête Update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2.6 la requête Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.7 La requête Select(requête simple) . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.8 La requête Select(requête multiple) . . . . . . . . . . . . . . . . . . . . . . 27
2.2.9 La requête Select(sous requête) . . . . . . . . . . . . . . . . . . . . . . . . 30
2.2.10 Les Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2.11 La gestion des utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3
2.2.12 Sauvegarde et restauration . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.3 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

3 Programmation BD : Transct-SQL(SQL Server) 40


3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.2 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Annexes 41

Liens Utiles 81

4
Table des gures

1.1 Interfaces+Connexion+BD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Conception d'une BD Relationnelle . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3 Une Entité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4 Une Entité + Attribut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5 Association . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.6 Les Entités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.7 Les Attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.8 Associations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.9 MCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.10 MLD :Règle 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.11 MLD :Règle 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.12 MCD2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.1 Les tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

5
Liste des abréviations
BD Base de Données
MCD Modèle Conceptuel de Données
MLD Modèle Logique de Données
SQL Structered Query Language
LDD Langage de Dénition de Données
LMD Langage de Manipulation de Données
LCD Langage de Contrôle de Données
LCT Langage de Contrôle de Transactions
T-SQL Transact-SQL

6
Chapitre 1

Rappel Sur La BD et sa conception

1.1 Introduction

Une Base de Données(BD) en anglais Data Base(DB) est un ensemble de données organisées
et structurées stockées sur un espace de stockage en vue de son utilisation par des programmes
correspond à des applications.
Exemple :

Figure 1.1  Interfaces+Connexion+BD


ˆ Une application est représentée par un ensemble des interfaces graphiques connectés à une base
de données ou plusieurs.en vue de gérer et manipuler les données de la BD via les interfaces
ˆ Supposant que, nous avons un problème et nous voulons gérer les inscriptions des étudiants
dans des lières. Donc nous avons besoin d'une application qui gère et stocke les inscriptions des
étudiants. Pour traiter ce problème,nous devons suivre les étapes suivants :

7
Figure 1.2  Conception d'une BD Relationnelle

Nous avons un problème de gestion, nous devons établir un cahier de charge ou nous exprimons
les besoin ainsi que les règles de gestion. Ensuite, à partir de cahier de charge, nous extrayons la
conception de la BD en utilisant soit le diagramme de classe(UML) ou les modèles de conceptuel
et logique de données(Merise).

1.2 Exemple d'application

L'école X veut réaliser une application de gestion des inscriptions des étudiants aux lières.
L'étudiant est identié par un cin, nom, prénom, adresse, téléphone.
La lière est caractérisée par un id, un nom et une description.
Un étudiant a le droit de s'inscrire dans une et une seule lière, dans une lière plusieurs étudiants
sont inscrits. Le nombre des étudiants dans une lière ne doit pas dépasser 200 étudiants/lière.
Les inscriptions qui dépassent 24 heures sans validations, seront automatiquement annulées.
A partir de ce texte, nous pouvons extraire la conception de la BD inscription. Pour réaliser cette
conception, nous avons choisi la méthode de Merise.

1.2.1 Modèle Conceptuel de données(Entité/Association) :

Le Modèle Conceptuel de Données(MCD) est un diagramme qui représente le plan de la BD.


Il est représenté par des entités qui sont reliées entre eux par des associations et cardinalités. Pour
construire le MCD, il faut suivre les étapes suivants :

1. Déterminer les entités.

2. Déterminer les attributs.

3. Établir les associations.

4. Dénir les cardinalités.

8
5. Vérier la cohérence de le MCD.

Une entité : est représentation d'un objet réel ou abstrait, elle est représentée de la manière
suivante :

Figure 1.3  Une Entité

L'entité est caractérisée par un certain nombre de caractéristiques qu'on appelle par les attributs.
Chaque occurrence d'une entité est diérenciée d'une autre par un attribut identiant qui doit
être unique.

Figure 1.4  Une Entité + Attribut


Les entités sont reliées entre eux par des associations.
L'association : est une relation qui relie une ou plusieurs entités. Elle est représentée de la
manière suivante :

Figure 1.5  Association


9
Nous devons choisir un verbe d'action pour identier l'association entre les entités.
La cardinalités : est le nombre maximum et minimum des occurrences entités qui sont autorisées
à participer à la relation. La cardinalité est dénie pour les deux sens de la relation. La valeur
minimale est variée entre 0 et 1 et la valeur maximale est variée entre 1 et n.
Revenons à notre exemple :
1-) Déterminons les entités, nous avons deux entités Étudiant et Filière, elles sont représentées
de la manière suivante :

Figure 1.6  Les Entités


2-) Les attributs+ Identiant :

Figure 1.7  Les Attributs


3-) Déterminons les associations, il y' a une association entre l'entité étudiant et lière, nous

10
avons choisi comme verbe d'action s'inscrire :

Figure 1.8  Associations


4-) Les cardinalités :

Figure 1.9  MCD


Finalement, nous avons obtenu le MCD.

1.2.2 Modèle Logique de Données

Un Modèle Logique de Données(MLD) sert à déterminer le schéma relationnel ou le modèle


relationnel de données. Nous devons le transformer un MLD, pour cela, il faut appliquer les règles

11
suivantes :
Règle 1 :
Entités ⇒ tables.
Attribut ⇒ champs.
Identiant ⇒ clé primaire.
Règle 2 :

Figure 1.10  MLD :Règle 2

Lorsque vous avez une association avec des cardinalité comme dans la gure 2.2.1, vous obtenez
deux tables, l'identiant de l'entité 2 ou nous avons la cardinalité (1,n) ou (0,n) sera une clé étran-
gère dans l'entité 1 lorsqu'on va transformer. Donc, vous obtenez deux tables, nous soulignons les
clés primaires, et les clés étrangères, nous précédons par #.
Table 1(Id1, Attribut1,.......#id2)
Table 2(Id2, Attribut2,.......)
Règle 3 :
Si vous avez cette relation donc vous devez avoir une nouvelle table qui contient les identiants
de l'entité 1 et 2 comme clés primaires et au même temps des clés étrangères. Table 1(Id1, Attri-
but1,.......)
Table 2(Id2, Attribut2,.......)
Table 3(#Id1,#Id4,.......)
Revenons à notre exemple, nous avons la règle 1 et 2. Donc le modèle relationnel de la BD ins-
cription sera :
Étudiant(CIN, nom, prénom, adresse, téléphone, #Id)
Filière(Id, nom, description)

12
Figure 1.11  MLD :Règle 3
Prenons un exemple qui traite la règle 3.
Soit le MCD suivant :

Figure 1.12  MCD2


Cette MCD comporte une association porteuse, une association porteuse est association qui com-
porte un ou plusieurs attributs. ici, nous avons l'attribut quantité qui est porté par l'association
commander.
Le MLD sera :
Client(Idclt, nom, prénom, adresse)

13
Produit(Idprd, nom, prix)
Commande(#Idclt,#Idprd, quantité)
Après avoir réaliser la conception de la BD et obtenir le modèle relationnel de la BD. Nous devons
choisir un Système de Gestion de la BD(SGBD) :Un Système de Gestion d'une BD(SGBD) : un
ensemble de programme qui permettent l'accès à la BD.
Il existe plusieurs outils de gestion de la BD. Parmi ces systèmes :SQL Server.
Microsoft SQL Server est un Système de gestion de base de données relationnel et transactionnel
développé et commercialisé par Microsoft.
Microsoft SQL Server utilise le langage de programmation Transact-SQL pour ses requêtes, c'est
une implémentation de SQL qui prend en charge les procédures stockées, les fonctions, les déclen-
cheurs et les curseurs.

1.3 Conclusion

Dans ce chapitre nous avons présenté les modèles conceptuel et logique de données. Le but est
d'avoir une idée sur la conception de la BD avoir de commencer la création et la gestion de BD.
Le chapitre suivant sera sur les requêtes SQL sous SQL Server.

14
Chapitre 2

Le Langage SQL sous SQL Server

2.1 Introduction

Dans ce chapitre nous présentons les diérentes requêtes SQL et leurs syntaxes sous SQL
Server. Le langage SQL(Structured Query langage : est un langage de programmation interactif
standard qui permet de d'extraire et de mise à jour des informations de la BD (contrôle d'accès
à la BD, la mise à jour(màj), la création des objets de la BD, l'intégralité, cohérence).
SQL est dénit par quatre langages de requêtes :

1. Langage de Dénition de Données(LDD).

2. Langage de Manipulation de Données(LMD).

3. Langage de Contrôle de Données(LCD).

4. Langage de Contrôle de Transaction(LCT).

2.1.1 Le langage LDD

Langage de Dénition de Données(LDD) : regroupe les diérentes requêtes SQL qui per-
mettent de créer,modier, supprimer les diérents objets de la BD : Les tables,les vues....parmi
les requêtes de ce langage :

 Create : pour créer un objet de la BD.


 Alter : pour modier les objets de la BD.
 Drop : pour supprimer dénitivement les objets de la BD.

15
2.1.2 Le langage LMD

Langage de Manipulation de Données(LMD) : regroupe les diérentes requêtes SQL qui per-
mettent la mise à jour(ajout, modication, suppression) ou la recherche dans la BD. Parmi les
requêtes de ce langage :
 Les requêtes de mise à jour :
 INSERT : pour l'ajout d'un enregistrement :
 UPDATE : pour Modier un enregistrement.
 DELETE : pour Supprimer un enregistrement.
 les requêtes de sélection(SELECT) :
 Les requêtes simples.
 les jointures.
 les requêtes imbriquées(Sous-requêtes).

2.1.3 Le langage LCD

Langage de Dénition de Données(LDD) : regroupe les diérentes requêtes SQL de la gestion


des droits d'accès à la BD et ses objets.
 GRANT :aecter des privilèges au utilisateur.
 REVOKE : retirer des privilèges d'un utilisateur.
 DENY : Ne jamais aecter des privilèges.

2.1.4 Le langage LCT

Langage de Contrôle de Transaction(LCT) : regroupe les diérentes requêtes SQL de la gestion


des transactions. Parmi les requêtes de ce langage :
 COMMIT : sauvgarder les transactions.
 ROLLBACK : annuler les transactions.
 SAVEPOINT.

2.2 SQL sous SQL Server

Dans ce paragraphe, nous présentons les diérentes étapes pour créer la Base de Données et
ses objets, ainsi que sa sécurité et sauvegarde restauration sous le syntaxe de SQL Server.

16
2.2.1 La requête Create

Pour créer une BD, il faut taper la commande suivant :


Create database [Nom de la BD]
Exemple(Création de la BD inscription) :

Résultat de requête :

Aprés la création de la BD inscription, nous devons creer les objets de cette BD à savoir les tables,
et vues, les déclencheurs........
Une table est un élément de base d'une BD.
 Constituée des lignes de données(enregistrement).
 Chaque ligne comporte une ou plusieurs colonnes.
 Une colonne unique d'une ligne unique est appelée champ.

17
Figure 2.1  Les tables
Pour créer une table sous SQL server, il faut taper le syntaxe suivant :
Create table [Nom de table](champ 1 type contratinte,
champ 2 type
champ3 type
...........
contriante 1
containte 2 )
Parmi les types de champ que vous pouvez trouver :

Et les contraintes :
 Primary Key.

18
 Foreign Key.
 Check
 Default
 Unique
 Not null
 INDEX
 On delete cascade
 On update cascade
Exemple(Création de la table lière) :

Résultat de requête :

Exemple(Création de la table étudiant) :

Résultat de requête :

19
2.2.2 La requête Alter

La requête Alter a deux rôles principales :

1. Modier la structure des objets de la BD.

2. Dénir les contraintes.


Alter type d'objet (nom de l'objet) [Add|alter column|drop column| add
constraint|alter constraint|drop constraint (nom du contrainte)].....
Par exemple pour ajouter le champ note à la table étudiant il faut taper :
Exemple(Ajouter le champ note) :

Résultat de requête :

20
Pour dénir une contrainte sur le champ nom ne doit pas recevoir une valeur manquante. Nous
tapons :

21
Résultat de requête :

Ajouter la contrainte note>10

Résultat de requête :

2.2.3 La requête Drop

La requête Drop sert à supprimer les objets de la BD.


Drop type d'objet [nom de l'objet]

22
Pour supprimer les enregistrements de la table lière on tape :

Résultat :

2.2.4 La requête Insert

Après avoir créer les tables et dénir les contraintes, nous devons remplir les tables, pour cela,
nous utilisons la requête insert into :
Insert into [nom de table] (champ1, champ2,champ3,...) va-
lues(valeur1,valeur2, valeur3,......)
Exemple :(insertion dans la table lière)

Résultat :

23
Exemple :(insertion dans la table étudiant)

Résultat :

2.2.5 la requête Update

Pour modier la valeur ou les valeurs d'un enregistrement, il faut taper la requête update :
Update [nom de table] set champ1=valeur1, champ2=valeur2,
champ3=valeur3 where condition

Exemple :(ajouter 2 points pour chaque étudiant)

Résultat :

24
2.2.6 la requête Delete

Pour supprimer un ou plusieurs enregistrement, il faut taper la requête delete :


Delete from nom de table where condition
Exemple :(Supprimer tous les étudiants)

Résultat :

2.2.7 La requête Select(requête simple)

Une requête simple est une requête de recherche qui utilise une seule table dans la recherche
et sélection. Elle s'écrit de la manière suivante :
Select [*|champs|Distinct champs|Top champs|case()|champ as alias....]
From Nom de la table
Where [condition |=,>,<,>=,<=|in(liste)|like.....]
Group by [regroupement]
Having [Condition sur les groupes]
Order by [trier un champ par défaut est croissant ASC|DESC pour le trie
décroissant]

Pour l'ordre d'exécution du requête de sélection est comme suit :

25
Exemple d'application :
- Acher les noms des étudiants par ordre alphabétique :

Résultats :

- Acher les étudiants qui habitent a casa alphabétique :

Résultats :

- Acher la moyenne des notes des étudiants par id liere(idf) :

26
- Résultats :

-Acher les lières idf ou le nombre des étudiants 300 étudiants :

2.2.8 La requête Select(requête multiple)

Dans les requêtes multiples, nous utilisons deux ou plusieurs tables. Nous distinguons :

1. les jointures

2. le produit cartésien(CROSS JOIN)

Dans les jointures, nous distinguons plusieurs types de jointures :

1. les jointures internes(INNER JOIN)

2. l'auto-jointure(SELF JOIN)

3. les jointures externes(OUTER JOIN) :


 les jointures pleines(FULL JOIN)
 Les jointures gauches(LEFT JOIN)
 Les jointures droites(RIGHT JOIN)

Les jointure internes(inner join) permet de récupérer les informations qui sont communes entre
les tables qui participent aux jointures. La jointure est la plus utilisée.

Les Externes(Outer join)permet de récupérer les informations qui sont communes entre les tables
qui participent aux jointures, ainsi que les informations qui sont pas communes, nous distinguons
trois types de jointures : gauches,droites,pleine.
La jointure Gauche(LEFT JOIN) : permet de récupérer les informations de qui sont communes

27
entre les tables qui participent aux jointures(INNER JOIN), ainsi que les informations que se
trouvent dans les tables gauches même qui ne sont pas communes.

La jointure Droite(RIGHT JOIN) : permet de récupérer les informations de qui sont communes
entre les tables qui participent aux jointures(INNER JOIN) ainsi que les informations que se
trouvent dans les tables droites même qui ne sont pas communes(l'inverse de la jointure gauche).
.

La jointure (FULL JOIN) : permet de récupérer les informations de qui sont communes entre
les tables qui participent aux jointures(INNER JOIN), ainsi que les informations que se trouvent
dans les tables droites et gauches même qui ne sont pas communes(LEFT+ RIGHT JOIN).

L'auto-jointure (SELF JOIN) : Eectuer la jointure sur la table elle même.


Exemple d'application :
-Acher les étudiants qui sont inscrits :

28
Ici, nous utilisons la jointure interne, car, nous cherchons ce qui est commun les lières et les
étudiants.

Résultat :

-Acher les etudiant qui sont inscrits dans la liere info :


Aussi nous utilisons la jointure interne.

Résultat :

-Acher les étudiants qui sont inscrits et non inscrits dans des lières :
Ici nous utilisons, soit la jointure gauche ou droite selon ou nous écrivons la table lière et nous
obtenons le même résultat :

Résultat :

29
Résultat :

-Acher les noms des etudiants ayant obtenu la même note, ici nous cherchons dans la même
table, nous utilisons l'auto-jointure.

Résultat :

2.2.9 La requête Select(sous requête)

Les sous-requêtes(Les requêtes imbriquées) : sont des requêtes qui se composent de deux ou
plusieurs requêtes d'une manière imbriquée, la requête la plus interne qui s'exécute la première,

30
Nous pouvons utiliser les sous requêtes à la place des jointures.

Exemple d'application :
-Acher les étudiants ayant obtenu la note minimale :

Résultat :

-Acher les etudiant qui sont inscrits dans la liere info en utilisant requete imbriquée au lieu du
jointure interne qui est le plus utilisée :

Résultat :

2.2.10 Les Transactions

Les transactions sont l'ensemble des opérations de mise à jour que, nous eectuons sur les
données de la BD, la transaction peut passer ou casser, pour valider la transaction nous utilisons
COMMIT, pour annuler nous utilisons ROLLBACK.

31
BEGIN TRANSACTION
INSERT INTO......
UPDATE.........
DELETE............
COMMIT | ROLLBACK TRANSACTION

Exemple d'application :
-Annuler la transaction d'ajout d'un étudiant :

Résultat :

-Valider la transaction d'ajout d'un étudiant :

Résultat :

32
2.2.11 La gestion des utilisateurs

La gestion des utilisateur sous SQL server se déroule de la maniéré suivante :


1. Créer un login avec mot de passe.
2. Créer un utilisateur pour ce login.
3. Aecter des privilèges et des rôles à cet utilisateur.
4. Établir une connexion avec ce login pour cet utilisateur
Pour créer un login, il faut taper la commande suivante :
Create login (nom de login) with password='motdepasse'
Exemple :(Création de login Etudiant1)

Résultat :

Pour créer un utilisateur, il faut tapez la commande suivante en spéciant le login pour lequel
nous créons cet utilisateur.
Create user (nom de l'utilisateur) for login (nom de login)
Exemple :(Création de l'utilisateur Etudiant pour le login Etudiant1 dans la BD inscription)

Résultat :

33
ˆ Aectation les droits :
Pour aecter des droits(privilèges) il faut utiliser la requête grant :
grant les privilèges(select, update, delete,....) on nom de l'objet(table,
schema, champs) to 5nom de l'utilisateur).

Exemple :(Aecter tous les droits sur la table Etudiant à l'utilisateur etudiant)

ˆ Retirer les droits :


Pour retirer des droits(privilèges) il faut utiliser soit la requête revoke ou deny :
Revoke les privilèges(select, update, delete,....) on nom de l'objet(table,
schema, champs) to 5nom de l'utilisateur).

Deny les privilèges(select, update, delete,....) on nom de l'objet(table,


schema, champs) to 5nom de l'utilisateur).
Exemple :(Retirer le droit de sélection des champs de la table Etudiant de l'utilisateur etudiant)

34
Exemple :(Retirer le droit de modier les enregistrements de la table Etudiant de l'utilisateur
etudiant)

Aussi, nous pouvons aecter des droits aux utilisateurs en utilisant les rôles.
Un rôle est un ensemble de privilèges que nous aectons au utilisateur.
Pour créer un rôle, il faut utiliser la requête create :
Create role (Nom de rôle).

Exemple :(Création de rôle inscription dans la BD inscription )

Résultat :

Après la création de rôle, nous aectons à lui des droits en utilisant la requête grant.

Résultat :

35
Maintenant nous pouvons aecter ce rôle à un utilisateur, en utilisant la procédure stockée
sp_addrolemember.
sp_addrolemember (Nom de rôle), (Nom de l'utilisateur).
Exemple :(Aecter le rôle inscription à l'utilisateur etudiant)

36
Résultat :

Pour tester, il faut se connecter en mode SQL Server, saisir le login et le mot de passe.

37
Résultat :

2.2.12 Sauvegarde et restauration

Pour sauvegarder la BD, il faut taper la commande suivante :


backup database [Nom de la BD] to disk =[chemin/nom de la BD.bak].
Exemple :(Sauvegarder la BD inscription)

Résultat :

Votre BD sera sauvegarder dans le dossier Backup par défaut qui a le chemin suivant : C :

38
/P rogramF iles/M icrosof tSQLServer/M SSQL105 0.M SSQLSERV ER/M SSQL/Backup
Pour restaurer la BD, il sut de taper la commande suivante :
restore database [Nom de la BD] from disk =[chemin/nom de la BD.bak].
Exemple :(Restaurer la BD inscription après sauvegarde )

N.B : Il faut sauvegarder la BD au préalable, pour la restaurer lors d'une panne ou perte de
données.

2.3 Conclusion

Dans ce chapitre nous avons présenté les diérentes requêtes SQL sous SQL Server.

39
Chapitre 3

Programmation BD : Transct-SQL(SQL
Server)

3.1 Introduction

Dans ce chapitre, nous allons présenter les éléments que nous pouvons programmer sous SQL
Server pour faciliter l'accés aux données de la BD.

1. Les procédures.

2. Les fonctions.

3. Les curseurs.

4. Les déclencheurs.

5. Les exceptions.

3.2 Conclusion

Dans ce chapitre nous avons présenté les diérents éléments programmable sous SQL Server
à saovoir : les procédures, les fonctions, les curseurs et les déclencheurs.

40
Annexes

Ici Nous présentons les TPs+Corrections SQL sous Sql Server de ce cours

41
TP1 : Requêtes SQL(LDD+LMD)sous SQL
Server

Soit la base de données GestionBanque qui permet la gestion des agences et le suivi des clients
d'une banque. Le schéma de GestionBanque est le suivant :
Agence(NAg, Nom, Ville)
Client(NClt, Nom, Ville)
Compte(NCpt, #NAg, #NClt, Solde)
Opereration(NOpt,#NAg, #NClt ,Type,Montant)
Agence(Ag) Client(Clt)
NAg Nom Ville NClt Nom Ville
1 Atlas Beni Mellal 1 Karimi Beni Mellal
2 Takadoum Beni Mellal 2 Hamza Salé
3 Nassime Casablanca 3 Younes Beni Mellal
4 Hay Riad Rabat 4 Sabiri Rabat
5 Hay Salame Salé 5 Halimi Casablanca
6 Mohitt Rabat 6 Saadaoui Salé
7 Farah Salé 7 Derkaoui Beni Mellal
8 Ismaili Casablanca
Operation(Opt)
NOpt NAg NClt Montant Type
Compte(Cm) 1 1 1 500 Retrait
NCpt NAg NClt Solde 2 1 2 1000 Dépôt
1 1 1 4500 3 1 1 800 Dépôt
2 2 1 6000 4 3 4 900 Dépôt
3 1 2 10055 5 2 5 2000 Retrait
4 3 3 11000 6 3 7 1500 Dépôt
5 4 5 1100 7 2 8 1700 Retrait
6 5 4 3200 8 4 7 1200 Dépôt
7 3 6 50500 9 2 5 600 Dépôt
8 6 5 3000 10 4 3 700 Retrait
9 2 8 22000 11 6 6 10000 Retrait
10 4 4 11022 12 6 8 3000 Dépôt
11 1 6 32100 13 2 1 1000 Dépôt
14 5 2 1000 Retrait
15 6 5 20000 Dépôt
EMSI Casablanca A.U 2020/2021.
En utilisant le langage SQL, Programmer les requêtes suivantes :
1. Créer les tables de la base de données GestionBanque.
2. Insérer toutes les lignes de chaque table.
3. Dupliquer l'opération 15 sans montant.
4. Modier le montant de l'opération 16 en introduisant la somme 1000.
5. Ajouter 10% aux comptes qui ont un solde inférieur strictement à 12000Dhs.
6. Acher le nombre des clients habitant à Casablanca.
7. Acher le numéro et le solde moyen des comptes-clients de chaque agence.
8. Acher les noms des clients qui ont un compte à Rabat (Il ne faut pas acher un même
client plusieurs fois, acher 3 premiers).
9. Acher les noms des clients qui n'ont jamais réalisé l'opération de type Dépôt.
10. Acher la somme des montants déposées par chaque client.
11. Supprimer, dans la table Compte, Les comptes de Monsieur Karimi. (En utilisant deux
méthodes)
12. Supprimer dans la relation Agence, toutes les agences sans client.

2
Correction TP 1 SQL SERVER
--Q1
--bonjour, le tp 1 correction, ce tp contient deux languages de SQL
--LDD+LMD
-- pour une BD, il faut taper create database [nom de la BD]
create database [gestion banque]
go
--go est un lot qui facilite l'execution des requetes sql dans un ordre
sequentiel
use [gestion banque]
/*par defaut, lors de la connexion sur sql server la BD est master pour
cela
il faut tapez use la BD avant de creer les tables dans la BD*/
go
--la creation la table
--nous commencons par les tables qui contiennent pas des clés etrangéres
create table agence(Nag int identity primary key, Nom varchar(20), Ville
varchar(20))
go
create table Client(NClt int identity primary key, Nom varchar(20), Ville
varchar(20));
gp
create table compte(Ncpt int identity primary key, Nag int, Nclt int,
solde money, foreign key(Nag) references agence(Nag)
On Delete cascade
on Update cascade
foreign key(NClt) references client(Nclt)
on delete cascade
on update cascade)
go
create table Operation(Nopt int identity primary key, Nag int, NClt int,
Montant money, Type varchar(20),
foreign key(Nag) references Agence(Nag)
On Delete cascade
on Update cascade
foreign key(NClt) references Client(NClt)
On Delete cascade
on Update cascade);
go
-- le type int identity pour l'autoincrement cad insertion+incrementation
automatique au
--champ autoincrement
-- chaque clé etrangere doit avoir les contraintes on delete cascade on
update cascade
--Q2
--lors de l'insertion des lignes, il faut commencer par les tables
--qui contiennent pas des clé etrangere+ les champs ayant le type identity
sont remplies
-- automatiquement
insert into Agence
values('Atlas','BeniMellal'),('Takadoum','BeniMellal'),('Nassime','Casblanc
a');
select * from Agence
go
insert into Agence values('hay riad','rabat'),('hay
salam','salé'),('Mohitt','rabat'),('farah','salé');
Select * from Agence
go
insert into client
values('karimi','benimellal'),('hamza','salé'),('youness','benimellal'),
('sabiri','rabat'),('halimi','casa'),('saadaoui','salé'),('derkaoui','benim
ellal'),('ismaili','casablanca');
select * from client;
go
insert into compte
values(1,1,4500),(2,1,6000),(1,2,11050),(3,3,11000),(4,5,1100),(5,4,3200),(
3,6,50500),(6,5,3000),(2,8,22000),(4,4,11022),(1,6,32100);
select * from compte
go
insert into operation
values(1,1,5000,'Retrait'),(1,2,1000,'depot'),(1,1,800,'depot'),(3,4,900,'d
epot'),(2,5,2000,'retrait'),(3,7,1500,'depot'),(2,8,1700,'retrait'),(4,7,12
00,'depot'),(5,2,600,'depot'),(4,3,700,'retrait'),(6,6,10000,'retrait'),(6,
8,3000,'depot'),(2,1,1000,'depot'),
(5,2,2500,'Retrait'),(6,5,20000,'depot');
select * from operation;
go
--pour inserer toutes les lignes à la fois, il faut taper
--insert into nom de la table values(ligne1),(ligne2),(ligne3),......
--notez bien les types varchar et date doivent etre entre quote
--Q3
--dupliquer c copier la ligne de l'operation 15 a savoir Nag,NClt, type,
--le montant doit avoir la valeur null, il faut specifier les champs a
remplir apres insert
insert into operation(Nag, NClt, Type)
select Nag, NClt, TYPE from operation
where Nopt=15
--affichage verifier le resultat
select * from operation;

--Q4
--modifier le montant null par 1000
update operation set montant=1000 where Nopt=16
select * from operation;
--Q5

--Montantttc=montant+montant*TVA/100
--solde=solde+slode*10/100
--=solde+solde*0.1
--solde*(1+0.1)
--solde*1.1
update compte set solde=solde*1.1 where solde<12000;
select * from compte

--Q6
-- utiliser l'alias as pour nommer le champ count
select * from client
select COUNT(*) as [nombre client]
from client where ville like'casa%'

--Q7
--afficher l'avg(solde) des comptes de chaque agence
select Nag, AVG(Solde) as [Solde moyen] from compte group by Nag;
-- transactions
--exemple de transaction avec commit qui confirme la transaction
--pour annuler il utiliser rollback au lieu de commit toujours
-- vous devez commencer par utiliser begin transaction, puis vous ecrivez
les transactions
--(insert, update, delete)
begin transaction
insert into client values('Ahmed', 'rabat')
select * from client
commit
select * from client
--creation de vue
--pour creer une vue vous devez taper create view (nom de la vue)
as(requete de selection)
create view v1 as (select * from client)
--la vue est un objet BD, c comme une table virtuelle
--vous pouvez l'utiliser par la suite dans des requetes de
selection(simple+jointure+imbriquée)
select * from v1
-- Q8
--ici nous devons utiliser la requete interne inner , sinon vous pouvez
utiliser
--la requete select c.nom from client c, compte cm where c.Nclt=cm.Nclt
and a.ville like'rabat'
-- top affiche un nombre d'enregistrement que vous voulez afficher
--ici nous voulons afficher une seule enregostrement nous utilisons top 1
select distinct top 1 c.nom from client c inner join compte cm on
c.Nclt=cm.Nclt
inner join agence a on a.Nag=cm.Nag
where a.ville like'rabat';
--Q9
--ici nous utilisons une sous-requete avec not in
select NClt,nom from client where NClt not in
(select Nclt from operation where TYPE='depot')
--Q10
--Afficher la somme montant par NClt
select NClt, SUM(montant) as [somme montant] from operation
where TYPE='Depot' group by NClt

--truncate table client


--notez que avec les tables que leurs clé primaires sont etrangeres dans
une autre
-- vous devez pas utiliser truncate
-- trancate nous utilisons avec les tables qui contiennent des clés
etrageres
select * from client
delete from client where nom='hamza'
select * from compte
select * from operation
--Q11
-- La methode 1(Sous requete/ requete imbriquée)
delete from compte
where Nclt in (select Nclt from client where nom='karimi')
--La methode 2(jointure inner)
delete compte from compte cm inner join client c
on cm.NClt=c.NClt where c.nom='karimi';
--ou bien la jointure
delete compte from compte cm, client c
where cm.NClt=c.NClt c.nom='karimi';
--Q12
--suppresion
delete from agence where Nag not in (select Nag from compte)
select * from agence
TP2 : Requêtes SQLsous SQL Server (ALTER+
SELECT)

Soit le modèle relationnel suivant pour la gestion des étudiants :


Etudiant(cin,nom, prenom , datenaiss, adr, ville, tel, pays)
Inscription(num, liere, dateinscr, #cin)
Modules(num, libellé)
Formateurs(num, nom, prenom, salaire)
Examens(#ninscr, #nmod, #nform, note)

En utilisant le langage SQL, Programmer les requêtes suivantes :


1. Créer les tables de la base de données Gestion Etudiant.
2. Donner le diagramme correspondant.
3. Dénir les contraintes suivantes en utilisant la requête Alter :
(a) Ajouter à la table formateur les champs datenaissance et grade.
(b) Modier la taille du champ adresse.
(c) Le salaire des formateurs doit être supérieur à 10000.
(d) Le numéro de formateur doit être unique.
(e) La date d'inscription ne doit pas recevoir une valeur manquante.
(f) La valeur de champs pays par défaut est Maroc.
(g) Modier le nom de la BD.
4. Modier le nom du champ lière par spécialité.
5. Modier le nom de la table formateur par enseignant.
6. Insérer toutes les lignes de chaque table.
7. Ache les étudiants (nom et le prénom) par module(num).
8. Acher les étudiants ayant un age de 25 ans ou plus.
9. Quels sont les étudiants qui ont la même date de naissanceannée de naissance en ordre
décroissant(nom).
10. Acher les enseignants par nom, prénom, salaire ayant assistés l'examen de biologie.
11. Quel est le salaire max des enseignants et pour quel grade ?
12. Acher les nom des professeurs qu'ils n'ont assistés à aucun examen.
EMSI Casablanca A.U 2020/2021.
Correction TP 2 SQL SERVER
--Q1
--creation de la BD et les tables de la BD toujours vous devez commencer
-- par les tables qui ne contiennent pas des clés etrangeres
-- le type money c monetaire
-- pour creer la BD avec espace, vous devez utiliser []
create database [gestion etudiant]
go
use [gestion etudiant]
go
create table etudiant(cin varchar(10) primary key,
nom varchar(20),
prenom varchar(20),
[date naissance] date,-- ici le champ [date naissance] contient l'espace
adresse varchar(50),
ville varchar(20),
tel bigint,
pays varchar(20));
go
create table inscription(num int identity primary key,
specialité varchar(30), [date inscription] date,
cin varchar(10),
foreign key(cin) references etudiant(cin)
on delete cascade
on update cascade)
go
create table module(num int identity primary key, libellé varchar(20))
go
create table formateur(num int identity primary key,
nom varchar(20), prenom varchar(20), salaire money)
go
create table examens(ninscr int, nmod int , nfor int, note float,
constraint cpk primary key(ninscr,nmod,nfor),
foreign key(ninscr) references inscription(num)on delete cascade
on update cascade,
foreign key(nmod) references module(num) on delete cascade
on update cascade,
foreign key(nfor) references formateur(num)
on delete cascade
on update cascade)
go
--Q2
-- creer le diagramme par clique droit sur le dossier schema de la BD
--Q3
--syntaxe
-- alter table nom de la table
--add nomchamp type
--a
--ajouter le champ [date naissance] avec le type date
alter table formateur
add [date naissance] date
--ajouter le champ le champ grade de type varchar(20) et taille 20
alter table formateur
add grade varchar(20)
--b
--alter table nom de la table
--alter column nom champs nouveau type
alter table etudiant
alter column adresse varchar(100)
--c
-- une containte check
--alter table nom de la table
--add constraint nom de contrainte check()
alter table formateur
add constraint c1 check(salaire>10000)
--d
--alter table nom de la table
--add constraint nom contrainte unique(champ)
alter table formateur
add constraint c2 unique(num)
--e
--alter table nom de la table
--alter column champ type not null;
--ou bien vous pouvez utiliser check
--alter table inscription
--add constraint c4 check(specialité is not null)
alter table inscription
alter column [date inscription] date not null
--f
--alter table nomde la table
-- add constraint nom de contrainte default 'valeur par defaut' for nom
champ
alter table etudiant
add constraint c3 default 'maroc' for pays
--g
--la premiere methode
--alter database nom de la base
--modify name ='nouveau nom'
alter database [gestion etudiant]
modify name = etudiant
-- ou bien utiliser la procedure systeme stockée qui se trouve dans
-- le dossier programmabilté qui contient un dossier qui s'appelle
-- procedure stockée(stored procedure sp)
-- la procedure sp_renamedb est utilisé pour renommer les base de données
exec sp_renamedb 'etudiant', 'etudaint1'
--Q4
-- la procedure sp_rename est utilisé pour renommer les tables et les
colonnes
sp_rename 'inscription.specialité', 'filiere', 'COLUMN';
--Q5
-- la procedure sp_rename est utilisé pour renommer la table implicitement
sans specifier
-- le type de l'objet
sp_rename 'formateur', 'enseignant'
--Q6
-- insertion nous commencons par les table qui ne contiennt pas des clés
etrangéres
insert into etudiant(cin,nom,prenom,[date naissance],adresse, ville, tel)
values('A345678','nawali', 'Amal', '01/04/1989','15,bd
anwal','casablanca',0625147896)
insert into etudiant(cin,nom,prenom,[date naissance],adresse, ville, tel)
values('AZ234567','souktani','Salim', '01/05/1998','54,hay
elhouda','Rabat',0625147893)
insert into etudiant(cin,nom,prenom,[date naissance],adresse, ville, tel)
values('B123456', 'Samih','Ahmed','01/01/1988','28,rue
qods','rabat',0668617745)
insert into etudiant(cin,nom,prenom,[date naissance],adresse, ville, tel)
values('E457890', 'elradi','Mohamed','01/05/1997','25,hay
enour','rabat',0625147892)
insert into etudiant(cin,nom,prenom,[date naissance],adresse, ville, tel)
values('ER678954', 'elouali','Adam','04/10/1998','45,hay lala
aicha','rabat',0625147896)
insert into etudiant(cin,nom,prenom,[date naissance],adresse, ville, tel)
values('FA456789','nijari','Nabil','02/06/1992','56,QODS','rabat',062514789
5)
insert into etudiant(cin,nom,prenom,[date naissance],adresse, ville, tel)
values('Q456789','yaccoubi','Zahrae','04/07/1991','45,takadoum','rabat',060
5241879)
insert into etudiant(cin,nom,prenom,[date naissance],adresse, ville, tel)
values('IC234516','nouri','Kamal','03/07/1998','14 hay
elmassira','rabat',0623568974)
insert into etudiant(cin,nom,prenom,[date naissance],adresse, ville, tel)
values('TE456732','elhadi','Asmae','01/08/1998','23,hana
2','Casablanca',0615487215)
insert into etudiant(cin,nom,prenom,[date naissance],adresse, ville, tel)
values('WA234576','allaoui', 'Soumia','05/04/1996','34,rue
farah','benimellal',0659847215)
insert into etudiant(cin,nom,prenom,[date naissance],adresse, ville, tel)
values('ZA234567','Samadi', 'Karima','07/12/1998','78,hay
elnasr','rabat',0636365489)
-- inserer les inscription
select * from etudiant
insert into inscription values
('droit prive','01/10/2015','A345678'),
('Biologie','01/09/2014','AZ234567')
insert into inscription values
('Chimie','01/09/2015','B123456'),
('Math info','01/09/2016','E457890')
insert into inscription values
('Geologie','01/09/2014','ER678954'),
('Economie', '01/10/2015','ER678954')
insert into inscription values
('droit prive','01/10/2017','ZA234567'),
('physique','01/10/2014','Q456789')
insert into inscription values
('droit prive','01/10/2014','ZA234567'),
('chimie','01/10/2014','WA234576')
insert into inscription values
('Math info','05/11/2013','TE456732')
select * from inscription
insert into module values
('math'),('biologie'),('geologie'),('droit'),
('physique'),('chimie generale'),('statistique'),('info'),
('biochimie'),('microbiologie'),('microeconomie'),('macroeconomie'),('angla
is'),('LC'),('BD'),('Environement'),
('biologie cellulaire')
insert into module values ('biologie
animlae'),('Java'),('C'),('C++'),('UML'),('Merise'),('Analyse de donnees')
select * from module
insert into enseignant values
('sekak','Hanae',12000,'01/08/1979','PA'),
('jelloul', 'asmae',15000,'05/09/1978','PA'),
('salaheddine' ,'Ahmed',15000,'04/05/1970','PA'),
('chafi','mohamed',14000, '04/07/1969','PA'),
('aitali' ,'karim',18000,'03/11/1970','PH'),
('chafik','abdelhadi',19000,'04/02/1987','PH'),
('naseredine','salah',16200,'05/05/1984','PH'),
('naima','nouri','34568','05/05/1984','PES')
select * from enseignant
--insertion table examens
--insertion table examens
insert into examens values
(11,19,2,13),(2,4,4,12),(1,3,5,12),
(3,2,3,13),(9,17,4,12),
(9,12,1,13),(7,3,6,12),
(8,2,2,14),(11,1,2,16),
(2,1,1,13),(1,4,2,15),(6,5,6,17),
(8,3,2,11),(4,14,4,17),(5,2,5,18),
(3,6,4,19),(1,23,6,13),(2,22,7,15),(11,20,3,14)
select * from examens
--N.B : les types varchar et date entre quote lors de l'insertion
--Q7
-- la clause group by regroupe avec les 3 champs a la fois
select e.nom, e.prenom,ex.nmod from etudiant e, inscription i, examens ex
where i.cin=e.cin and i.num=ex.ninscr
group by (e.nom, e.prenom,ex.nmod);
-- la fonction cube donne toutes les possibilités de groupement
--<nom, prenom, nmod>
--<nom, prenom>
--<prenom, nmod>
--<nom, nmod>
--<nom>
--<prenom>
--<nmod>
--<>
--2^3 groupes
select e.nom, e.prenom,ex.nmod from etudiant e, inscription i, examens ex
where i.cin=e.cin and i.num=ex.ninscr
group by cube(e.nom, e.prenom,ex.nmod);
-- la fonction rollup donne toutes 4 groupe
--<nom, prenom, nmod>
--<nom, prenom>
--<nom, nmod>
--<nom>
--<>
--4 groupes
select e.nom, e.prenom,ex.nmod from etudiant e, inscription i, examens ex
where i.cin=e.cin and i.num=ex.ninscr
group by rollup(e.nom, e.prenom,ex.nmod);
--la fonction grouping sets regroupe chaque champ independamment des autres
--<nom>
--<prenom>
--<nmod>
select e.nom, e.prenom,ex.nmod from etudiant e, inscription i, examens ex
where i.cin=e.cin and i.num=ex.ninscr
group by grouping sets(e.nom, e.prenom,ex.nmod);
--Q8
--pour afficher la date d'aujourd'hui
-- il faut taper select getdate() ou bien print getdate()
-- select sert aussi a afficher les messagessous forme de tableau
-- exemple select 'bonjour'
-- print 'bonjour'
-- la fonction getdate() est une fonction systeme qui se trouver dans le
dossier
-- functions/fonctions qui se trouve dans programmability(programmabilité)
-- aussi la fonction CURRENT_TIMESTAMP affiche la date d'aujourd'hui
-- la fonction year pour recupere les année dans des dates
select year(GETDATE())
select CURRENT_TIMESTAMP
-- Correction
select * from etudiant where year(GETDATE())-year([date naissance])>=25;
--Q9
--ici nous utilisons l'autojointure car nous cherchons dans la meme table
select e.nom, e1.nom, year(e.[date naissance]) as annéenaissance
from etudiant e, etudiant e1
where e.cin<>e1.cin and year(e.[date naissance])=year(e1.[date naissance])
order by e.nom DESC;
--Q10
--ici soit nous utilisons une jointure ou une requete imbriquée
--solution avec la jointure
select e.nom, e.prenom, e.salaire from enseignant e, examens ex, module m
where e.num=ex.nmod and m.num=ex.nfor and m.libellé='biologie';
--solution 2 Avec requete imbriquée
select e.nom, e.prenom, e.salaire from enseignant e where e.num in
(select nfor from examens
where nmod in
(select num from module where libellé='biologie'))
--Q11
-- requete imbriquée
select grade,salaire from enseignant
where salaire =(select MAX(salaire) from enseignant)
--Q12
-- requete imbriquée+not in
select nom from enseignant where num not in(select nfor from examens)
select * from enseignant
select * from examens
TP3 : Requêtes SQL sous SQL Server
(LDD+LCT+LCD)2 séances

Ce TP est divisé en quatre partie :


Partie I : Création des schémas et manipulation.
Partie II : Sauvegarde et restauration de la BD.
Partie III : Gestion des transactions.
Partie IV : Gestion des utilisateurs.

Partie I :Création des schémas et manipulation

Soit les schémas de la BD gestion voiture suivants :


-Le schéma Location est déni par les tables suivantes :
Client(CIN, NomPr, Profession, Adresse, Ville, Tel)
Opération(Numéro, DateOper, NbrJour, PU, Avance, Réglé, #CIN, #Matricule)
Voiture(Matricule, Marque, Type, NbrCh, Disponible)
-Le schéma Resources Humaine(RH) est déni par les tables suivantes :
Service(ID, Nom, #IdVille)
Ville(ID, Nom)
Employé(CIN, NomPr, Adresse, Grade, #IdService)

Travail à faire :

 Q1) Créer la BD Gestion Voiture.


 Q2) Créer les schémas Location et RH.
 Q3) Créer Les tables de chaque schéma.
 Q4) Donner le diagramme de la BD Gestion voiture.
 Q5) Insérer les lignes de chaque table.
 Q6) Acher les tables de chaque schéma.
 Q7) Creer une vue pour la table service.
EMSI Casablanca A.U 2020/2021.
Partie II :Sauvegarde et restauration de la BD

Travail à faire :

 Q1) Sauvegarder la BD Gestion Voiture.


 Q2) Supprimer les tables de schéma Location.
 Q3) Restaurer la BD Gestion Voiture.
Partie III :Gestion des transactions

Travail à faire :

 Q1)Ajouter des opérations de location faire dans une transaction.


 Q2)Valider la transaction d'ajout.
 Q3)Supprimer des services dans une transaction..
 Q4) Annuler les transactions.
Partie IV :Gestion des utilisateurs

Travail à faire :

 Q1)Créer le login RH.


 Q2)Créer un utilisateur au login RH.
 Q3)Aecter des privilèges sur les objets de schéma rh a cet utilisateur.
 Q4)Créer un rôle.
 aecter à ce rôle les droits sur le schéma location.
 Aecter ce rôle à cet utilisateur.
 Supprimer les tables de chaque schema.
 Supprimer la BD Gestion Voiture.

2
Correction TP3
--TP3 en deux Seances
--Partie I:Creation de la BD et des shemas(LDD+LMD)
--Les schemas sont des BD qui ne depassent pas une dizaine de tables
--Q1
--Creation de la BD
create database [Gestion Voiture]
go --un lot qui permet d'avancer
--l'execution lors de succés
use [Gestion Voiture]
go
--Q2
--Creation des shemas
create schema Location
go
create schema rh
go
--Q3
--Creation des tables du schema Location
--Pour creer une table dans un schema il faut spécifier le nom schema avant
--le nom de table create table Nomschema.Nomtable()
create table Location.Client(cin varchar(10) Primary key,
[Nom Prenom] varchar(20), Profession varchar(20),
Adresse varchar(50), Ville varchar(20), Tel bigint)
go
create table Location.Voiture(Matricule varchar(20) primary key,
Marque varchar(20),
Type varchar(20),
NbrCh int,
Disponible varchar(10))
go
create table Location.Opération(Numéro int identity primary key, DateOper
date, NbrJour int,
PU money, Avance money, Réglé varchar(20), cin varchar(10),Matricule
varchar(20))
go
--Ajout des containte foreiign key
alter table Location.Opération
add constraint c1 foreign key(cin) references Location.Client
on delete cascade
on update cascade
go
alter table Location.Opération
add constraint c2 foreign key(Matricule) references Location.Voiture
on delete cascade
on update cascade
-- Creation des tables du schema rh
create table rh.Ville(Id int identity primary key, Nom varchar(20))
go
create table rh.Service(Id int identity primary key, Nom varchar(20), Idv int,
foreign key(Idv) references rh.Ville(Id)
on delete cascade
on update cascade);

go
create table rh.Employé(cin varchar(10) primary key, [Nom Prenom] varchar(20),
Adresse varchar(50), Salaire money, grade varchar(20), Idser int,
foreign key(Idser) references rh.Service(Id)
on delete cascade
on update cascade);
create table rh.[Employé Client] ([cin client] varchar(10), [cin employé]
varchar(10),
constraint cpk primary key([cin client],[cin employé]),
foreign key([cin client]) references Location.Client(cin)
on delete cascade
on update cascade,
foreign key([cin employé]) references rh.Employé(cin)
on delete cascade
on update cascade)
--
--Q4
-- voir diagramme par clique droit sur le dossier schemas de BD
--Q5 Toujours vous devez specifier le schema dans laquelle se trouve la table
à remplir
--Insertion
insert into Location.Client values('I689916', 'Mohamed Taybi', 'Professeur',
'Houda n° 56', 'Beni Mellal', 0667453489),
('Q789978', 'Khadija Naciri', 'Etudiante', 'Riad n° 70',
'Rabat', 065545346),
('IB98763', 'Ilham ouarit', 'Commerçant', 'Maararif n°120',
'Casa', 0666356714),
('QB780014', 'Yassine Harti', 'Administrateur', 'Nassim
n°67', 'Casa', 0522567856)
go
insert into Location.Voiture values('A607878', 'Dacia', 'Essence', 8, 'oui'),
('A230070', 'Palio', 'Diesel', 7, 'non'),
('B670067', 'FIAT', 'Diesel', 8, 'oui'),
('B406767', 'Mercedes', 'Essence', 11, 'non')
go
insert into Location.Opération values('09/01/2014', 10, 550, 550, 'oui',
'IB98763', 'B406767'),
('01/01/2014', 4, 300, 200, 'non', 'IB98763', 'A607878'),
('05/01/2014', 4, 350, 250, 'non', 'Q789978', 'A230070'),
('03/01/2014', 1, 250, 150, 'non', 'QB780014', 'B670067')

go
insert into rh.Ville values('Rabat'), ('Casablanca'), ('Salé'), ('Beni
Mellal')
go
insert into rh.Service
values('Marketing',1),('Location',2),('Rh',1),('Location',4),
('Maintenance',3),('Lavage',2)
go
insert into rh.Employé values('A123456','Ahmed Nouri','Rue
essad',10000,'Salarié',1),
('B234678','Ait ali youssef','Rue Marrakech',10000,'Admin',4),
('D234897','Sami charafaeddine','rue orangers',23000,'Chef',3),
('D456897','Touria nadif','rue tunie',20000,'Chef',2),
('F345789', 'Karima hanine','rue alger',45000, 'Chef',4),
('R567890','youness karimi','rue narjiss',30000,'Med',1)
--
--Q6
--le schema par defaut est dbo pour nous le specifons pas mais, lorsqu'on a
des tables dans d'autres schema il
-- faut specifier le nom de schema+nomde table
--affichage du tables
select * from Location.Client
select * from Location.Opération
select * from Location.Voiture
select * from rh.Service
select * from rh.Ville
select * from rh.Employé
-- Q7
--creer une vue sur le schema dbo
-- syntaxe : create view nomdevue as (requete)
create view vueservice as (select * from rh.Service)
-- cette vue sera creer dans le schema dbo car nous n'avons pas specifier le
schema
--creer une vue sur le schema rh nous devons specifier le nom de schema
create view rh.vueservice as (select * from rh.Service)
-- si vous remarquez les vues ont les memes noms mais, elles appartiennent à
deux vues differentes

--Partie II:
--Q1 sauvgarder la BD
--Pour sauvgarder une BD, vous devez tapez la commande suivante
--syntaxe : backup database [nom de la BD]to disk ='chemin\nom de la BD.bak'
--par defaul si vous specifier pas le chemin de back up votre BD sera
sauvegardée dans le fichier backup
--C:\Program Files\Microsoft SQL
Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\nom de la BD.bak
-- ici, le sauvegarde est complet(full back up)
backup database [Gestion Voiture] to disk ='DBBackup.bak'
--Q2 faire des suppression par clique droits sur les tablres à supprimer
--Q3
--Pour restaurer la BD, vous devez taper la commande:
--syntaxe: restore database [Nom de La BD] from disk ='chemin\nom de la
BD.bak'
restore database [Gestion Voiture] from disk ='DBBackup.bak'

-- par defaut les BDs sauvegardées se trouve dans le dossier backup


--C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup

--Partie III: Gestion des transaction(LCT)


--Les transactions est l'ensemble des opérations
-- de mise à jour sur les données des objets de la BD.
-- une trasaction peut etre valider(Commit) ou annuler(Rollback)
-- Le syntaxe :/*Begin transaction
/*Insert
Update
delete
Commit/ Rollback*/
use [Gestion Voiture]
go
select * from Location.Opération
select * from Location.Client
select * from Location.voiture
--Q1+Q2
begin transaction
insert into Location.Opération values('01/01/2001', 5, 200, 2000,
'Oui','I689916', 'A230070'),('01/01/2001', 5, 200, 2000,
'Oui','I689916','A230070')
commit-- pour valider la transaction il faut terminer la transaction par
rollback
select * from Location.Opération
--Q3+Q4
Begin transaction
Delete from rh.Service
select * from rh.Service
rollback-- pour annuler la transaction il faut terminer la transaction par
rollback
select * from rh.Service
--save transaction : creer des points de sauvegarde dans une transaction
--Save transaction
--le syntaxe:
/* begin transaction
Insert/ Delete/ Update
save tansaction (nom de transaction)
Insert/ delete/ update
rollback transaction (nom de transaction)
commit transaction (nom de transaction)*/
select * from rh.Ville
begin transaction
insert into rh.Service values ('lavage2', 4),('commerce1', 2)
save transaction t1
insert into rh.Ville values('Marrakech'),('tanger')
save transaction t1
rollback transaction t1 --il va retourner à la derniére lors de rollback
delete from Location.Client
rollback transaction t1
rollback
select * from Location.Client
-- suppression des services qui se trouvent dans la ville de casablancs dans
une trasanction
-- premierement, vous devez recuperer les id de la ville de casa a partir de
-- de la table ville ensuite, vous pouvez supprimer via une requete
imbriquée/Sous-requete
--vous pouvez faire la jointure
-- Commit+Rollback
begin transaction
begin transaction
delete from rh.Service where Idv in
(select id from rh.Ville where Nom like 'casablanca')
select * from rh.Service
commit
rollback
-- Truc
--Modifier le nom de service id 3
select * from rh.Service
begin transaction
update rh.Service set Nom='lavage' where ID =3
save transaction t2
update rh.Service set Nom='commerce' where ID =3
save transaction t2
update rh.Service set Nom='commerce' where ID =1
rollback transaction t2
commit
--Partie VI: Gestion des utilisateurs(LCD)
--Creer un login : create login (Nom de login) with password=''
--Affecter ce login a un user : create user (Nom de l'utilisateur) for login
nom de login
--affecter des droits et des privileges : grant
--retirer des privileges droits : revoke
--mettre dans la liste noire: deny
--Creer un role(un ensemble des droits que nous affectons à un utilisateur)
--create role nom de role
use [Gestion Voiture]
go
--le lot go permet d'executer un ensemble des instructions
--ou des transactions dans un bloc.
go
--Q1
--creation login au niveau de serveur
create login RH with password='123456',
default_database = [Gestion Voiture]
--Le login sera creer dans le dossier SQLSERVER Sécurité et plus précisement
le dossier login
-- probleme de connexion visitez le video :
https://www.youtube.com/watch?v=GDoOg_oeKEI
--Q2
--create user nomuser for login nom de login l'utilisateur est crée au niveau
de la BD gestion voiture
create user RH for login RH
--L'utilisateur RH sera creer dans le dossier base de donnees la bd gestion
voiture le dossier sécurité
--plus precisement le dossier utiisateur
--Q3
-- affecter les droits sur une table
--grant privileges on nom de la table to nom utilisateur
grant all privileges on rh.Ville to RH
--affecter les droits sur une colonne de la table
--grant privileges on nom de la table(nom de champs) to nom utilisateur
grant select on rh.service(Nom) to RH
--affecter les droits sur un schema
--grant privileges on nom de schema to nom utilisateur
grant select, update,insert, delete on schema::rh to RH
--Q4
-- un role : un ensemble de droits que nous pouvons affecter à des
utilisateurs
-- syntaxe : create role
create role RHV
--affecter au role les droits en utilisant pour cela grant comme le cas de
l'utilisateur
grant select, update, delete, insert on schema::location to RHV
--
--affecter ce role à un utilisateur
-- sp_addrolemember: est une procedune stockée utilisée pour affecter un role
à un utilisateur
EXEC sp_addrolemember 'RHV', 'RH'
--N'oubliez pas de se connecter a la session de login RH et testez
--sp_addsrvrolemember : est une procedure stockée pour affecter un role à un
login
-- affecter un role à un login location2
EXEC sp_addsrvrolemember 'RH' , 'sysadmin'

--N.B: grant est plus propriétaire que rekvoke et deny est plus proprietaire
--que grant et revoke
revoke select on rh.ville to RH
deny select on rh.ville to RH

--suppression de la BD+ Les schemas+les tables des schemas


drop table rh.[Employé Client]
drop table rh.Employé
drop table rh.Service
drop table rh.Ville
drop table Location.Opération
drop table Location.Client
drop table Location.Voiture

drop database [Gestion Voiture]


TOUS LES CONTRÔLES SQL SERVER
CONTRÔLES SQL SERVER GROUPE 11
Contrôle 1 : Requêtes SQL sous SQL
Server(LDD+LMD)

Soit le modèle relationnel suivant pour la BD gestion des rôles utilisateurs :


Utilisateur(id user(auto-incrément), nom user, adresse user, ville user, date naissance)
Rôle(id rôle(auto-incrément), nom rôle, description)
Privilèges(id privilège(auto-incrément), nom, description, #id rôle)
Utilisateur Rôle(#id user,#id rôle, date d'aectation)

En utilisant le langage SQL, Programmer les requêtes suivantes :


Créer la BD .
Créer la table .
Q1-) [Gestion rôle user]

Quels sont les rôles aectés à Monsieur ?


Q2-) Rôle

Quel est le nombre de privilèges par rôle ?


Q3-) 'Youness'

Quels sont les utilisateurs qui habitent dans la même ville?


Q4-) (id rôle)

Quels sont les utilisateurs nés en 2000?


Q5-) (nom user)

Quels sont les utilisateurs qui ont le rôle ?


Q6-) (nom user)

Quels les rôles aectés en 2018?


Q7-) (nom user) 'Sysadmin'

Ajouter les lignes suivantes :


Q8-) (id rôle)

 ('Bachiri','Ouasis', 'casablanca', '03/10/1999') ,('Saida', 'Hay Karima', 'Salé', '23/07/1998')(la


Q9-)

table utilisateur)
 (1,2,'09/04/2019')(la table utilisateur rôle)
Q10-) Supprimer les rôles qui ne sont aectés à aucun utilisateur.
Bonne Chance .

EMSI Orangers Casablanca A.U 2020/2021.


CONTRÔLES SQL SERVER GROUPE 12
Contrôle 1 : Requêtes SQL sous SQL
Server(LDD+LMD)

Soit le modèle relationnel suivant pour la BD gestion magasin de vente :


Client(id client(auto-incrément), nom, prénom, adresse, ville)
Article(id article(auto-incrément), nom prix)
Vendeuse(id vendeuse(auto-incrément), nom, prénom, adresse, ville, grade, salaire)
Vente(#id client,#id article, #id vendeuse date de vente, quantité)

En utilisant le langage SQL, Programmer les requêtes suivantes :


Q1-)Créer la BD [Gestion vente].
Q2-)Créer la table Client.
Q3-)Quelles sont les quantités SUM(quantité) vendues par article (id article) ?
Q4-) Modier le nom de la table 'Vente' par 'Commande'.
Q5-)Supprimer les articles non-vendus.
Q6-)Réduire le prix des articles par un pourcentage de 20%.
Q7-) Quels sont les clients (nom, prénom) qui ont acheté l'article 'Bureau' ?
Q8-)Quels sont les articles (id article) vendus en 2000 ?
Q9-) Quels sont les clients (nom, prénom) qui ont achetés des articles en 2018 ?
Q10-)Supprimer les clients dont la date de vente est expirée ([date de vente]<getdate()).

Bonne Chance .

EMSI Orangers Casablanca A.U 2020/2021.


CONTRÔLES SQL SERVER GROUPE 21
Contrôle 1 : Requêtes SQL sous SQL
Server(LDD+LMD)

Soit le modèle relationnel suivant pour la BD gestion des ventes des appartements :
Client(cin, nom prénom, date naissance, adresse, ville, pays)
Immeuble(numéro, adresse, ville)
Appartement(numéro, étage, #numéroimmeuble)
Vendeur(id, nom, adresse)
ContratVente(numéro, date de contrat, prix, avance, #numéroappart, #cin, #idvendeur)

En utilisant le langage SQL, Programmer les requêtes suivantes :


Q1-)Créer la BD [Gestion Vente Appartement].
Q2-)Créer la table [Contrat Vente].
Q3-)Dupliquer la ligne 25 de la table ContractVente (id est auto-incrément) avec numéro
appartement=19.
Q4-)Ajouter le client suivant : ('FA345678','Youness Radi','03/06/1984', 'Esalam', 'Casablan-
ca','Maroc')
Q5-)Supprimer les contrats de vente signés en 2015.
Q6-)Quels sont les appartements non vendus ?
Q7-)Acher le nombre des appartements(numéroappart)de chaque immeuble .
Q8-)Quels sont les vendeurs(nom) qui n'ont vendu aucun appartement?
Q9-)Quels sont les immeubles(numéro) qui se trouvent dans la même ville ?.
Q10-) Quels sont les clients(nom prenom+cin+adresse) qui ont acheté les appartement de l'im-
meuble 10 ?
Bonne Chance .

EMSI Orangers Casablanca A.U 2020/2021.


CONTRÔLES SQL SERVER GROUPE 22
Contrôle 1 : Requêtes SQL sous SQL
Server(LDD+LMD)

Soit le modèle relationnel suivant pour la BD gestion location appartement :


Client(cin, nom prénom, date naissance, adresse, ville, pays)
Appartement(numéro, étage, adresse, ville)
Propriétaire(cin, nom prénom, adresse, ville)
Contrat(numéro, date début contrat, date n contrat, prix, avance, date de signature,
#numéroappart, #cinclient, #cinpropriétaire )

En utilisant le langage SQL, Programmer les requêtes suivantes :


Q1-)Créer la BD [Gestion location].
Q2-)Créer la table Contrat.
Q3-)Dupliquer la ligne 2 de la table contrat (id est auto-incrément) sans numéro apparte-
ment, cin et avance.
Q4-)Supprimer les contrats expirés([date n contrat]<getdate()).
Q5-)Ajouter le client suivant : ('AZ345678','Youness Radi','03/06/1984', 'Ouassis', 'Casablan-
ca','Maroc')
Q6-)Quels sont les appartements non-allouer ?
Q7-)Quel est l'appartement(numéro+étage) allouer par Monsieur 'Radouane Daher' ?
Q8-)Quel est l'appartement(numéroappart)moins cher.
Q9-)Quels sont les appartement(numéro) qui se trouvent dans le même étage ?
Q10-) Quels sont les contrats signés en 2020.

Bonne Chance.

EMSI Orangers Casablanca A.U 2020/2021.


CONTRÔLES SQL SERVER GROUPE 31
Contrôle 1 : Requêtes SQL sous SQL
Server(LDD+LMD)

Soit le modèle relationnel suivant pour la BD gestion des BDs d'un serveur :
BD(id, nom, la taille, emplacement, description, date de création)
Schéma(id, nom, description, #idBD)
Table(id, nom, description,#idschema )
Champ(id,nom, type, taille, description,#idtable)

En utilisant le langage SQL, Programmer les requêtes suivantes :


Q1-)Créer la BD [Gestion Serveur BDs].
Q2-)Créer la table BD.
Q3-) Quel est le nombre des champs de la table Employé.
Q4-)Dupliquer la ligne 1 de la table Champ (id est auto-incrément).
Q5-)Quelles sont les tables qui ne possèdent pas des champs ?
Q6-)Supprimer les BDS vides(qui ne possèdent pas de schémas).
Q7-) Quelles sont les BDs crées en 2019 ?
Q8-)Modier nom de la BD 'Entreprise' par 'Société' .
Q9-)Quelles sont les BDs(nom) qui se trouvent dans le même emplacement
Q10-)Acher les noms des champs du schéma dbo.

.
Bonne Chance

EMSI Orangers Casablanca A.U 2020/2021.


CONTRÔLES SQL SERVER GROUPE 32
Contrôle 1 : Requêtes SQL sous SQL
Server(LDD+LMD)

Soit le modèle relationnel suivant pour la BD gestion des utilisateurs des serveurs mail :
Serveur(id, nom, la taille, emplacement, pays, date de démarrage)
Utilisateur(id, nom prénom, date naissance)
Compte(login, mdp, date de création, taille occupée, taille libre, #idserveur, #iduser,)

En utilisant le langage SQL, Programmer les requêtes suivantes :


Q1-)Créer la BD [Gestion serveur mail].
Q2-)Créer la table Compte .
Q3-)Dupliquer la ligne 14 de la table Serveur (id est auto-incrément) avec pays='france'.
Q4-) Quel est le login et le mdp de l'utilisateur'Youness Radi' .
Q5-)Quel est le nombre des utilisateurs par serveur(idserveur)?
Q6-)Supprimer les utilisateurs qui n'utilisent aucun serveur.
Q7-) Quels sont les serveurs non utilisés par aucun utilisateur?
Q8-)Quel le compte(login) qui occupe une taille max (taille occupée) .
Q9-)Quels sont les serveurs(nom) qui se trouvent dans le même pays ?
Q10-) Supprimer les comptes utilisateurs crées en 2020 .
Bonne Chance .

EMSI Orangers Casablanca A.U 2020/2021.


CONTRÔLES SQL SERVER GROUPE 41
Contrôle 1 : Requêtes SQL sous SQL
Server(LDD+LMD)

Soit le modèle relationnel suivant pour la BD gestion des chiers :


Fichier(id chier, nom, type, extension, taille, date de création)
Dossier(id dossier, nom de dossier, taille, date de création, emplacement)
Emplacement (#id chier, #id dossier, emplacement)

En utilisant le langage SQL, Programmer les requêtes suivantes :


Q1-)Créer la BD [Gestion Fichier].
Q2-)Créer la table [Emplacement].
Q3-)Modier le nom de la table'Emplacement' par 'Emplacement Fichier'.
Q4-) Ajouter les lignes suivantes à la table chier :
- (examen1, chier PDF, .pdf, 10Mo, 01/01/2021)
- (examen2, chier PDF, .pdf, 20Mo, 01/03/2021)
- (examen3, chier PDF, .pdf, 2Mo, 01/05/2021)
Q5-) Quels sont les chiers les plus récents[Date de création=getdate())].
Q6-) Quels sont les chiers(id chier) qui se trouvent dans le même emplacement ?
Q7-)Quel est le nombre de chier du dossier 'informatique' ?
Q8-)Supprimer les chiers qui se trouvent pas dans un dossier
Q9-)Supprimer les dossiers vides.
Q10-)Réduire la taille des chiers qui dépasse 500Mo par une pourcentage de 10%.

.
Bonne Chance

EMSI Orangers Casablanca A.U 2020/2021.


CONTRÔLES SQL SERVER GROUPE 42
Contrôle 1 : Requêtes SQL sous SQL
Server(LDD+LMD)

Soit le modèle relationnel suivant pour la BD gestion magasin de vente :


Client(id client(auto-incrément), nom, prénom, adresse, ville)
Article(id article(auto-incrément), nom prix)
Vendeuse(id vendeuse(auto-incrément), nom, prénom, adresse, ville, grade, salaire)
Vente(#id client,#id article, #id vendeuse date de vente, quantité)

En utilisant le langage SQL, Programmer les requêtes suivantes :


Q1-)Créer la BD [Gestion vente].
Q2-)Créer la table Client.
Q3-)Quelles sont les quantités SUM(quantité) vendues par article (id article) ?
Q4-) Modier le nom de la table 'Vente' par 'Commande'.
Q5-)Supprimer les articles non-vendus.
Q6-)Réduire le prix des articles par un pourcentage de 20%.
Q7-) Quels sont les clients (nom, prénom) qui ont acheté l'article 'Bureau' ?
Q8-)Quels sont les articles (id article) vendus en 2000 ?
Q9-) Quels sont les clients (nom, prénom) qui ont achetés des articles en 2018 ?
Q10-)Supprimer les clients dont la date de vente est expirée ([date de vente]<getdate()).

Bonne Chance .

EMSI Orangers Casablanca A.U 2020/2021.


CONTRÔLES D’AUTRES GROUPES
Contrôle 1 : Requêtes SQL sous SQL
Server(LDD+LMD)

Soit le modèle relationnel suivant pour la BD gestion bibliothèque :


Étudiant(cin, nom prénom, date naissance, adresse, ville, tel, pays,)
Responsable(cin, nom prénom, date naissance, adresse, salaire )
Livre(idlivre,nom de livre, date d'édition, maison d'édition)
Emprunt(#idlivre, #cin responsable, #cin étudiant, date d' emprunt, date de retour,
réglé('oui', 'en cours', 'non'))

En utilisant le langage SQL, Programmer les requêtes suivantes :


Q1-) Créer la BD [Gestion Bibliothèque].
Q2-) Créer la table Emprunt .
Q3-) Dupliquer le livre'Programmer en C' sans maison d'édition (id livre est auto-incrément).
Q4-) Quels sont les livres édités par la même maison d'édition?
Q5-) Quels sont les livres qui ont édité en 2000 ?
Q6-) Pour chaque responsable(cin)acher le nombre de livre emprunté.
Q7-) Quels sont les étudiants(cin) qui ont dépassé la date de retour de livre(durée d'emprunt de
livre=3 jours)?
Q8-) Quels sont les étudiants(nom,prénom, adresse) qui ont emprunté le livre 'Analyse 2' ?
Q9-) Quels sont les livres(nom de livre) qui ne sont pas empruntés par aucun étudiant ?
Q10-) Supprimer les emprunts expirés (réglé='oui') .
Bonne Chance .

EMSI Centre Casablanca A.U 2020/2021.


Contrôle 1 : Requêtes SQL sous SQL
Server(LDD+LMD)

Soit le modèle relationnel suivant pour la BD gestion des visites médicales :


Médecin(cin, nom prénom, date naissance, adresse, ville, tel, spécialité, date de recrutement,
salaire)
Patient(cin, nom prénom, date naissance, adresse)
Maladie(id, nom, description)
Visite(#cinmedecin, #cinpatient, #idmaladie, date de visite, description)

En utilisant le langage SQL, Programmer les requêtes suivantes :


Q1-) Créer la BD [Gestion Visite Médicale].
Q2-) Créer la table
Visite .
Q3-) a-)Ajouter la maladie 'COVID-19' (id est auto-incrément) sans description.
b-)Ajouter à la tableMédecin
l'enregistrement suivant :('ZE346789', 'Youness Radi','03/06/1984', 'Ouassis', 'Casablanca', 0667654321,
'cardiologue', '01/03/2019', 15.000).
Q4-) Quels sont les médecins(nom prénom) de Monsieur 'Aymen Rami' ?
Q5-) Combien des patients soignés par Monsieur Youssef Hanine ?
Q6-) Acher le nombre de visite de Madame 'Sara Roudani' .
Q7-) Quels sont les patients(nom prénom) qui ont dépassé l'age de 60 ans ?
Q8-) Acher le salaire moyen de chaque spécialité.
Q9-) Quels sont les médecins recrutés dans lamême année ?
Q10-) Supprimer les visites expirées
([date de visite]<getdate()) .
Bonne Chance .

EMSI Centre Casablanca A.U 2020/2021.


Bibliographie

[1] https ://www.microsoft.com/fr-ma/download/details.aspx ?id=55994

[2] https ://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks

[3] https ://docs.microsoft.com/en-us/sql/samples/adventureworks-install-congure ?view=sql-


server-ver15&tabs=ssms

[4] https ://codingsight.com/understanding-pivot-unpivot-and-reverse-pivot-statements/

[5] https ://www.sqlservertutorial.net/

[6] https ://www.mssqltips.com/sqlservertip/5538/understanding-sql-server-transaction-


savepoints/

[7] https ://www.tutos.eu/6660

[8] https ://docs.microsoft.com/en-us/sql/t-sql/statements/create-login-transact-sql ?view=sql-


server-ver15

[9] https ://www.sqlshack.com/importexport-data-sql-server-using-sql-server-import-export-


wizard/

81

Vous aimerez peut-être aussi