Académique Documents
Professionnel Documents
Culture Documents
Meryem AMEUR
ameurmeryem@gmail.com
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
Table des matières
3
2.2.12 Sauvegarde et restauration . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.3 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
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
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
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 :
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).
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.
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 :
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.
10
avons choisi comme verbe d'action s'inscrire :
11
suivantes :
Règle 1 :
Entités ⇒ tables.
Attribut ⇒ champs.
Identiant ⇒ clé primaire.
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 :
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
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 :
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 :
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).
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
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 :
Résultat de requête :
19
2.2.2 La requête Alter
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 :
Résultat de requête :
22
Pour supprimer les enregistrements de la table lière on tape :
Résultat :
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 :
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
Résultat :
24
2.2.6 la requête Delete
Résultat :
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]
25
Exemple d'application :
- Acher les noms des étudiants par ordre alphabétique :
Résultats :
Résultats :
26
- Résultats :
Dans les requêtes multiples, nous utilisons deux ou plusieurs tables. Nous distinguons :
1. les jointures
2. l'auto-jointure(SELF 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).
28
Ici, nous utilisons la jointure interne, car, nous cherchons ce qui est commun les lières et les
étudiants.
Résultat :
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 :
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 :
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 :
Résultat :
32
2.2.11 La gestion des utilisateurs
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)
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).
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 :
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
Travail à faire :
Travail à faire :
Travail à faire :
Travail à faire :
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'
--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
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 .
Bonne Chance .
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)
Bonne Chance.
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)
.
Bonne Chance
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,)
.
Bonne Chance
Bonne Chance .
81