Вы находитесь на странице: 1из 136

OFPPT/DRPS/ISGI LAAYOUNE

FILIERE : TECHNIQUES DE DEVELOPPEMENT INFORMATIQUE


TDI2

MODULE : SYSTEME DE GESTION DE


BASE DE DONNES I
Version 2014
Ralis par :A BENDAOUD

Table des matires


I.

LES SYSTEMES DE GESTION DES BASE DE DONNEES ................................................................. 11


1)

II.

PRINCIPES DE FONCTIONNEMENT .................................................................................... 11


A.

Objectifs......................................................................................................................... 11

B.

Quelques SGBD connus et utiliss ................................................................................. 13

SQL server 2008 comme exemple dun SGBDR ..................................................................... 14


A.

Composants SQL Server..................................................................................................... 14

I.

Pourquoi grer les droits ? ........................................................................................................ 22

II.

Gestion des droits dans le processus de dveloppement ..................................................... 23


A.

Notions de base ................................................................................................................. 23

B.

Gestion des droits : principes ............................................................................................ 23

III.

Implmentation dune stratgie de scurit......................................................................... 24

A.
IV.

Choix du mode dauthentification : ................................................................................... 24


Gestion des rles ................................................................................................................... 25

A.
1.

Rle dfinis de serveur : ................................................................................................ 26

2.

Rles dfinis de base de donnes : ............................................................................... 26

3.

Rle de base de donnes............................................................................................... 26

B.

Gestion des droits : rgles ................................................................................................. 29

C.

Notions supplmentaires Login/User ................................................................................ 30

D.

Les Schmas....................................................................................................................... 31

V.

I.

Qu'est-ce qu'un rle exactement ? ................................................................................... 25

Gestion des permissions........................................................................................................ 35


A.

Droit dutilisation dinstructions........................................................................................ 36

B.

Autorisations ..................................................................................................................... 36

A.

Retirer privilges............................................................................................................... 38

B.

Interdire lutilisation dun privilge ................................................................................... 39

C.

Gestion des permissions sur les objets ............................................................................. 39


1.

LACCORD DES PERMISSIONS ........................................................................................ 39

2.

RETIRER DES PERMISSIONS ........................................................................................... 40

Notion de base de donnes....................................................................................................... 44


A.

Dfinition ........................................................................................................................... 44

B.

Conception dune base de donnes .................................................................................. 44

C.

Introduction au Modle Relationnel ................................................................................. 45

Ralis par :A BENDAOUD

II.

Diffrentes Oprations appliques sur les relations ............................................................. 49


A.

Opration PROJECTION ..................................................................................................... 49

B.

Opration PROJECTION EN langage SQL ........................................................................... 50

C.

Opration RESTRICTION .................................................................................................... 50

D.

Opration JOINTURE (qui-jointure) ................................................................................. 52

E.

Opration JOINTURE (qui-jointure) ................................................................................. 54

I.

Les oprations ensemblistes ..................................................................................................... 58


A.

Opration UNION .............................................................................................................. 59

B.

Opration UNION avec transact SQL ................................................................................. 60

C.

Opration INTERSECTION .................................................................................................. 60

D.

Opration INTERSECTION en langage SQL ........................................................................ 61

E.

Opration DIFFERENCE ...................................................................................................... 63

F.

Opration DIFFERENCE avec langage SQL ......................................................................... 64

G.

Opration PRODUIT CARTESIEN ........................................................................................ 66


1.

H.

Opration PRODUIT CARTESIEN langage SQL............................................................... 66


Opration Division ............................................................................................................. 67

Ligne de COM
I.

Article ............................................................................................. 67

Opration TRI ........................................................................................................................ 68


1.

Exercice d'application .................................................................................................... 69

I.

Les types de donnes ................................................................................................................ 72

II.

Cration des tables ................................................................................................................ 73


A.

I.

Les tables temporaires : .................................................................................................... 74

Les contraintes de colonnes (verticales) ................................................................................... 76


A.

I.

Obligatoire ([NOT] NULL)................................................................................................... 77

Mise en uvre des contraintes ................................................................................................. 78


A.

Valeur par dfaut (DEFAULT)............................................................................................. 78

B.

Clef (PRIMARY KEY) ........................................................................................................... 79

C.

Unicit (UNIQUE) ............................................................................................................... 80

D.

CREATION DINDEXS .......................................................................................................... 81

E.

1.

CONCEPTION DINDEXS ................................................................................................. 81

2.

Directives relatives aux bases de donnes .................................................................... 83


Validation (CHECK) ............................................................................................................ 83

II.

Intgrit rfrentielle (FOREIGN KEY / REFERENCES) ........................................................... 84

III.

Les contraintes de table ........................................................................................................ 86

A.

Clef multicolonne (PRIMARY KEY) ..................................................................................... 86

B.

Unicit globale (UNIQUE) .................................................................................................. 87

C.

Validation de ligne (CHECK) ............................................................................................... 88

IV.

Intgrit rfrentielle de table (FOREIGN KEY / REFERENCES) ............................................. 88

Ralis par :A BENDAOUD

V.

Suppression dune table ........................................................................................................ 90

VI.

MODIFIER UN TABLEAU......................................................................................................... 90

A.

Ajout d'une nouvelle colonne ........................................................................................... 90

B.

Suppression d'une colonne ............................................................................................... 91

C.

Modification du type de donnes d'une colonne ............................................................. 91

D.

Ajout d'une colonne avec une contrainte ......................................................................... 92

E.

Ajout d'une contrainte CHECK non vrifie une colonne existante ............................... 93

F.

Ajout d'une contrainte DEFAULT une colonne existante ............................................... 93

G.

Ajout de plusieurs colonnes avec des contraintes ............................................................ 94

I.

Langage de manipulation des donnes ..................................................................................... 96


A.

Insertion ............................................................................................................................ 96

B.

Modification ...................................................................................................................... 97

Suppression .................................................................................................................................. 99
I.

Interrogations .......................................................................................................................... 105


A.

Syntaxe gnrale ............................................................................................................. 105

B.

Clause SELECT .................................................................................................................. 105

C.

Clause FROM ................................................................................................................... 106

D.

Clause WHERE ................................................................................................................. 107

E.

Oprateurs logiques AND et OR ...................................................................................... 108

II.

Sous-interrogation ............................................................................................................... 109


A.

Sous-interrogation une ligne et une colonne ............................................................... 109

B.

Sous-interrogation ramenant plusieurs lignes ................................................................ 111

C.

Les Prdicats : ALL, DISTINCT, DISTINCTROW, TOP ................................................. 112


1.

Le prdicat ALL ............................................................................................................ 112

2.

Le prdicat DSTINCT .................................................................................................. 113

3.

Predicat DISTINCTROW ............................................................................................... 114

4.

TOP n [PERCENT] ...................................................................................................... 115

D.

Sous-interrogation synchronise ou bien corrles........................................................ 115

E.

Sous-interrogation ramenant plusieurs colonnes ........................................................... 116

F.

Clause EXISTS ................................................................................................................... 117

G.

Division avec la clause EXISTS.......................................................................................... 117

III.

Fonctions de groupes .......................................................................................................... 120

Clause GROUP BY ....................................................................................................................... 122


Clause HAVING ........................................................................................................................... 123

IV.
A.

1.

Exercice dapplication .................................................................................................. 124

2.

Reponses ..................................................................................................................... 125

Fonctions ............................................................................................................................. 125


Fonctions arithmtiques.................................................................................................. 125

Ralis par :A BENDAOUD

I.

B.

Fonctions chane de caractres ....................................................................................... 126

C.

Les fonctions des dates :................................................................................................. 127

Initialisation validation ou annulation de transaction ............................................................ 130


A.

Dtection des erreurs .............................................................................................. 132

B.

Gestion des erreurs ......................................................................................................... 133

GUIDE PEDAGOGIQUE
SYSTME DE GESTION DE BASES DE DONNES I
Code : TDI-17 Dure : 75 Heures
OBJECTIF OPRATIONNEL
COMPTENCE
Crer et exploiter des bases de donnes.
PRSENTATION :

Ralis par :A BENDAOUD

Ce module de comptence particulire constitue un pralable pour l'enseignement des modules :


"Systme de gestion de bases de donnes II", "Programmation Client/Serveur"" et "Programmation
de sites web dynamiques". Il permet au stagiaire de manipuler une base de donnes en utilisant le
langage SQL.

DESCRIPTION :
Lobjectif de ce module vise ce que le stagiaire soit capable d'alimenter une base de donnes
relationnelle et d'en extraire les donnes avec le langage de requtes SQL. Les requtes doivent tre
crites en langage SQL dans lun des utilitaires du systme de gestion de base de donnes en mode
console.
Pour les travaux pratiques, utiliser un SGBDR puissant tel que : Oracle ou SQL Server 2008.

CONTEXTE DENSEIGNEMENT
STRATEGIES DENSEIGNEMENT
Un cours thorique sur les principes de base du modle relationnel. Des exercices et tudes de
cas pratiques permettant au stagiaire de manipuler des bases de donnes relationnelles
reprsentant des systmes dinformation varis.

ACTIVITES DAPPRENTISSAGE
Exercices et travaux pratiques permettant aux stagiaires de :
Concevoir une base de donnes.
crire des requtes SQL pour manipuler une base de donnes.
Assurer la scurit des donnes.

EVALUATION
Individuellement.
Travail effectu l'aide :
d'un poste informatique ;
dun Systme de Gestion de Base de Donnes Relationnel dans notre cas SQL server 2008
d'un utilitaire dinterface pour introduire et excuter les requtes SQL.
o

Travail effectu partir :

d'tudes de cas et mises en situation ;


de sources de rfrence ;
des consignes du formateur.

MATERIEL ET EQUIPEMENT
Matriel :
Un systme d'exploitation supportant le SGBD utilis.
Un systme de gestion de bases de donnes relationnel.
La documentation et laide en ligne du SGBD choisi.
Notes de cours.

quipement :
Un poste informatique.
PRCISIONS ET PREALABLES LMENTS DE CONTENU
1. tablir un modle conceptuel et logique reprsentant un systme dinformation.
2. Matriser les oprations de base du modle relationnel.
Ralis par :A BENDAOUD

Les principes du modle relationnel.


Oprations ensemblistes :

projection ;
restriction ;
diffrence ;
intersection ;
union.
Oprations spcifiques :
produit cartsien ;
division ;
jointure ;
agrgation.
Reprsentation des requtes en utilisant les arbres algbriques.
A. Traduire les oprations de lalgbre Relationnel en requtes SQL.
Dfinition du formalisme dune requte de consultation de donnes, ordre Select.
Expressions et fonctions du SGBD.
Oprateurs de Projection, Restriction, union, intersection.
Extraction de donnes en provenance de plusieurs tables : Jointure (equi-jointures, jointures
externes, auto-jointures).
Statistiques sur les donnes en utilisant les fonctions de groupe.
Sous interrogations et sous interrogations synchronises.
Reprsentation des donnes de manire hirarchique.
3. Connatre l'environnement d'un SGBDR.
Prsentation du systme de gestion de base de donnes utilis.
Outil dinterface du SGBD permettant dexcuter les requtes.
B. Exploiter lenvironnement duSGBDR pour interroger une base de
donnes.
Construction d'une base de donnes.
criture et excution des requtes SQL.
Correction des erreurs.
4. Connatre les diffrents types de donnes manipuls par le SGBD.
5. Connatre limportance de cl primaire dans une relation.
6. Connatre limportance des contraintes dintgrit rfrentielle dans la garantie de la cohrence et
Lintgrit de donnes.
Diffrents types de donnes.
Rgles de nomination des objets.
Importance des contraintes d'intgrit rfrentielle dans la garantie de la cohrence et
l'intgrit de donnes.
C. Exploiter les commandes de description de donnes.
Formalisme dune requte de description de donnes pour :

utiliser CREATE TABLE ;


dfinir des contraintes dintgrit au niveau colonne et table : cl primaire, unique, contrainte
dintgrit rfrentielle, contrainte de domaine

Ralis par :A BENDAOUD

PRCISIONS ET PREALABLES LMENTS DE CONTENU


(CHECK) ;
utiliser DROP TABLE ;
utiliser ALTER TABLE ;
D. Exploiter les commandes de manipulation des donnes.
Formalisme dune requte de manipulation de donnes pour :
insrer des donnes dans les tables existantes ;
insrer les donnes en utilisant un SELECT ;
respecter les contraintes au moment de linsertion ;
modifier les donnes en utilisant UPDATE ;
supprimer les donnes en utilisant DELETE;
7. Expliquer le rle des transactions dans les applications client/serveur et dans un contexte
multiutilisateur.
Le modle Client/Serveur.
Principe des systmes transactionnels.
E. Grer les transactions.
Formalisme d'une requte de cration de transaction.
Verrouillage des donnes lors de lexcution des commandes INSERT UPDATE DELETE.
Fin des transactions : Commit, RollBack.
8. Dfinir le rle dautres objets de la base de donnes.
Rle des acclrateurs.
Rle des vues utilisateurs pour la scurit et la simplification de lcriture des requtes.
Avantage des squences dans la gnration des cls primaires.
F. Utiliser les diffrents types dobjets sur une base de donnes.
Cration de squences pour gnrer des valeurs de cls primaires.
Cration de vues, et expliquer leur rle dans la scurit et la simplification de manipulation
de donnes.
Optimisation des accs aux donnes en crant des indexes.
9. Connatre les fonctionnalits offertes par le SGBD pour la scurit des donnes.
Fonctionnalits de scurit offertes par le SGBD utilis.
G. Scuriser les donnes.
Cration des utilisateurs et des rles.
Dfinition des privilges systme et objet.
Commandes de gestion des privilges GRANT et REVOKE.
H. Utiliser le dictionnaire de donnes.
Exploitation des vues de dictionnaire.
Vrification des objets et des privilges sur les objets.

Ralis par :A BENDAOUD

Ralis par :A BENDAOUD

CHAPITRE : 1
Leon1 : Systme de gestion des bases de donnes

Objectifs: vous saurez mme d'effectuer les tches suivantes

Principes de fonctionnement dun SGBDR.


objectifs principaux dun SGBD

quelques SGBDR connus et utiliss


SQL Server 2008 comme exemple

Ralis par :A BENDAOUD

10

I.

LES SYSTEMES DE GESTION DES BASE DE DONNEES

1) PRINCIPES DE FONCTIONNEMENT
La gestion et laccs une base de donnes sont assurs par un ensemble de
programmes qui constituent le Systme de gestion de base de donnes (SGBD). Un
SGBD doit permettre lajout, la modification et la recherche de donnes. Un systme de
gestion de bases de donnes hberge gnralement plusieurs bases de donnes, qui sont
destines des logiciels ou des thmatiques diffrentes.

serveur

clients
Actuellement, la plupart des SGBD fonctionnent selon un mode client/serveur. Le
serveur (sous entendu la machine qui stocke les donnes) reoit des requtes de
plusieurs clients et ceci de manire concurrente. Le serveur analyse la requte, la traite
et retourne le rsultat au client. Le modle client/serveur est assez souvent implment
au moyen de linterface des sockets (voir le cours de rseau) ; le rseau tant Internet.
Une variante de ce modle est le modle ASP (Application Service Provider). Dans ce
modle, le client sadresse un mandataire (broker) qui le met en relation avec un SGBD
capable de rsoudre la requte. La requte est ensuite directement envoye au SGBD
slectionn qui rsout et retourne le rsultat directement au client.
Quelque soit le modle, un des problmes fondamentaux prendre en compte est la
cohrence des donnes. Par exemple, dans un environnement o plusieurs utilisateurs
peuvent accder concurremment une colonne dune table par exemple pour la lire ou
pour lcrire, il faut saccorder sur la politique dcriture. Cette politique peut tre : les
lectures concurrentes sont autorises mais ds quil y a une criture dans une colonne,
lensemble de la colonne est envoye aux autres utilisateurs layant lue pour quelle soit
rafrachie.

A. Objectifs

Ralis par :A BENDAOUD

11

Des objectifs principaux ont t fixs aux SGBD ds lorigine de ceux-ci et ce, afin de rsoudre les
problmes causs par la dmarche classique. Ces objectifs sont les suivants :

a)

Indpendance physique :

La faon dont les donnes sont dfinies doit tre indpendante des structures de stockage
utilises.

b)

Indpendance logique :

Un mme ensemble de donnes peut tre vu diffremment par des utilisateurs diffrents.
Toutes ces visions personnelles des donnes doivent tre intgres dans une vision globale.

c)

Accs aux donnes :

Laccs aux donnes se fait par lintermdiaire dun Langage de Manipulation de Donnes (LMD).
Il est crucial que ce langage permette dobtenir des rponses aux requtes en un temps
raisonnable . Le LMD doit donc tre optimis, minimiser le nombre daccs disques, et tout cela
de faon totalement transparente pour lutilisateur.

d)

Administration centralise des donnes (intgration) :

Toutes les donnes doivent tre centralises dans un rservoir unique commun toutes les
applications. En effet, des visions diffrentes des donnes (entre autres) se rsolvent plus facilement
si les donnes sont administres de faon centralise.

e)

Non redondance des donnes :

Afin dviter les problmes lors des mises jour, chaque donne ne doit tre prsente quune
seule fois dans la base.

f)

Cohrence des donnes :

Les donnes sont soumises un certain nombre de contraintes dintgrit qui dfinissent un
tat cohrent de la base. Elles doivent pouvoir tre exprimes simplement et vrifies

Ralis par :A BENDAOUD

12

automatiquement chaque insertion, modification ou suppression des donnes. Les contraintes


dintgrit sont dcrites dans le Langage de Description de Donnes (LDD).

g)

Partage des donnes :

Il sagit de permettre plusieurs utilisateurs daccder aux mmes donnes au mme moment
de manire transparente. Si ce problme est simple rsoudre quand il sagit uniquement
dinterrogations, cela ne les plus quand il sagit de modifications dans un contexte multiutilisateurs
car il faut : permettre deux (ou plus) utilisateurs de modifier la mme donne en mme temps
et assurer un rsultat dinterrogation cohrent pour un utilisateur consultant une table pendant
quun autre la modifie.

h)

Scurit des donnes :

Les donnes doivent pouvoir tre protges contre les accs non autoriss. Pour cela, il faut
pouvoir associer chaque utilisateur des droits daccs aux donnes.

i)

Rsistance aux pannes :

Que se passe-t-il si une panne survient au milieu dune modification, si certains fichiers
contenant les donnes deviennent illisibles ? Il faut pouvoir rcuprer une base dans un tat sain .
Ainsi, aprs une panne intervenant au milieu dune modification deux solutions sont possibles : soit
rcuprer les donnes dans ltat dans lequel elles taient avant la modification, soit termin
lopration interrompue.

B. Quelques SGBD connus et utiliss


Il existe de nombreux systmes de gestion de bases de donnes, en voici une liste non
exhaustive :
PostgreSQL: http://www.postgresql.org / dans le domaine public ;
MySQL : http://www.mysql.org / dans le domaine public ;
Oracle : http://www.oracle.com / de Oracle Corporation ;
IBM DB2 : http://www-306.ibm.com/software/data/db2
Microsoft SQL : http://www.microsoft.com/sql
Sybase : http://www.sybase.com/linux

Ralis par :A BENDAOUD

13

II.

SQL server 2008 comme exemple dun SGBDR

Dans Microsoft SQL Server 2008, les composants suivants proposent des fonctionnalits
nouvelles ou amliores. De plus, d'autres technologies offre des fonctionnalits qui s'intgrent
troitement SQL Server 2008.

A.

Composants SQL Server


moteur de base de donnes

Le Moteur de base de donnes est le service central qui permet de stocker, traiter et scuriser les
donnes. Grce au moteur de base de donnes, il est possible de contrler les accs et de traiter
rapidement les transactions pour rpondre aux besoins des applications consommatrices de donnes
les plus exigeantes de votre entreprise.
Utilisez le Moteur de base de donnes pour crer des bases de donnes relationnelles pour le
traitement de transactions en ligne ou des donnes de traitement analytique en ligne (OLAP). Ces
oprations comprennent la cration de tables pour le stockage des donnes, ainsi que les objets de
base de donnes tels que les index, les vues et les procdures stockes pour l'affichage, la gestion et
la scurisation des donnes. Vous pouvez utiliser SQL Server Management Studio pour grer les
objets de base de donnes et Gnrateur de profils SQL Server pour capturer des vnements
serveur.

Analysis Services - Base de donnes multidimensionnelle

Ralis par :A BENDAOUD

14

Microsoft SQL Server Analysis Services Les donnes multidimensionnelles vous permettent de
concevoir, de crer et de manager des structures multidimensionnelles contenant des donnes de
dtail et agrges depuis plusieurs sources de donnes, telles que les bases de donnes
relationnelles, dans un modle logique unifi et unique, pris en charge par les calculs intgrs.
Analysis Services Les donnes multidimensionnelles permettent une analyse rapide, intuitive et
verticale de grandes quantits de donnes construites sur ce modle de donnes unifi, disponible
aux utilisateurs dans plusieurs langages et devises.
Analysis Services Les donnes multidimensionnelles fonctionnent avec les entrepts de
donnes, les mini-Data Warehouse, les bases de donnes de production et les magasins des donnes
oprationnelles, en prenant en charge la fois l'analyse des donnes d'historique et en temps rel.
Analysis Services - Exploration de donnes

Microsoft SQL Server Analysis Services contient les fonctionnalits et les outils dont vous avez
besoin pour crer des solutions d'exploration de donnes complexes.
Ralis par :A BENDAOUD

15

Un jeu d'algorithmes d'exploration de donnes standard.


Le Concepteur d'exploration de donnes qui permet de crer, grer et explorer
des modles d'exploration de donnes, puis de crer des prdictions partir de
ces modles.

Le langage DMX (Data Mining Extensions) que vous pouvez utiliser pour grer des modles
d'exploration de donnes et crer des requtes de prdiction complexes.
Vous pouvez utiliser une combinaison de ces fonctionnalits et de ces outils pour dgager les
tendances et les motifs prsents dans vos donnes, et vous appuyer sur ces informations pour
prendre des dcisions rflchies propos de problmes professionnels complexes.

Integration Services

Microsoft Intgration Services est une plateforme qui permet de crer des solutions de
transformation de donnes et d'intgration de donnes au niveau de l'entreprise. Intgration
Services vous permet de rsoudre des problmes professionnels complexes en copiant ou en
tlchargeant des fichiers, en envoyant des messages lectroniques en rponse des vnements,
en mettant jour des entrepts de donnes, en nettoyant et en explorant des donnes et en grant
des donnes et des objets SQL Server.
Les packages peuvent fonctionner en mode autonome ou de concert avec d'autres packages en
rponse des besoins professionnels complexes. Intgration Services peut extraire et transformer
des donnes partir d'un ventail de sources, tels que des fichiers de donnes XML, des fichiers plats
et des sources de donnes relationnelles, puis charger les donnes dans une ou plusieurs
destinations.
Intgration Services inclut un ensemble riche de tches et de transformations intgres, des outils
pour construire des packages et le service Intgration Services permettant d'excuter et de grer des
packages. Vous pouvez faire appel aux outils graphiques Intgration Services pour crer des
Ralis par :A BENDAOUD

16

solutions sans crire une seule ligne de code. Vous pouvez galement programmer le modle objet
Intgration Services tendu pour crer des packages par programme et des tches personnalises de
code et d'autres objets de package.
Rplication
La rplication repose sur un ensemble de technologies qui permettent de copier et de
distribuer des donnes et des objets de base de donnes d'une base de donnes vers une
autre, puis de synchroniser ces bases de donnes afin de prserver leur cohrence. Avec
la rplication, vous pouvez distribuer des donnes en diffrents emplacements et des
utilisateurs distants ou mobiles sur des rseaux locaux et tendus, des connexions
d'accs distance, des connexions sans fil, et Internet.

La rplication transactionnelle est gnralement utilise dans des scnarios serveur


serveur qui ncessitent un dbit lev, notamment pour l'amlioration de l'volutivit et
de la disponibilit, l'entrept de donnes et la cration de rapports, l'intgration de
donnes depuis plusieurs sites, l'intgration de donnes htrognes et le dchargement
du traitement par lots. La rplication de fusion est conue essentiellement pour les
applications mobiles ou les applications de serveur distribues contenant des conflits de
donnes possibles. Les scnarios courants incluent l'change de donnes avec des
utilisateurs mobiles, les applications de point de vente aux consommateurs (POS,
Consumer Point of Sale) et l'intgration des donnes partir de plusieurs sites. La
rplication de capture instantane est utilise pour fournir le jeu des donnes initiales
pour la rplication transactionnelle et de fusion ; elle peut s'utiliser galement lorsque
des actualisations compltes des donnes sont ncessaires. Avec ces trois types de
rplication, SQL Server fournit un systme souple et puissant de synchronisation des
donnes dans votre entreprise.
Outre la rplication, dans SQL Server 2008, vous pouvez synchroniser des bases de
donnes l'aide de Microsoft Sync Framework et de Sync Services for ADO.NET. Sync
Services for ADO.NET fournit une API intuitive et flexible que vous pouvez utiliser pour
gnrer des applications qui ciblent des scnarios de collaboration et hors connexion.
Pour obtenir une vue d'ensemble de Sync Services for ADO.NET, consultez Microsoft Sync
Framework. Pour obtenir une documentation complte, consultez le site Web MSDN.

Reporting Services

Ralis par :A BENDAOUD

17

Microsoft SQL Server 2008 Reporting Services (SSRS) fournit une gamme complte
d'outils et de services prts l'emploi pour vous aider crer, dployer et grer des
rapports pour votre organisation, ainsi que des fonctions de programmation pour vous
permettre d'tendre et de personnaliser vos fonctionnalits de cration de rapports.

SQL Server 2008 Reporting Services (SSRS) est une plateforme serveur qui fournit des
fonctionnalits compltes de cration de rapports pour diffrentes sources de donnes. Reporting
Services inclut un jeu complet d'outils que vous pouvez utiliser pour crer, grer et remettre des
rapports, et des interfaces de programmation d'application (API) qui permettent aux dveloppeurs
d'intgrer ou d'tendre le traitement des rapports et des donnes dans les applications
personnalises. Les outils Reporting Services fonctionnent au sein de l'environnement Microsoft
Visual Studio et sont totalement intgrs aux outils et composants de SQL Server.
Avec Reporting Services, vous pouvez crer des rapports de type interactif, tabulaire, graphique
ou libre partir de sources de donnes XML, relationnelles et multidimensionnelles.
Vous pouvez publier des rapports, planifier le traitement de rapports ou accder des rapports
la demande. Reporting Services vous permet galement de crer des rapports ad hoc bass sur des
modles prdfinis, et d'explorer des donnes de manire interactive dans le modle. Vous pouvez
slectionner divers formats daffichage, exporter des rapports vers d'autres applications et vous
abonner des rapports publis.
Les rapports que vous crez peuvent tre consults par le biais d'une connexion Internet ou en
tant qu'application Microsoft Windows ou site SharePoint. Reporting Services fournit la cl de vos
donnes de gestion.
Pour plus d'informations sur les autres composants, outils et ressources de SQL Server, consultez
la Documentation en ligne de SQL Server

Service Broker

SQL Server Service Broker fournit la prise en charge native du Moteur de base de donnes SQL
Server pour les applications de messagerie et de mise en file d'attente.
Cette opration permet aux dveloppeurs de crer des applications perfectionnes qui utilisent
des composants du Moteur de base de donnes pour communiquer entre des bases de donnes
disparates. Les dveloppeurs peuvent utiliser Service Broker pour crer facilement des applications
fiables et distribues.

Ralis par :A BENDAOUD

18

Les dveloppeurs d'applications qui utilisent Service Broker peuvent distribuer les charges de
donnes sur plusieurs bases de donnes sans dvelopper des mcanismes de messagerie et de
communication complexes. Il est ainsi possible de rduire le travail de dveloppement et de test
puisque Service Broker gre les chemins de communication dans le contexte d'une conversation. Les
performances sont aussi meilleures.
Par exemple, les sites Web qui prennent en charge des bases de donnes frontales peuvent
enregistrer des informations et mettre les tches intensives en file d'attente dans des bases de
donnes dorsales. Service Broker veille ce que toutes les tches soient gres dans le contexte des
transactions pour garantir la fiabilit et la cohrence technique.

Rsum de la leon

SGBD fonctionnent selon un mode client/serveur


Un SGBDR reoit des requtes de plusieurs clients et ceci de manire
concurrente

SQL server est constitu de plusieurs composants

Moteur de base de donnes

Analyse service, service repport,

intgration service

Rvision de la leon
1. Citer les avantages dun SGBDR
2. Faite une recherche sur les SGBDR connus sur le march
3. Quelle sont les attributions dun gestionnaire de base de donnes

Travaux Dirigs
1. Faite une recherche sur linternet pour faire un rapport sur les avantages de SQL server
Ralis par :A BENDAOUD

19

2008 et les nouveauts qui il a apport par rapport SQLserver 2000

Ralis par :A BENDAOUD

20

Chapitre 2
Matrise des Concepts de base de scurit

Ralis par :A BENDAOUD

21

Chapitre 2
Leon 1 : Matrise des Concepts de base de scurit

Objectifs: vous serez mme d'effectuer les tches


suivantes :

I.

Matrise des Concepts de base de scurit


Choisir entre deux modes dauthentification
Grer les identifiants SQL server
Grer les rles dfinis de serveur

Pourquoi grer les droits ?

La gestion des droits d'une base de donnes est un domaine assez vaste et il existe de nombreux
articles sur le sujet:
scurit : se protger contre les attaques

Les rseaux informatiques sont de plus en plus souvent la cible d'attaques. Si, malgr les protections
mises en place, un individu arrive s'introduire dans votre base de donnes (en volant un mot de
passe ou en se faisant passer pour une autre personne), il faut que son rayon d'action soit le plus
limit possible.
protection : empcher les utilisateurs d'effectuer certaines actions

L'erreur est humaine, c'est un fait, et il peut arriver que des utilisateurs parfaitement habile
utiliser la base de donnes modifient par erreur certaines donnes qui devraient normalement tre
protges. Une gestion correcte des droits permet de se prmunir contre ce genre de dsagrment
en empchant l'excution de certaines tches

confidentialit : restreindre l'accs certaines donnes

Il est inconcevable que l'ensemble des salaris d'une entreprise aient accs aux donnes concernant,
Ralis par :A BENDAOUD

22

par exemple, les salaires. La gestion des droits permet de restreindre la visibilit de certaines
donnes (seules les donnes strictement ncessaires doivent tre accessibles)

II.

Gestion des droits dans le processus de dveloppement


En fait, grer les droits est finalement trs simple si on s'y prend suffisamment tt.

A chaque cration d'un nouvel objet dans la base de donnes (ex: une table), il suffit de suivre les
tapes suivantes :
1. on cre le nouvel objet
2. on fait la liste des rles qui ont besoin d'accder cet objet et on affecte les droits en
consquence.
3. on teste si les personnes concernes ont accs l'objet (ex: peuvent manipuler les lments
de la table Si une exception est leve ce moment l, il manque des droits
Au cours de ce processus, de nouveaux profils d'utilisateurs peuvent apparatre (des utilisateurs
doivent avoir des droits particuliers, que les autres n'ont pas), d'o la ncessit de dfinir de
nouveaux rles (et d'attribuer ces rles diffrents utilisateurs).
Dans la section suivante, nous expliquerons plus en dtails ces diffrentes notions (rles,
utilisateurs...)

A.

Notions de base

Pour accder une base de donnes, un utilisateur utilise une connexion. Un utilisateur
peut tre soit une personne physique, soit une application (script, batch).
Une base contient de nombreux objets (tables, vues, procdures stockes, fonctions). Pour
entreprendre certaines actions sur ces objets (consulter, excuter, modifier) l'utilisateur doit avoir
les privilges (aussi appels droits) ncessaires. L'utilisateur peut obtenir ces droits de manire
directe ou indirecte.
Le principe de base est donc finalement trs simple. La mise en place peut tre un peu plus
complexe, comme nous allons le voir.

B.

Gestion des droits : principes

Dans cette section, nous allons comparer 2 implmentations pour la gestion des droits. Pour que
les exemples soient plus parlant, nous allons considrer une base de donnes avec :

10 utilisateurs aux droits diffrents suivant leur rle


60 tables, vues, procdures stockes

Ralis par :A BENDAOUD

23

Pour prendre conscience des problmes que peut reprsenter une mauvaise gestion des droits,
nous allons imaginer l'implmentation suivante, trs simple (mais trs nave) :

pour chaque objet (table, vue, procdure stocke) on affecte les droits de manire
individuelle chaque utilisateur.

Cette implmentation posera les problmes suivants :

chaque fois que l'on ajoute un objet dans la base, il faut affecter les droits pour chacun des
10 utilisateurs
chaque ajout d'un utilisateur, il faudra affecter les droits sur chacun des 60 objets de la
base de donnes

En rsum, avec une implmentation aussi nave, la gestion des droits est loin d'tre aise.

III.

Implmentation dune stratgie de scurit


A.

Choix du mode dauthentification :

SQL Server 2008 propose deux modes pour lauthentification des accs aux ressources de base de
donnes : lauthentification Windows et lauthentification en mode mixte
Authentification Windows :
Seuls les utilisateurs Windows authentifi peuvent obtenir laccs linstance SQL server. Vous
devez ajouter un identifiant Windows a chaque utilisateur ou groupe Windows qui doit accder a une
instance SQL server cest le mode dauthentification prconis et cest le mode par dfaut, il est
recommander car il permet de tirer profit de toutes les stratgies de scurit centralises de votre
domaine active directory.

Authentification mixte :
dans ce mode, tant les identifiants de Windows que les identifiants SQL server (dont aucun nest
associ un utilisateur du systme dexploitation) peuvent accder a linstance SQL server.
Comment choisir le mode dauthentification ?
Par lintermdiaire de proprits de votre instance SQL server :

Ralis par :A BENDAOUD

24

IV.

Gestion des rles

Considrons l'implmentation suivante :

on dfinit la notion de rle (= groupe d'utilisateurs partageant les mmes droits)


un utilisateur appartient un ou plusieurs rle(s)
pour chaque objet de la base, on affecte les droits aux diffrents rles. Tous les
membres d'un rle donn hriteront des droits du rle

Avec cette implmentation :

chaque fois que l'on ajoute un objet dans la base, il suffit d'affecter les droits
1 rle pour que tous les utilisateurs du rle bnficient des droits d'accs
lorsqu'on cre un nouvel utilisateur, il suffit de l'ajouter 1 groupe d'utilisateurs
(rle) pour qu'il bnficie de tous les droits du rle
pour changer les droits d'un utilisateur, il suffit de changer son appartenance aux
diffrents rles

La gestion des droits devient alors nettement plus facile !

A.

Qu'est-ce qu'un rle exactement ?

Un rle, c'est un ensemble de responsabilits.


Dans une entreprise, les employs ont diverses responsabilits. Chacune de ces responsabilits
s'accompagne d'un certain nombre de tches et l'entreprise doit fournir ses employs les moyens
ncessaires pour accomplir leur mission. Par ailleurs les employs peuvent avoir plusieurs
responsabilits et donc cumuler les tches.

En base de donnes, le principe est similaire : un rle reprsente un ensemble de responsabilits


au sein de l'application. Chacune de ces responsabilits s'accompagne d'un certain nombre de tches
(sous la forme de procdures stockes, par exemple). Pour accomplir ces diffrentes tches, les
membres d'un rle doivent pouvoir accder diffrentes donnes (au travers de vues, procdures
stockes, etc.), ce qui implique d'avoir les droits ncessaires pour accder ces donnes.
Lors de l'analyse, on doit donc identifier :

Ralis par :A BENDAOUD

25

les utilisateurs (users)


les responsabilits (rles)
les tches effectuer et les moyens d'accs aux donnes (procdures stockes,
vue, tables...)

Rle en SQL server 2008

1.

Rle dfinis de serveur :

SQl server dispose dun ensemble de rles prdfinis :

Member name
BulkAdmin
DBCreator
DiskAdmin
ProcessAdmin
SecurityAdmin
ServerAdmin

SetupAdmin
SysAdmin

Description
Executer linstruction BULKINSERT.
Crer et modifier des base de donnes
Grer les fichiers sur le disque
Grer les processus qui sexecutent dans une instance SQL
server
Grer les identifiants de serveur
Configurer des rglages de porte serveur
Ajouter et supprimer des serveurs lis et executer certaines
procedures stockes comme sp_serveroption.
Effectuer toutes activits sur SQL Server.les privilges de ce
rle comprennent toutes ceux des autres rles

La syntaxe fondamentale dajout dun identifiant un rle prdfini et


comme suite :

syntaxe :
EXEC master..sp_addsrvrolemember @loginame = N'cn1', @rolename
=N'setupadmin'
GO

2.

Rles dfinis de base de donnes :

3.

Rle de base de donnes

Il existe des rles prdfinis de base de donnes SQL server Qui sont :

Ralis par :A BENDAOUD

26

Nom du rle au niveau


de la base de donnes

Description

db_owner

Les membres du rle de base de donnes fixe db_owner peuvent effectuer


toutes les activits de configuration et de maintenance sur la base de donnes et
peuvent galement supprimer la base de donnes.

db_securityadmin

Les membres du rle de base de donnes fixe db_securityadmin peuvent


modifier l'appartenance au rle et grer les autorisations. L'ajout d'entits ce
rle pourrait activer une lvation de privilges involontaire.

db_accessadmin

Les membres du rle de base de donnes fixe db_accessadmin peuvent


ajouter ou supprimer l'accs la base de donnes des connexions Windows, des
groupes Windows et des connexions SQL Server.

db_backupoperator

Les membres du rle de base de donnes fixe db_backupoperator peuvent


sauvegarder la base de donnes.

db_ddladmin

Les membres du rle de base de donnes fixe db_ddladmin peuvent


excuter n'importe quelle commande DDL (Data Definition Language) dans une
base de donnes.

db_datawriter

Les membres du rle de base de donnes fixe db_datawriter peuvent


ajouter, supprimer et modifier des donnes dans toutes les tables utilisateur.

db_datareader

Les membres du rle de base de donnes fixe db_datareader peuvent lire


toutes les donnes de toutes les tables utilisateur.

db_denydatawriter

Les membres du rle de base de donnes fixe db_denydatawriter ne


peuvent ajouter, modifier ou supprimer aucune donne des tables utilisateur
d'une base de donnes.

db_denydatareader

Les membres du rle de base de donnes fixe db_denydatareader ne


peuvent lire aucune donne des tables utilisateur d'une base de donnes.

Ladministrateur de serveur peut dfinir ses propres rles par Exemple (cre un rle vendeurs qui
contient tous les vendeurs)

Ralis par :A BENDAOUD

27

1. Rle dapplication

Le rle dapplication est un rle qui limite l'accs utilisateur la base de donnes via des applications
spcifiques. Les rles d'application ne possdent pas d'utilisateurs, si bien que la liste Membres du
rle n'est pas affiche lorsque l'option Rle d'application est slectionne.
Transact SQL

:
syntaxe :

CREATE APPLICATION ROLE application_role_name


WITH PASSWORD = 'password' [ ,
DEFAULT_SCHEMA = schema_name ]

Exemple :
USE [vente] GO
CREATE APPLICATION ROLE [roleApp2] WITH
DEFAULT_SCHEMA=[dbo],PASSWORD=N'azerty'
GO

Ralis par :A BENDAOUD

28

Pour active les autorisations associes un rle d'application dans la base de donnes
active, il faut excuter la procdure sp_setapprole

syntaxe :
sp_setapprole [ @rolename = ] 'role',
[ @password = ] { encrypt N'password' }
|
'password' [ , [ @encrypt = ] { 'none' | 'odbc' } ]
[ , [ @fCreateCookie = ] true | false ]
[ , [ @cookie = ] @cookie OUTPUT ]

Exemple :
exec sp_setapprole roleapp1,'azerty'

B.

Gestion des droits : rgles

Concernant la gestion des droits, quelques rgles sont respecter :


Identifier les rles

Il faut identifier les diffrents rles selon les diffrents utilisateurs de lapplication
Donner le minimum de droits

Pour chaque rle, on ne doit fournir que les droits ncessaires et suffisants l'excution des
diffrentes tches.
Interdire l'accs direct aux tables

Les tables sont le support de donnes et leur contenu ne devrait pas tre accessible directement. Par
exemple, une table "salari" peut contenir des informations personnelles qui ne doivent tre
accessibles qu' un petit groupe d'individus. C'est pourquoi on accde au contenu d'une table au
moyen de vues, procdures stockes, fonctions, etc. Ceci permet galement de spcifier si l'accs
aux donnes se fait en lecture seule ou si elle autorise les modifications.

En rsum, pour accder au contenu d'une table on cre une vue (ou une procdure stocke, ou une
Ralis par :A BENDAOUD

29

fonction) pour laquelle on affecte les droits aux diffrents rles contenant plusieurs utilisateurs. Ceci
permet un meilleur contrle des accs.

Grer les droits le plus tt possible

Plus on gre les droits de manire prcoce, plus cette gestion est aise car l'ajout de droits se fait au
fur et mesure du dveloppement, et non de manire htive la fin.
Au dbut du dveloppement, quelques rles sont clairement identifis et d'autres seront ajouts
par la suite. Idem pour les utilisateurs. A chaque ajout de fonctionnalit dans le programme, on
assigne les droits ncessaires pour son excution (si les droits ne sont pas suffisants, on s'en rend trs
vite compte : une exception est leve). De cette faon, on gre les droits trs facilement et avec un
effort rduit.

Dans la suite de cet article, nous allons dcouvrir comment, dans le cas d'une application .Net au
dveloppement bien avanc, identifier les appels aux objets de la base de donnes (vues, procdures
stockes) en vue d'assigner les droits.

C.

Notions supplmentaires Login/User

En SQL Server, on distingue d'un part la notion de login et d'autre part la notion de user.
Le login, c'est ce qui permet de se connecter un serveur SQL Server.
Cependant un mme serveur peut accueillir plusieurs bases de donnes et dans chacune de ces
bases on dfinit diffrents users pour la gestion des droits. Il est ensuite ncessaire de faire le lien
entre les logins et les users (ce que nous verrons par la suite)
Les transats SQL de cration login /user :
CREATE LOGIN log11 with password ='azerty'
create login [PC-BENDAOUD\Administrateur]
from windows
alter login log11 with password='123'
alter login log11

disable

alter login log11

enable

drop login log11

Crer une connexion log11 avec


mot de passe azerty
Crer une connexion a partir
dun compte utilisateur
Modifier le mot de passe de la
connexion log11
Pour desactiver la connexion
log11
Pour activer la connexion log11
Supprimer la connexion log11

Transact sql gestion utilisateurs (users)


create user alisalem for login log11

Ralis par :A BENDAOUD

Crer
lutilisateur alisalem
partir de la connexion log11

30

create role locataires


exec sp_addrolemember
locataires,alisalem

Pour crer un rle de base de


donnes
Pour ajouter un utilisateur a un
groupe

select * from sys.database_principals

Pour afficher les informations des


utilisateurs

exec sp_who

liste des utilisateurs actuellement


connects

D.

Les Schmas

Lobjectif des schmas est de dissocier les utilisateurs de base de donnes des objets quils vont
tre amens cre, toutefois, les objets ne sont pas laisss tels, ils sont regroups logiquement en
schema.il est ainsi possible de dfinir un schma comme un ensemble logique dobjets lintrieur
dune base de donnes.
Les schmas facilitent le partage dinformation entre plusieurs utilisateurs sans pour autant
perdre au niveau de la securit.par exemple si plusieurs utilisateurs travaillent ensemble sur un
mme projet. ils vont tous se connecter en utilisant leur propre connexion et utilisateur de base de
donnes, ce qui ne les empche pas de travailler sur le mme schma et de partager ainsi les tables,
vues, procdures, fonctions qui sont dfinies sur la base dans le cadre du projet.
Cration dun schma :

Pour crer un schma de base de donnes, il faut se positionner sur la base de donnes
concerne puis dvelopper le nud scurit et se positionner sur le nud schma , slectionner
Nouveau schma.

Ralis par :A BENDAOUD

31

syntaxe :
USE [AdventureWorksDW2008]
GO
CREATE SCHEMA [schema1] AUTHORIZATION [dbo]
GO

Exemple:

achats

ventes
T1

T3

T4

T2

T6
T5

Ici on a deux schmas, schma ventes et achats


Les tables de schma ventes sont ventes.T1, ventes.T2, ventes.T3
Les tables de schma achats sont achats.T4, achats.T5, achats.T6
Pour transfrer la table achats.T4 vers le schma ventes

alter

schema ventes transfer achats.T4

Ralis par :A BENDAOUD

32

ventes

achats

T3

T1

T5
T2

E.

T6

T4

Gestion des permissions au niveau des schmas

Soit le groupe des utilisateurs vendeurs

create role vendeurs


Soit les utilisateurs suivants :

CREATE
CREATE
CREATE
CREATE

USER
USER
USER
USER

[user1]
[user2]
[user3]
[user4]

FOR
FOR
FOR
FOR

LOGIN
LOGIN
LOGIN
LOGIN

[CN1]
[CN2]
[CN3]
[CN4]

Ajouter les utilisateurs user1,user2 dans le groupe vendeurs

GO
EXEC sp_addrolemember N'vendeurs', N'user1'
GO
GO
EXEC sp_addrolemember N'vendeurs', N'user2'
GO
Donner au groupe vendeurs le droit de faire la slection pour les tables du schma
ventes

GO
GRANT SELECT ON SCHEMA::[ventes] TO [vendeurs]
GO
Rvision de la leon
1. Lesquelles des affirmations suivantes relatives aux schemas de base de donnes
sont elles vraies ?
A. Les schmas de base de donnes dfinissent le catalogue de base de
donnes
B. Les schmas regroupent les objets de base de donnes
C. Les schmas regroupent des bases de donnes
D. Les schmas dfinissent le catalogue des tables
2. Lesquelles des instructions suivante permettent-elles de crer un utilisateur de
base de donnes nomm Ali associer a lidentifiant Ali
a. Create user Ali from ali
b. Create user Ali for login Ali
c. Create user Ali for sql_login Ali

Ralis par :A BENDAOUD

33

d. Create user Ali


3. Lesquelles des affirmations suivantes relatives aux rles de base de donnes, sont
elle vraies ? choisissez tous les rponses pertinentes
a. Il est possible dimbriquer des rles de base de donnes
b. Les rles de base de donnes sont prdfinis
c. Vous pouvez ajouter de nouveaux rles de base de donnes
d. Vous pouvez ajouter des rles serveur prdfinis des rles de base de
donnes

Travaux pratiques
Ralisez les travaux pratiques se trouvant dans le dossier document
TP1
TP2

Ralis par :A BENDAOUD

34

Chapitre 2
Leon 2 : gestion des droits et permissions
Objectifs: vous serez mme d'effectuer les tches suivantes

V.

Grer les permissions


Accorder un privilge
Retirer privilge
Interdire lutilisation dun privilge

Gestion des permissions

Ralis par :A BENDAOUD

35

Tous les utilisateurs de base de donnes, y compris guest, appartiennent au groupe public.
Les droits qui vont tre dtaills ci-dessous peuvent bien sr tre accords directement public
Les droits sont organiss de faon hirarchique par rapport aux lments scurisables du serveur
Il est possible de grer lattribution de privilges au niveau du serveur, de la base de donnes, du
schma ou bien directement de lobjet. Ainsi, les privilges peuvent tre accords soit un utilisateur
de base de donnes, soit une connexion.
SQL Server gre les privilges avec trois types de mots cls :
GRANT
REVOKE
DENY

Cest -dire quun privilge peut tre accord(GRANT), ou bien retir (REVOKE) sil a t
accord. Linstruction DENY permet dinterdire lutilisation dun privilge particulier mme si le
privilge en question a t accord soit directement soit par lintermdiaire dun rle

A.

Droit dutilisation dinstructions

Les droits dutilisation des instructions sql pour crer de nouveaux objets au sein de la base sont
des autorisations pour raliser lexcution de certains ordres SQL. un utilisateur qui dispose de tels
droits est capable par exemple de crer ses propres tables, ses procdures.. Laccord de ces droits
peut tre dangereux et comme pour tous les droits, doivent tre accords uniquement lorsque cela
est ncessaire.
Les droits principaux dinstructions disponibles sont :

Create database
Create table
Create procedure
create function
backup database
create view

B.

Autorisations

Ces droits sont administrs au niveau de la base de donnes par lintermdiaire de la


fentre proprits
Exemple :
Le privilge create table est accord lutilisateur de base de donnes Brahim par
lintermdiaire de la boite de proprits de la base :

Ralis par :A BENDAOUD

36

Exemple :
use [AdventureWorksDW2008]
GO
GRANT CREATE TABLE TO [Brahim]
GO

Laccord de privilge seffectu en utilisant linstruction GRANT dont la syntaxe est dtaille cidessous

Syntaxe :
GRANT permission[,] TO utilisateur[,..] [WITH GRANT OPTION]

Nom de la ou les permissions concernes par cette autorisation. Il est galement possible
dutiliser le mot cl ALL la place de citer explicitement la ou les permissions accordes. Toutefois ce
terme ALL ne permet pas daccorder des privilges dexcution de toutes les instructions mais
simplement sur les instructions pour crer des bases de donnes, des tables des procdures, des
fonctions, des vues ainsi que deffectuer des sauvegardes de la base et du journal.
Ralis par :A BENDAOUD

37

Utilisateur :

Nom dutilisateur ou des utilisateurs de base de donnes qui reoivent les permissions
WITH GRANT OPTION :
Si la permission est reue avec ce privilge, alors lutilisateur peut accorder la
permission dautres utilisateurs de base de donnes

A.

Retirer privilges

Il est possible de retirer un privilge qui a t accord une entit de scurit.si le privilge na
pas t accord lentit de scurit, linstruction est sans effet.

Exemple :
use [AdventureWorksDW2008]
GO
REVOKE CREATE TABLE TO [Brahim]
GO

Syntaxe :
REVOKE [GRANT OPTION FOR] permission[,.]
FROM utilisateur[,.]
[CASCADE]

Ralis par :A BENDAOUD

38

B.

Interdire lutilisation dun privilge

Linstruction DENY permet dinterdire un utilisateur lutilisation dun privilge, mme sil en
reoit la permission soit directement, soit par son appartenance un groupe.

Exemple :
use [AdventureWorksDW2008]
GO
DENY CREATE TABLE TO [Brahim]
GO

C.

Gestion des permissions sur les objets

Syntaxe :
GRANT <droits> ON <objet>
TO <usagers>
[WITH GRANT OPTION]

Les privilges sont les clauses qui peuvent tre autorises/retires un utilisateur. Les principales
sont:

DELETE: privilge de supprimer les donnes d'une table


INSERT: privilge d'ajouter des donnes une table
SELECT: privilge d'accder aux donnes d'une table
UPDATE: privilge de mettre jour les donnes d'une table

Important :
Qui peut accorder/retirer des permissions?
L'unique personne pouvant accorder ou retirer des droits sur un lment (table,
vue ou index) est la personne qui l'a cre. Toutefois, il lui est possible de
transmettre ce droit d'accorder/retirer des droits, auquel cas la personne recevant
cet "honneur" aura le droit de transmettre ce "pouvoir" sur ces lments

1.
Ralis par :A BENDAOUD

LACCORD DES PERMISSIONS


39

L'attribution de permissions

La clause GRANT permet d'attribuer des permissions un ou plusieurs utilisateurs sur un ou


plusieurs lments de la base de donnes. La syntaxe de cette clause est la suivante:

GRANT Liste_de_permissions ON Liste_d_objets TO


Liste_d_utilisateurs
[WITH GRANT OPTION];

L'option WITH GRANT OPTION permet de dfinir si l'utilisateur peut lui-mme accorder un autre
utilisateur les permissions qu'on lui accorde sur les lments
Afin d'viter avoir saisir l'ensemble des utilisateurs dans le cas d'une autorisation collective ou
bien de citer l'ensemble des permissions il est possible d'utiliser des mots cls:
Le mot cl PUBLIC en lieu et place de la liste d'utilisateurs permet d'accorder les privilges
sur le ou les objets l'ensemble des utilisateurs
Le mot cl ALL en lieu et place de la liste de permissions permet d'accorder tous les
privilges aux utilisateurs prsents dans la liste
En prcisant entre parenthses un nom de colonne pour un privilge, il est possible de limiter le
privilge la colonne (ou la liste de colonnes) entre parenthses, par exemple:
GRANT UPDATE(Nom,Prenom)
ON Etudiants
TO ALI,FATIMA,AHMED
WITH GRANT OPTION;
L'option WITH GRANT OPTION autorise donc plusieurs utilisateurs accorder des permissions
un mme utilisateur, il y a donc des rgles respecter lors du retraits des permissions un
utilisateur...

2.

RETIRER DES PERMISSIONS

La rvocation de permissions

La clause REVOKE permet de retirer des permissions un ou plusieurs utilisateurs sur un ou


plusieurs lments de la base de donnes. La syntaxe de cette clause est la suivante:

Syntaxe :
REVOKE
[GRANT OPTION FOR] Liste_de_permissions
ON Liste_d_objets
FROM Liste_d_utilisateurs;

Ralis par :A BENDAOUD

40

L'option GRANT OPTION FOR permet de supprimer le droit d'un utilisateur accorder des
permissions un autre utilisateur.
Afin d'viter avoir saisir l'ensemble des utilisateurs dans le cas d'une autorisation collective ou
bien de citer l'ensemble des permissions il est possible d'utiliser des mots cls:
Le mot cl PUBLIC en lieu et place de la liste d'utilisateurs permet de retirer les privilges
sur le ou les objets l'ensemble des utilisateurs
Le mot cl ALL en lieu et place de la liste de permissions permet de retirer tous les
privilges aux utilisateurs prsents dans la liste
En prcisant entre parenthses un nom de colonne pour un privilge, il est possible de limiter la
restriction de privilge la colonne (ou la liste de colonnes) entre parenthses, par exemple:

REVOKE
[GRANT OPTION FOR] UPDATE(Nom,Prenom)
ON Etudiants
FROM PUBLIC

L'attribution et la rvocation de droits pose deux problme:

lorsque l'on retire un droit un utilisateur, il faut que ce droit soit retir aux utilisateurs
auxquels il a accord le droit
un utilisateur peut avoir reu un droit de plusieurs utilisateurs
Il s'agit donc de retirer les droits des utilisateurs l'ayant obtenu de quelqu'un qui ne l'a plus en
prenant en compte le fait qu'il peut l'avoir de plusieurs personnes simultanment...
La clause REVOKE tant impl:mente diffremment selon les SGBDR, il s'agit de consulter la
documentation de celui-ci...
RETIRER LES PERMISSION

Syntaxe :

Simplified syntax for DENY


DENY { ALL [ PRIVILEGES ] }
| permission [ ( column [ ,...n ] ) ] [
,...n ]
[ ON [ class :: ] securable ] TO
principal [ ,...n ]
[ CASCADE] [ AS principal ]

Ralis par :A BENDAOUD

41

conclusion :

les moyens pour faciliter la gestion des droits sont :

dfinition de rles
ajout des droits, cration des rles au fur et mesure du dveloppement
vrification que pour un rle donn, on a bien les droits ncessaires et
suffisants l'excution des diffrentes tches

Rsum de la leon

SQL server gre les privilges avec les trois instruction GRANT,REVOKE et DENY
Les droits dutilisation des instructions sql pour crer de nouveaux objets au sein de la base
sont des autorisations pour raliser lexcution de certains ordres SQL.un utilisateur qui
dispose de tels droits est capable par exemple de crer ses propres tables, ses procdures

Travaux Dirigs
Question cours :
1. Pourquoi utilise t- on les rles en SQL server et donnes un exemple ?
2. Quel est la diffrence entre rle de base de donnes et rle dfinit par utilisateur ?
3. Quelles sont les caractristiques du rle public ?
4. Quel est la diffrence entre connexion (login) et utilisateur (user)
Scurit :
Une socit de vente en ligne, possde une application en ligne, et serveur local sur lequel
se trouve un SGBDR (SQL server 2008)
Les utilisateurs de cette application sont les clients qui peuvent visualiser les prix des produits
et ajouter et modifier sur la table client
Les vendeurs qui peuvent ajouter des commendes, lignes commande et visualiser la table
produit et client
Crer un script de transat SQL qui permet de grer ces permissions

TRAVAIL A FAIRE VOIR RESSSOURCE


TRAVAUX PRATIQUES VOIR :TP1,TP2

Ralis par :A BENDAOUD

42

CHAPITRE 3
Leon1 : Notion de base de donnes
Objectifs : vous serez mme d'effectuer les tches
suivantes :

Ralis par :A BENDAOUD

Notion de base dune base de donnes


Introduction au modle relationnel
Diffrentes oprations appliques sur des relations
Opration projection
Opration restriction
Jointure(equi jointure)

43

I.

Notion de base de donnes


A.

Dfinition

Plus prcisment, on appelle base de donnes un ensemble structur et organis


permettant le stockage de grandes quantits dinformations afin den faciliter
lexploitation (ajout, mise jour, recherche de donnes).
La gestion et laccs une base de donnes sont assurs par un ensemble de
programmes qui constituent le Systme de gestion de base de donnes (SGBD).
Un SGBD est caractris par le modle de description des donnes quil supporte
(hirarchique, rseau, relationnel, objet). Les donnes sont dcrites sous la forme de ce
modle, grce un Langage de Description des Donnes (LDD). Cette description est
appele schma.
Une fois la base de donnes spcifie, on peut y insrer des donnes, les rcuprer,
les modifier et les dtruire. Cest ce quon appelle manipuler les donnes. Les donnes
peuvent tre manipules non seulement par un Langage spcifique de Manipulation des
Donnes (LMD) mais aussi par des langages de programmation classiques.

B.

Conception dune base de donnes

La conception et l'utilisation de bases de donnes relationnelles sur micro-ordinateurs


n'est pas un domaine rserv aux informaticiens. C'est en tout cas ce que pensent
beaucoup d'utilisateurs en voyant ce type de logiciel intgr aux suites bureautiques les
plus connues (Microsoft Office Access).
Cependant la matrise d'un SGBDR micro (Systme de Gestion de Bases de Donnes
Relationnelles) est loin d'tre aussi facile acqurir que celle d'un logiciel de traitement
de texte ou d'un tableur.
Plusieurs tapes sont ncessaires la mise en place d'une base de donnes, ds lors
que l'on a prcisment dfini ses besoins (ce qui n'est dj pas chose facile !) : la
cration de la structure de la base sous forme de tables (tableaux de donnes) relies
entre elles par des donnes cls, la conception des requtes qui permettront d'extraire
ou de mettre jour les informations qu'elle contient , la conception de l'interface
homme-machine (crans et tats) qui rendra plus conviviale la saisie et la restitution des
informations.
Le degr de difficult dans la conception de l'interface varie beaucoup selon le logiciel
utilis qui est d'ailleurs le plus souvent diffrent du SGBDR.
La conception de la structure de la base de donnes, si elle est un peu complexe
apprhender, peut ncessiter en amont, l'utilisation d'outils de modlisation
conceptuels de type entits-associations (Modle Conceptuel des Donnes de la
mthode MERISE ou diagramme de classes du langage UML). Mais, mme dans les cas
les plus simples il faut obligatoirement connatre les concepts du Modle Relationnel,
sans quoi un utilisateur non averti pourra toujours arriver crer une structure
inadapte et sera vite bloqu dans la conception des requtes.
Il s'agit ici, d'tudier les principaux oprateurs de l'algbre relationnelle servant de
base l'laboration et l'analyse (plan d'excution) des requtes.

Ralis par :A BENDAOUD

44

Bon nombre d'utilisateurs qui voient les matriels informatiques et les logiciels
changer tous les trois mois, seraient surpris d'apprendre que l'algbre relationnelle a t
dfinie par Codd en 1970.
Elle est l'origine du langage SQL (Structured Query Language) d'IBM, langage
d'interrogation et de manipulation de tous les SGBDR actuels (Oracle, PostgreSQL,
MySQL, MS SQLServer, MS Access et tous les autres).
Une bonne matrise de l'algbre relationnelle permet de concevoir n'importe quelle
requte aussi complexe soit elle avant de la mettre en uvre l'aide du langage SQL.
Parmi les oprations de l'algbre relationnelle, on dispose d'oprations classiques sur
les ensembles (union, intersection, diffrence, produit cartsien) puis d'oprations
propres (projection, slection, jointure, division).
Sont galement exposes ici des oprations de calcul, de
comptage et de tri, non dfinies l'origine par Codd mais trs utiles.

regroupement, de

Tous les oprateurs sont prsents l'aide d'exemples clairs. Pris sparment, ils sont
faciles apprhender. La rdaction de requtes (combinaison d'oprateurs) est illustre
par des exercices concrets.
Le langage SQL n'est abord que dans le cadre des oprations voques ci-dessus.
Seule l'instruction SELECT et ses multiples aspects sont donc prsents.

C.

Introduction au Modle Relationnel

L'exemple suivant, relatif la gestion simplifie des tapes du Tour de France 97, va nous servir
introduire le vocabulaire li au modle relationnel.
CodeEquipe

NomEquipe

DirecteurSportif

BAN

BANESTO

Eusebio UNZUE

COF

COFIDIS

Cyrille GUIMARD

CSO

CASINO

Vincent LAVENU

FDJ

LA FRANCAISE DES JEUX

Marc MADIOT

FES

FESTINA

Bruno ROUSSEL

GAN

GAN

Roger LEGEAY

ONC

O.N.C.E.

Manolo SAIZ

TEL

TELEKOM

Walter GODEFROOT

...

...

...

NumroCoureur

NomCoureur

CodeEquipe

CodePays

ULLRICH Jan

TEL

ALL

31

JALABERT Laurent

ONC

FRA

61

ROMINGER Tony

COF

SUI

91

BOARDMAN Chris

GAN

G-B

114

CIPOLLINI Mario

SAE

ITA

Ralis par :A BENDAOUD

45

151

OLANO Abraham

...

BAN

ESP

...

...

...

NumroEta

DateEta

VilleDpart

VilleArrive

06-jul-97

ROUEN

FORGES-LES-EAUX

192

07-jul-97

ST-VALERY-EN-CAUX

VIRE

262

08-jul-97

VIRE

PLUMELEC

224

...

...

...

...

pe

Nb
Km

pe

...

NumroCoureur

NumroEtape
8

04:54:33

04:48:21

06:27:47

31

04:54:33

31

04:48:37

31

06:27:47

61

04:48:24

61

06:27:47

91

04:54:33

91

04:48:19

91

06:27:47

114

04:54:44

114

04:48:09

114

06:27:47

151

04:54:33

151

04:48:29

151

06:27:47

...

...

...

CodePays

Ralis par :A BENDAOUD

TempsRalis

NomPays

ALL

ALLEMAGNE

AUT

AUTRICHE

BEL

BELGIQUE

DAN

DANEMARK

ESP

ESPAGNE

FRA

FRANCE

G-B

GRANDE BRETAGNE

ITA

ITALIE

P-B

PAYS-BAS

46

RUS

RUSSIE

SUI

SUISSE

Comme nous pouvons le constater, le modle relationnel est un modle


d'organisation des donnes sous forme de Tables (Tableaux de valeurs) ou chaque
Table reprsente une Relation, au sens mathmatique d'Ensemble.
C'est ainsi que dans l'exemple prsent, figurent l'ensemble des Equipes, des
Coureurs, des Etapes, des Temps raliss par les coureurs chacune des tapes, et enfin
l'ensemble des pays.
Les colonnes des tables s'appellent des attributs et les lignes des n-uplets (o n
est le degr de la relation, c'est dire le nombre d'attributs de la relation).
Un
attribut
ne prend
qu'une
seule valeur pour chaque n-uplet.
L'ordre des lignes et des colonnes n'a pas d'importance.

Chaque table doit avoir une cl primaire constitue par un ensemble


minimum d'attributs permettant de distinguer chaque n-uplet de la Relation
par rapport tous les autres. Chaque ensemble de valeurs formant la cl
primaire d'un n-uplet est donc unique au sein d'une table.
C'est ainsi que dans la table COUREURS, chaque coureur a un NumroCoureur
diffrent.
Dans certains cas, plusieurs cls primaires sont possibles pour une seule table. On
parle alors de cls candidates. Il faut alors en choisir une comme cl primaire.
Les liens smantiques (ou rgles de gestion sur les donnes) existants entre les
ensembles sont raliss par l'intermdiaire de cls trangres faisant elles-mmes
rfrence des cls primaires d'autres tables.
C'est ainsi que dans la table COUREURS, la cl trangre CodeEquipe (faisant
rfrence la cl primaire de mme nom dans la table EQUIPES) traduit les deux rgles
de gestion suivantes :
Un COUREUR appartient une EQUIPE

Une EQUIPE est compose de plusieurs COUREURS


Lien de type plusieur_plusieur
Il existe deux grands types de liens : Un - Plusieurs (comme le prcdent) et
Plusieurs - Plusieurs. La ralisation de ce dernier type de liens, un peu plus
complexe, passe par l'utilisation d'une table intermdiaire dont la cl primaire
est forme des cls trangres des tables qu'elle relie.
C'est ainsi que la table des TEMPS raliss chaque tape par chacun des coureurs exprime les
deux rgles de gestion suivantes :
Un COUREUR participe plusieurs ETAPES
Une ETAPE fait participer plusieurs COUREURS
Ralis par :A BENDAOUD

47

Le modle relationnel est le plus souvent dcrit sous la forme suivante, les cls
primaires tant soulignes et les cls trangres marques par un signe distinctif (ici
par * ou bien #).
EQUIPES (CodeEquipe, NomEquipe, DirecteurSportif)
COUREURS (NumroCoureur, NomCoureur, CodeEquipe*, CodePays*)
ETAPES (NumroEtape, VilleDpart, VilleArrive, NbKm)
TEMPS (NumroCoureur*, NumroEtape*, TempsRalis)
PAYS (CodePays, NomPays)
On peut aussi le reprsenter sous forme graphique, de manire mieux visualiser et
interprter les liens :

Un COUREUR appartient une EQUIPE


Une EQUIPE est compose de plusieurs COUREURS
Un COUREUR est originaire d'un PAYS
Un PAYS est reprsent par plusieurs COUREURS
Un COUREUR participe plusieurs ETAPES
Une ETAPE fait participer plusieurs COUREURS

Ralis par :A BENDAOUD

48

conclusion
Dans le cadre d'un projet d'informatisation, la conception d'une base de
donnes relationnelle passe d'abord par l'identification des objets de gestion
(Coureurs, Etapes, ) et des rgles de gestion du domaine modlis
(interviews des utilisateurs, tude des documents manipuls, des fichiers
existants, ). Une fois nonces et valides, ces rgles nous conduisent
automatiquement la structure du modle relationnel correspondant.

II.

Diffrentes Oprations appliques sur les relations


A.

Opration PROJECTION

Syntaxe :
Formalisme : R = PROJECTION (R1, liste des attributs)

Exemple : coureurs

NumroCoureur

NomCoureur

CodeEquipe

CodePays

ULLRICH Jan

TEL

ALL

31

JALABERT Laurent

ONC

FRA

61

ROMINGER Tony

COF

FRA

91

BOARDMAN Chris

GAN

G-B

114

CIPOLLINI Mario

SAE

ITA

151

OLANO Abraham

BAN

ALL

...

...

...

...

CodePays

R1 = PROJECTION (coureurs, codePays)

ALL
FRA
B-G
ITA

Ralis par :A BENDAOUD

49

Cet oprateur ne porte que sur 1 relation.


Il permet de ne retenir que certains attributs spcifis d'une relation.
On obtient tous les n-uplets de la relation l'exception des doublons.

B.

Opration PROJECTION EN langage SQL


Syntaxe :
SELECT DISTINCT liste d'attributs FROM table ;
SELECT liste d'attributs FROM table ;

Exemple :
SELECT DISTINCT codePays FROM Coureurs ;
SELECT DISTINCT NomCoureur, codePays FROM Coureurs;

C.

Opration RESTRICTION

Syntaxe :
Formalisme : R = SELECTION (R1, condition)

Exemple : R3 = SELECTION (Coureurs, codePays = "FRA")

Ralis par :A BENDAOUD

50

NumroCoure

NomCoureur

CodeEquipe

CodePays

ur
31

JALABERT Laurent

ONC

FRA

61

ROMINGER Tony

COF

FRA

Cet oprateur porte sur une relation.


Il permet de ne retenir que les n-uplets rpondant une condition exprime l'aide des
oprateurs arithmtiques (=, >, <, >=, <=, <>) ou logiques de base (ET, OU, NON).
Tous les attributs de la relation sont conservs.
Un attribut peut ne pas avoir t renseign pour certains n-uplets. Si une condition de slection
doit en tenir compte, on indiquera simplement : nomattribut "non renseign

SELECT * FROM table WHERE condition;

Exemple :
SELECT * FROM Coureurs WHERE CodePays=FRA;

La condition de slection exprime derrire la clause WHERE peut tre spcifie


l'aide :
des oprateurs de comparaison : =, >, <, <=, >=, <>
des oprateurs logiques : AND, OR, NOT
des oprateurs : IN, BETWEEN, LIKE, IS, ALL
Autres exemples :
Soit la table ETUDIANT(NEtudiant, Nom, Age, CodePostal, Ville)
SELECT *
FROM ETUDIANT
WHERE Age IN (19, 20, 21, 22, 23) ;
Affiche la lise des tudiants qui ont un ge appartenant a lensemble (19,20,21,22,23)

Ralis par :A BENDAOUD

51

SELECT *
FROM ETUDIANT
WHERE Age BETWEEN 19 AND 23 ;
La liste des tudiants qui ont un ge compris entre 19 et 23
SELECT *
FROM ETUDIANT
WHERE CodePostal LIKE '42%' ;

// sous Access : LIKE "42*"

Affiche la liste des tudiants qui ont un codePoste qui commence par 42

SELECT *
FROM ETUDIANT
WHERE CodePostal LIKE '42___' ;

// sous Access : LIKE "42???"

Affiche la liste des tudiants qui ont un codePoste qui commence par 42 suivis par 3 caractres

SELECT *
FROM ETUDIANT
WHERE Ville IS NULL ;
// Etudiants pour lesquels la ville n'est pas renseigne
SELECT *
FROM ETUDIANT
WHERE Ville IS NOT NULL ;
// Etudiants pour lesquels la ville est renseigne
SELECT *
FROM ETUDIANT
WHERE Age >= ALL (SELECT Age FROM ETUDIANT) ;
//Affiche la liste des tudiant les plus gs

D.

Opration JOINTURE (qui-jointure)

Formalisme : R = JOINTURE (R1, R2, condition d'galit entre attributs)


Exemple :

Ralis par :A BENDAOUD

52

PRODUIT

DETAIL_COMMANDE

CodePrd

Libell

Prix unitaire

Ncde

CodePrd

quantit

590A

HD 1,6 Go

1615

97001

590A

588J

Scanner HP

1700

97002

515J

515J

LBP 660

1820

97003

515J

Syntaxe :
R = JOINTURE (PRODUIT,
DETAIL_COMMANDE,Produit.CodePrd=Dtail_Commande.CodePrd)

A.CodePrd

Libell

Prix unitaire

Ncde

B.CodePrd

quantit

590A

HD 1,6 Go

1615

97001

590A

515J

LBP 660

1820

97002

515J

515J

LBP 660

1820

97003

515J

Cet oprateur porte sur 2 relations qui doivent avoir au moins un attribut dfini dans le
mme domaine (ensemble des valeurs permises pour un attribut).
La condition de jointure peut porter sur l'galit d'un ou de plusieurs attributs dfinis dans le
mme domaine (mais n'ayant pas forcment le mme nom).
Les n-uplets de la relation rsultat sont forms par la concatnation des n-uplets des
relations d'origine qui vrifient la condition de jointure.

Remarque :

Des jointures plus complexes que l'quijointure peuvent tre ralises en


gnralisant l'usage de la condition de jointure d'autres critres de comparaison
que l'galit (<,>, <=,>=, <>)

Ralis par :A BENDAOUD

53

E.

Opration JOINTURE (qui-jointure)

En SQL, il est possible d'enchaner plusieurs jointures dans la mme instruction


SELECT.
En SQL de base :

Syntaxe :
SELECT * FROM table1, table2, table3, ...
WHERE table1.attribut1=table2.attribut1 AND table2.attribut2=table3.attribut2
AND ...;

Exemple :
SELECT * FROM Produit, Dtail_Commande
WHERE Produit.CodePrd=Dtail_Commande.CodePrd ;
ou en utilisant des alias pour les noms des tables :
Exemple :
SELECT * FROM Produit A, Dtail_Commande B
WHERE A.CodePrd=B.CodePrd ;

Avec la clause INNER JOIN (jointure dite interne) partir du SQL2, supporte aujourd'hui par
tous les SGBDR :

Syntaxe :
SELECT * FROM table1 INNER JOIN table2 ON table1.attribut1=table2.attribut1
INNER JOIN table3 ON table2.attribut2=table3.attribut3... ;
Ralis par :A BENDAOUD

54

Le mot cl INNER est facultatif sur la plupart des SGBDR (sauf MS Access).
Cette notation rend plus lisible la requte en distinguant clairement les conditions de jointures,
derrire ON, et les ventuelles conditions de slection ou restriction, derrire WHERE.
De plus, l'oubli d'un ON (et donc de la condition de jointure) empchera l'excution de la requte,
alors qu'avec l'ancienne notation, l'oubli d'une condition de jointure derrire WHERE, n'empche pas
l'excution de la requte, produisant alors un bien coteux produit cartsien entre les tables !
Le mme exemple que prcdemment en utilisant aussi les alias :

Exemple :
SELECT
FROM Produit A INNER
A.CodePrd=B.CodePrd ;

JOIN

Dtail_Commande

*
ON

En SQL2, outre la jointure classique (dite jointure interne), apparaissent


les jointures externes.
On retiendra notamment les jointures externes Gauche (LEFT OUTER JOIN) et
Droite (RIGHT OUTER JOIN).
Dans le cas d'une jointure externe gauche A->B, toute les lignes de la table A sont
incluses mme s'il ne leur correspond pas de ligne dans la table B.
Sur l'exemple prcdent :
Exemple :
SELECT
FROM Produit A LEFT
A.CodePrd=B.CodePrd ;

OUTER

JOIN

Dtail_Commande

*
ON

Le rsultat renvoy est le suivant :


A.CodePrd

Libell

Prix unitaire

Ncde

B.CodePrd

quantit

590A

HD 1,6 Go

1615

97001

590A

588J

Scanner HP

1700

NULL

NULL

NULL

515J

LBP 660

1820

97002

515J

Ralis par :A BENDAOUD

55

515J

LBP 660

1820

97003

515J

Tous les produits apparaissent mme si certains n'ont pas fait l'objet de commande (exemple :
588J). Les colonnes manquantes sont alors compltes par des valeurs NULL.

III.

Manipulation des vues


A.

Dfinition

une vue c est un objet de sql server 2008,elle est quivalente a une tables virtuelle
elle est base sur une requte sql select
syntaxe de cration
create view v1 as SELECT * FROM Produit A, Dtail_Commande B
WHERE A.CodePrd=B.CodePrd ;
comme on peut la cre on utilisant lassistant

Travaux pratiques
DEFINIR LES JOINTURES AVEC SSMS
COMMENT SAUVEGARDER UNE BASE DE DONNEES

Ralis par :A BENDAOUD

56

Chapitre 3 :
Leon2 : les oprations ensemblistes

Objectifs : vous serez mme d'effectuer les tches


suivantes

Ralis par :A BENDAOUD

Opration union
Opration intersection
Opration Diffrence
Opration produit cartsien
Opration division
Opration tri

57

I.

Les oprations ensemblistes

Uni
on

Intersectio

Diffrence

Produit
Cartsien

n
A

B
X
C

A
=

1
A
2
B
1

Select *

Select * From A

Select * From A

From A

Where Exists

Where Not Exists

Union

( Select * from B

( Select * from B

Select *

Where Ai=Bi )

Where Ai=Bi )

B
Slect * From A,
2B
C
1
C
2

From B

Projection
Restriction
Ralis par :A BENDAOUD

Division
58

Jointure
A

A 1 W 1

A
1

A.

Opration UNION

Formalisme : R = UNION (R1, R2)

n enseignant

nom_enseignant

E1 : Enseignants
lus
au CA
1
DUPONT

nenseignant

nom_enseignant

E2 : Enseignants
reprsentants
syndicaux
1
DUPONT

DURAND

MARTIN

MARTIN

MICHEL

BERTRAND

On dsire obtenir l'ensemble des enseignants lus au CA ou reprsentants syndicaux.


R1 = UNION (E1, E2)
nenseignant
1

Ralis par :A BENDAOUD

nom_enseignant
DUPONT

59

DURAND

MARTIN

BERTRAND

MICHEL

Cet oprateur porte sur deux relations qui doivent avoir le mme (schema) nombre
d'attributs dfinis dans le mme domaine (ensemble des valeurs permises pour un
attribut). On parle de relations ayant le mme schma.
La relation rsultat possde les attributs des relations d'origine et les n-uplets de
chacune, avec limination des doublons ventuels

B.

Opration UNION avec transact SQL


Syntaxe :

SELECT liste d'attributs FROM table1


UNION
SELECT liste d'attributs FROM table 2 ;

Exemple :
SELECT nenseignant, NomEnseignant FROM E1
UNION
SELECT nenseignant, NomEnseignant FROM E2 ;

C.

Opration INTERSECTION

Formalisme : R = INTERSECTION (R1, R2)


Exemple :
E1 : Enseignants lus au CA
n enseignant
1

nom_enseignant
DUPONT

Ralis par :A BENDAOUD

E2 : Enseignants reprsentants syndicaux


nenseignant
1

nom_enseignant
DUPONT

60

DURAND

MARTIN

MARTIN

MICHEL

BERTRAND

On dsire connatre les enseignants du CA qui sont des reprsentants syndicaux.

R2 = INTERSECTION (E1, E2)


nenseignant

nom_enseignant

DUPONT

MARTIN

Cet oprateur porte sur deux relations de mme schma.


La relation rsultat possde les attributs des relations d'origine et les n-uplets
communs chacune.

D.

Opration INTERSECTION en langage SQL

En SQL de base, plusieurs possibilits :

Ralis par :A BENDAOUD

61

Syntaxe :

SELECT attribut1, attribut2, ... FROM table1


WHERE attribut1 IN (SELECT attribut1 FROM table2) ;

SELECT attribut1, attribut2, ... FROM table1


WHERE EXISTS (SELECT * FROM table2 WHERE
table1.attribut1=table2.attribut1)
SELECT attribut1, attribut2, ... FROM table1
WHERE attribut1 = ANY (SELECT attribut1 FROM table2) ;

ou avec l'oprateur INTERSECT (SQL2) :


Syntaxe :

SELECT attribut1, attribut2, ... FROM table1


INTERSECT
SELECT attribut1, attribut2, ... FROM table2 ;

ou avec une qui-jointure :

Syntaxe :

SELECT attribut1, attribut2, ... FROM table1 INNER JOIN table2 ON


table1.attribut1 = table2.attribut1 ;

Exemple :
SELECT nenseignant, NomEnseignant FROM E1
WHERE nenseignant IN (SELECT nenseignant FROM E2) ;

ou
Exemple :
Ralis par :A BENDAOUD

62

SELECT nenseignant, NomEnseignant FROM E1


INTERSECT
SELECT nenseignant, NomEnseignant FROM E2 ;

E.

Opration DIFFERENCE

Formalisme : R = DIFFERENCE (R1, R2)


Exemple :
E1 : Enseignants lus au CA
n enseignant

E2 : Enseignants reprsentants syndicaux

nom_enseignant

nenseignant

nom_enseignant

DUPONT

DUPONT

DURAND

MARTIN

MARTIN

MICHEL

BERTRAND

On dsire obtenir la liste des enseignants du CA qui ne sont pas des reprsentants
syndicaux.
R3 = DIFFERENCE (E1, E2)
nenseignant

nom_enseignant

DURAND

BERTRAND

Cet oprateur porte sur deux relations de mme schma.


La relation rsultat possde les attributs des relations d'origine et les n-uplets de la
premire relation qui n'appartiennent pas la deuxime.
Attention ! DIFFERENCE (R1, R2) ne donne pas le mme rsultat que
DIFFERENCE (R2, R1)

Ralis par :A BENDAOUD

63

F.

Opration DIFFERENCE avec langage SQL

En SQL de base, plusieurs possibilits :

Syntaxe :

SELECT attribut1, attribut2, ... FROM table1


WHERE attribut1 NOT IN (SELECT attribut1 FROM table2) ;

Syntaxe :

SELECT attribut1, attribut2, ... FROM table1


WHERE NOT EXISTS (SELECT * FROM table2 WHERE
table1.attribut1=table2.attribut1) ;

Syntaxe :

SELECT attribut1, attribut2, ... FROM table1


WHERE attribut1 <> ALL (SELECT attribut1 FROM table2) ;

ou avec l'oprateur EXCEPT (SQL2) :

Syntaxe :

SELECT attribut1, attribut2, ... FROM table1


EXCEPT
SELECT attribut1, attribut2, ... FROM table2 ;

ou encore, avec la jointure externe (SQL2),


si par exemple vous utilisez une version de MySQL qui ne dispose ni du EXCEPT, ni de la possiblit
de SELECT imbriqus :

Syntaxe :

Ralis par :A BENDAOUD

64

SELECT table1.attribut1, table1.attribut2,...


FROM table1 LEFT JOIN table2 ON table1.attribut1 = table2.attribut1
WHERE table2.attribut1 IS NULL ;

Exemple :
SELECT
nenseignant,
NomEnseignant
FROM
WHERE nenseignant NOT IN (SELECT nenseignant FROM E2) ;

E1

Ou

Exemple :
SELECT nenseignant, NomEnseignant FROM E1
EXCEPT
SELECT nenseignant, NomEnseignant FROM E2 ;

ou encore
Exemple :
SELECT E1.nenseignant, E1.NomEnseignant
FROM E1 LEFT JOIN E2 ON E1.nenseignant = E2.nenseignant
WHERE E2.nenseignant IS NULL ;

Pour mieux comprendre cette dernire version, voici le rsultat renvoy par la
jointure externe gauche entre E1 et E2 :
E1.nenseignant

E1.NomEnseignant

E2.nenseignant

DUPONT

DURAND

NULL

MARTIN

BERTRAND

Ralis par :A BENDAOUD

NULL

E2.NomEnseignant
DUPONT
NULL
MARTIN
NULL

65

G.

Opration PRODUIT CARTESIEN

Formalisme : R = PRODUIT (R1, R2)


Exemple :
Etudiants
ntudiant

Epreuves

nom

libell preuve

coefficient

101

DUPONT

Informatique

102

MARTIN

Mathmatiques

Gestion financire

Examen = PRODUIT (Etudiants, Epreuves)


ntudiant

nom

libell preuve

coefficient

101

DUPONT

Informatique

101

DUPONT

Mathmatiques

101

DUPONT

Gestion financire

102

MARTIN

Informatique

102

MARTIN

Mathmatiques

102

MARTIN

Gestion financire

Cet oprateur porte sur deux relations.


La relation rsultat possde les attributs de chacune des relations d'origine
et ses n-uplets sont forms par la concatnation de chaque n-uplet de la
premire relation avec l'ensemble des n-uplets de la deuxime.

1.

Opration PRODUIT CARTESIEN langage SQL


Syntaxe :

SELECT * FROM table1, table2 ;

Ralis par :A BENDAOUD

66

Remarque : pour avoir un produit cartsien on ne met pas la clause de jointure

Exemple :

SELECT * FROM Etudiants, Epreuves ;

Pour SQL server 2008 on peut utiliser CROSS JOIN

Syntaxe :

SELECT dbo.EMPLOYE.IdEmp, dbo.EMPLOYE.Nom, dbo.EMPLOYE.salaire,


dbo.DEPARTEMENT.NomDep
FROM
dbo.DEPARTEMENT CROSS JOIN
dbo.EMPLOYE

H.

Opration Division

La division seffectue sur deux tables (Dividende, Diviseur) possdant des colonnes champ
commun. Elle permet de rpondre la question suivante : quels sont tous les lments dune table
qui sont associs tous les lments dune autres table. (Exprime Pour tous les )

Exemple :
Quelles sont les commandes concernant tous les articles ?

Ligne de COM

Article

Numcmd

Codart

Codart

1080

CS30

CS10

1050

CS10

CS20

1070

CS10

CS30

Ralis par :A BENDAOUD

67

1050

CS20

1070

CS20

1021

CS10

1050

CS30

1021

CS20

1070

CS30

Ligne de Com DIV Article


Numcmd
1050
1070

Rponse :

Select Numcmd from LC as LC1 Where


Not exists (Select Codart from article Where
Not exists ( Select * from LC LC2 Where
LC1.Numcmd= LC2.Numcmd
And LC1.Codart= LC2.Codart ) )

I.

Opration TRI

Cette opration permet de faire le tri du jeu denregistrement qui est retourn par select

Syntaxe :
SELECT attribut1, attribut2, attribut3, ...
FROM table
ORDER BY attribut1 ASC, attribut2 DESC, ... ;

Ralis par :A BENDAOUD

68

ASC : par ordre croissant (Ascending)


DESC : par ordre dcroissant (Descending)

Exemple :
SELECT * FROM EMPLOYE ORDER BY NON DESC

100
104
101

MOUHAMMED
MED FADEL
FATIMA

CHEF
DIRECTEUR
SECRETAIR

9000
12000
7000

10
12
10

DIRECTEUR
CADRE

9900
11000

11
12

E
102
103

BRAHIM
AHMED SALEM

Remarque : par dfaut le tri se fait par ordre croissant si l'on ne prcise pas ASC ou
DESC.

1. Exercice d'application
Exercice dapplication N1 :

Soit le modle relationnel suivant relatif une base de donnes sur des
reprsentations musicales :
REPRESENTATION (nreprsentation, titre_reprsentation, lieu)
MUSICIEN (nom, nreprsentation*)
PROGRAMMER (date, nreprsentation*, tarif)
Remarque : les cls primaires sont soulignes et les cls trangres sont marques
par *
Questions :
1 - Donner la liste des titres des reprsentations.
2 - Donner la liste des titres des reprsentations ayant lieu l'opra Bastille.
3 - Donner la liste des noms des musiciens et des titres des reprsentations
auxquelles ils participent.

Ralis par :A BENDAOUD

69

4 - Donner la liste des titres des reprsentations, les lieux et les tarifs pour la
journe du 14/09/96.

Ralis par :A BENDAOUD

70

Chapitre 4
Leon 1 : Langage de dfinition des donnes

Objectifs: A la fin de cette leon, vous saurez

Crer des tables


Dfinir les types de donnes
Les tableaux temporaires

Ralis par :A BENDAOUD

71

I.

Les types de donnes

Un type de donnes limite le type des donnes qui peuvent tre stockes dans une colonne et,
dans certains cas, limite la plage des valeurs acceptables de la colonne. Le type de donne choisi
pour une colonne est la plus importante des dcisions que vous prenez quant a votre base de
donnes.si vous choisissez un type de donnes trop restrictif, les applications ne pourront pas
stocker des donnes quelles sont censes traiter, ce qui mne un travail de conception norme,
en revanche si le type de donnes est trop laxiste, vous consommez trop despace mmoire
Il existe sept catgories de types de donnes en sql server
Numrique exact (stock des numrique prcis avec ou sans dcimal)
Numrique approximatif (stock des valeurs numrique avec ou sans dcimal)
Montaire (stock des valeurs avec des dcimales prcision 4 dcimales)
Date &heure (stock des informations de date et/ou dheure et permet de contraintes
chronologique refus dun 30 fvrier)
Caractre (stock des valeurs fondes sur des caractres de longueur variable)
Binaire (stock des donnes binaires 0 ou1)
But spcial (type de donnes complexe comme XML)

TYPE

Member name

Description

BigInt

A 64-bit signed integer.

Decimal

A fixed precision and fixed scale numeric value between -1038 -1 and +1038 1.

numrique
exect

numriq
ue
approximati
fs

A 32-bit signed integer.

Int

A fixed precision and fixed scale numeric value between -1038 -1 and +1038 -

Numeric

1.
SmallInt

A 16-bit signed integer.

TinyInt

An 8-bit unsigned integer.

Float
Real

An 8-byte floating point number within the range of -1.79E +308 through
1.79E +308.
A 4-bit floating point number within the range of -3.40E +38 through 3.40E
+38.

Money

montaires

date/heure

A Decimal system object value that specifies a currency value ranging from 263 (or -922,337,203,685,477.5808) to 2 63 -1 (or
+922,337,203,685,477.5807) with an accuracy of 1 in 10,000 of a currency
unit.
SmallMoney
A Decimal system object value that specifies a currency value ranging from 214,748.3648 to +214,748.3647 with an accuracy of 1 in 10,000 of a currency
unit.
DateTime
A DateTime system object value that specifies a date and time between
January 1, 1753 and December 31, 9999 to an accuracy of 3.33 milliseconds.
SmallDateTim
A DataTime system object value that specifies a date and time between
e
January 1, 1900 and June 6, 2079 to an accuracy of one minute.
Date
Date object represents any valid Gregorian calendar date between '0001-0101' CE and '9999-12-31' CE.
DateTime2
DateTime2 is considered an extension of the existing DATETIME object with
a large date range and large default fractional precision. Values that represent
any valid Gregorian calendar date between 0001-01-01 CE and 9999-12-31
CE combined with any valid time of day based on a 24-hour clock.
DateTimeOffs
DateTimeOffset returns valid Gregorian calendar date between `0001-01-01
et
and 9999-12-31 with any valid time of day based on a 24 hour format between
00:00:00 and max 23:59:49.9999999. Included in the DateTimeOffset is a
time zone offset that must be between -14:00 and +14:00.

Ralis par :A BENDAOUD

72

Time
Timestamp
Char
NText
NVarChar
NVarCharMax

caractres

Text
VarChar
VarCharMax
NChar
Binary

binaire

A variable-length byte array of non-Unicode (256 code page) data with a maximum
length of 231 -1 (or 2,147,483,647) characters.
A variable-length byte array of non-Unicode (256 cod epage) characters ranging
between 1 and 2^64 characters.
A VARCHAR(MAX) type.
A fixed-length byte array of Unicode characters ranging between 1 and 4,000
characters.
A fixed-length byte array ranging between 1 and 8,000 bytes.
A variable-length byte array ranging from 0 to 231 -1 (or 2,147,483,647) bytes.

VarBinary

A variable-length byte array ranging between 1 and 2^64 bytes.

VarBinaryMax

A VARBINARY(MAX) type.

Bit

An unsigned bit value that can be 0, 1, or a null reference.

Geometry
Variant
Xml

II.

A variable-length byte array of Unicode data with a maximum length of 230 - 1 (or
1,073,741,823) characters.
A variable-length byte array of Unicode characters ranging between 1 and 2^63
characters.
The NVARCHAR(MAX) type.

Image

Geography

spcialis
s

Time object returns values for any valid time of day based on a 24 hour
clock between '00:00:00' and max '23:59:59:9999999'.
An automatically generated byte array value, which is guaranteed to be
unique within a database.
A fixed-length byte array of non-Unicode (256 code page) characters ranging
between 1 and 8,000 characters.

Geography spatial type represents data in a round-earth coordinate system. The SQL
Server geography data type stores ellipsoidal (round-earth) data, such as GPS latitude
and longitude coordinates..
Geography spatial type represents data in a Euclidean (flat) coordinate system.
A special data type that can contain numeric, string, binary, date data, and the SQL
Server values Empty and Null. This data type is assumed if no other type is declared.
An XML data type.

Cration des tables

Lordre CREATE TABLE permet de crer une table en dfinissant le nom et le type de chaque
colonnes de la table .
Syntaxe :
CREATE TABLE nom_table
(colonne1
type1,
Colonne2
type2,
.

..)

nom_table
est le nom de la tablecolonne1,colonne2.sont les noms des colonnes
type1,type2.sont les types des donnes, qui seront contenu dans les colonnes.
On peut ajouter aprs la description dune colonne loption NOT NULL qui interdira que cette
colonne contienne une valeur null.on peut aussi ajouter des contraintes dintgrits.

Ralis par :A BENDAOUD

73

Exemple :
CREATE TABLE Article
(ref char(10) NOT NULL ,
prix numeric(18,2),
dateMaj Datetime )

A.

Les tables temporaires :

Un tableau temporaire, est une structure temporaire de table .elle peut tre globale ou locale et
peut tre cre par nimporte quel utilisateur. Toutes les tables temporaires sont cres dans la
base de donnes tempdb.
Une table temporaire nest visible que pour lutilisateur qui la cre et seulement a lintrieur de
la connexion qui a t employ pour la cration de la table. En revanche les tables temporaires sont
dtruites automatiquement lorsque la connexion laquelle elles sont associes est ferme.
Pour crer une table temporaire locale il faut prcder le nom de la table par un #

Syntaxe :
Create table #ligne_comme
(code int, datecom datetime,codeCl int)

Alors que , les tables temporaires globales sont visible pour tous les utilisateurs de linstance SQL
elles sont dtruites lorsque la dernire connexion est ferme.

Syntaxe :
Create table ##ligne_comme
(code int, datecom datetime, codeCl int)

Rsum de la leon

Les tables, llment de construction fondamental de toutes bases de donnes


Pour procurer une table la structure ncessaire, vous devez choisir pour les colonnes
entre les types de donnes numeriques,texte, date/heure et binaires afin de stocker
correctement les donnes
Une fois une table est dfinie, vous devez accorder des permissions sur cette table pour
permettre aux utilisateurs de rcuprer et de manipuler des donnes

Ralis par :A BENDAOUD

74

Travaux pratiques
COMMENT CREER UN SCRIPT DE CREATION DUNE BASE DE
DONNEES SOUS SQL SERVER 2008
METHODE PEDAGOGIQUE : UTILISER UN DIDACTICIEL
VOIR VIDEO sur le site :bendaoud.unblog.fr

Ralis par :A BENDAOUD

75

Chapitre 4
Leon 2 : mise en uvre des contraintes
Objectifs: A la fin de cette leon, vous saurez

Crer des contraintes


NULL / NOT NULL
Default
Primary key
Foreign key
Check
unique
Modifier un tableau (Alter table)

I.

Les contraintes de colonnes (verticales)


Une colonne peut donc recevoir les contraintes suivantes :

NULL / NOT NULL : prcise si une valeur doit obligatoirement tre saisie dans la colonne ou
non
DEFAULT : valeur par dfaut qui est place dans la colonne lors des insertions et de certaines
oprations particulires, lorsque l'on a pas donn de valeur explicite la colonne
COLLATE : prcise la squence de collation, c'est dire l'ordre des caractres pour le tri et les
ventuelles confusions possible (minuscules/majuscules, caractres diacritiques distinct ou
non).
PRIMARY KEY : prcise si la colonne est la clef de la table. ATTENTION : ncessite que la
colonne soit NOT NULL
UNIQUE : les valeurs de la colonne doivent tre unique ou NULL, c'est dire qu' l'exception
du marqueur NULL, il ne doit jamais y avoir plus d'une fois la mme valeur (pas de doublon)
CHECK : permet de prciser un prdicat qui acceptera la valeur s'il est valu vrai
FOREIGN KEY : permet, pour les valeurs de la colonne, de faire rfrence des valeurs
prexistantes dans une colonne d'une autre table. Ce mcanisme s'appelle intgrit
rfrentielle

Ralis par :A BENDAOUD

76

Remarque :

dans un tableau ces contraintes peuvent tre places plusieurs fois, l'exception
de la contrainte de clef PRIMARY KEY qui ne peut tre cre qu une seule fois .

Lorsqu'au cours d'un ordre SQL d'insertion, de modification ou de suppression, une contrainte
n'est pas vrifie on dit qu'il y a "violation" de la contrainte et les effets de l'ordre SQL sont
totalement annul (ROLLBACK).

A.

Obligatoire ([NOT] NULL)

On peut rendre la saisie d'une colonne obligatoire en apposant le mot clef NOT NULL. Dans ce cas,
il ne sera jamais possible de faire en sorte que la colonne soit vide. Autrement dit, la colonne devra
toujours tre renseigne lors des ordres d'insertion INSERT et de modification UPDATE.
Si l'on dsire que la colonne puisse ne pas tre renseigne (donc accepter les marqueurs NULL), il
n'est pas ncessaire de prciser le mot clef NULL, mais il est courant qu'on le fasse par facilit de
lecture.

Exemple :
CREATE TABLE T_PERSONNE1
(PRS_ID
INT
NOT NULL,
PRS_NOM
VARCHAR(32) NOT NULL,
PRS_PRENOM
VARCHAR(32) NULL,
PRS_DATE_NAISSANCE DATE)

Cre une table dont les colonnes PRS_ID et PRS_NOM doivent obligatoirement tre renseigns.

Exemple : insertion et modification acceptes


INSERT INTO T_PERSONNE1 VALUES (1, 'DUPONT', NULL, NULL)
INSERT INTO T_PERSONNE1 (PRS_ID, PRS_NOM) VALUES (2, 'DURAND')

Ralis par :A BENDAOUD

77

Exemple : insertion et modification refuses


INSERT INTO T_PERSONNE1 VALUES (3, NULL, 'Marcel', NULL)
INSERT INTO T_PERSONNE1 (PRS_ID, PRS_PRENOM) VALUES (4, 'Jean')

Important :

les colonnes concourantes la dfinition d'une clef de table doivent


imprativement possder une contrainte NOT NULL.

I.

Mise en uvre des contraintes

A.

Valeur par dfaut (DEFAULT)

La contrainte DEFAULT permet de prciser une valeur qui sera automatiquement insre en
l'absence de prcision d'une valeur explicite dans un ordre d'insertion. Certains autres ordres SQL,
comme la gestion de l'intgrit rfrentielle peuvent faire rfrence cette valeur par dfaut. Seule
une valeur explicite, un marqueur NULL ou la valeur retourne par les fonctions suivantes sont
acceptes : CURRENT_DATE, CURRENT_TIME[(p)], CURRENT_TIMESTAMP[(p)], LOCALTIME[(p)],
LOCALTIMESTAMP[(p)], USER, CURRENT_USER, SESSION_USER, SYSTEM_USER.

Exemple :
CREATE TABLE T_PERSONNE2
(PRS_ID INT,
PRS_NOM VARCHAR(32),
PRS_PRENOM VARCHAR(32),
PRS_SEXE
CHAR(1)
DEFAULT 'M',
PRS_DATE_NAISSANCE DATE DEFAULT getDATE())
Go
insert into T_PERSONNE2 (PRS_ID,PRS_NOM,PRS_PRENOM
(11,'BRAHIM','SALEM')

values

select * from T_PERSONNE2

Ralis par :A BENDAOUD

78

B.

Clef (PRIMARY KEY)

Toute table doit tre munie d'une clef (souvent appel tort clef primaire en opposition clef
trangre...). Et toujours selon la thorie des bases de donnes, une clef doit imprativement
toujours tre pourvue d'une valeur ! (sinon quoi servirait une clef en l'absence de serrure ?).
Lorsque la clef porte sur une seule colonne il est possible de donner cette colonne la contrainte
PRIMARY KEY.
Nous avons vu que la contrainte PRIMARY KEY peut tre pose sur une colonne (contrainte
verticale) ou sur plusieurs colonnes en contrainte de ligne (horizontale). Si nous choisissons de la
poser en contrainte de colonne, alors une seule colonne de la table peut en bnficier.

Exemple :
CREATE TABLE T_PERSONNE5
(PRS_ID INT
NOT NULL PRIMARY KEY,
PRS_NOM
VARCHAR(32),
PRS_PRENOM VARCHAR(32))

La contrainte PRIMARY KEY assure qu'il n'y aura aucune valeur redondante (doublon) dans la
colonne. La contrainte complmentaire NOT NULL assure qu'il y aura toujours une valeur. Toute
tentative d'insrer une valeur prexistante de la colonne se soldera par une violation de contrainte
de clef. Voici par exemple le message gnr par SQL Server dans ce cas :

(1 ligne(s) affecte(s))
Msg 2627,
Niveau 14,
tat 1,
Ligne 2
Violation
de
la
contrainte
PRIMARY
KEY
'PK__T_PERSON__218D9B381B0907CE'. Impossible d'insrer une cl
en
double
dans
l'objet
'dbo.T_PERSONNE5'.
L'instruction a t arrte.

Ralis par :A BENDAOUD

79

Remarque :

il est d'usage de placer la colonne clef en tte de la description de la table pour des
fins de lisibilit.

C.

Unicit (UNIQUE)

La contrainte d'unicit exige que toutes les valeurs explicites contenues dans la colonne soient
uniques au sein de la table. En revanche, la colonne peut ne pas tre renseigne. En effet, souvenez
vous que les marqueurs NULL se propagent dans les calculs et donc comparaison d'un marqueur
NULL un ensemble de valeurs est impossible et se solde par le renvoi d'un marqueur UNKNOW la
place des valeurs TRUE ou FALSE attendue.

Exemple :
CREATE TABLE T_PERSONNE7
(PRS_NOM
VARCHAR(32),
PRS_PRENOM
VARCHAR(32),
PRS_TELEPHONE
CHAR(14)
UNIQUE)
INSERT INTO T_PERSONNE7 VALUES ('Dupont', 'Marcel',
'01 44 21 57
18')
INSERT INTO T_PERSONNE7 VALUES ('Duval', 'Andr',
NULL)
INSERT INTO T_PERSONNE7 VALUES ('Durand', 'Jean',
'06 11 86 46
69')
INSERT INTO T_PERSONNE7 (PRS_NOM, PRS_PRENOM) VALUES ('Dubois',
'Claude')
INSERT INTO T_PERSONNE7 VALUES ('Dugland', 'Alfred', '06 11 86 46
69')
SELECT *
FROM T_PERSONNE7

Message derreur :

Msg 2627, Niveau 14, tat 1, Ligne 1


Violation de la contrainte UNIQUE KEY 'UQ__T_PERSON__DD14909F1ED998B2'.
Impossible d'insrer une cl en double dans l'objet 'dbo.T_PERSONNE7'.
L'instruction a t arrte

Ralis par :A BENDAOUD

80

Dans cet exemple Dugland n'a pas t insr car son numro de tlphone est identique
Durand.

D.

CREATION DINDEXS

l'instar de l'index d'un livre, l'index d'une base de donnes vous permet de retrouver
rapidement des informations dans une table ou une vue indexe. Un index se compose de cls
cres partir d'une ou plusieurs colonnes dans la table ou la vue et de pointeurs qui mappent sur
l'emplacement de stockage des donnes spcifies. Un index bien conu amliore de manire
significative les performances des requtes et des applications de base de donnes. Un index peut
rduire la quantit de donnes qui doivent tre lues par une requte pour retourner un ensemble de
rsultats. Les index peuvent aussi imposer l'unicit des lignes d'une table, garantissant ainsi
l'intgrit des donnes de la table.
Les rubriques de cette section fournissent des informations qui vous aident comprendre,
concevoir,

mettre
en
uvre
et

optimiser
des
index.

1.

CONCEPTION DINDEXS

L'engorgement des applications de base de donnes est souvent imputable des index mal
conus ou en nombre insuffisant. La conception d'index efficaces est primordiale pour le bon
fonctionnement des bases de donnes et des applications. Le choix d'index adapts une base de
donnes et sa charge de travail est une opration complexe qui vise trouver un compromis entre
vitesse des requtes et cots de mise jour. Les index troits, c'est--dire les index ne comportant
que quelques colonnes dans la cl d'index, requirent moins d'espace disque et de besoins de
maintenance. En revanche, les index larges couvrent plus de requtes. Vous devrez ventuellement
essayer plusieurs conceptions diffrentes avant de trouver l'index le plus performant. Il est possible
d'ajouter, de modifier et de supprimer des index sans affecter le schma de la base de donnes ou la
conception des applications. Par consquent, n'hsitez faire des essais avec diffrents index.
Dans la majorit des cas, l'optimiseur de requte de SQL Server choisit de manire fiable l'index le
plus efficace. La stratgie globale de cration d'index consiste fournir l'optimiseur de requte une
slection varie d'index et se fier lui pour faire le bon choix. Ce procd permet de rduire le
temps d'analyse et produit de bons rsultats dans bon nombre de cas. Pour dterminer quels sont les
index qu'utilise l'optimiseur de requte dans le cas d'une requte donne, slectionnez Inclure le
plan d'excution rel dans le menu Requte de SQL Server Management Studio. Pour plus
d'informations, consultez Procdure : afficher un plan d'excution rel.
L'utilisation d'index n'est pas forcment synonyme de bonnes performances, et inversement, de
bonnes performances ne sauraient tre ncessairement attribuables l'utilisation d'index efficaces.
Ralis par :A BENDAOUD

81

Si l'utilisation d'un index contribuait toujours produire les meilleurs rsultats, le travail de
l'optimiseur de requte en serait simplifi. En ralit, le choix d'un index inappropri peut aboutir
des performances moins que satisfaisantes. La tche de l'optimiseur de requte est donc de ne
slectionner un index, ou une combinaison d'index, que dans les cas o cette slection est
susceptible d'amliorer les performances et d'viter la rcupration par index si elle doit les
dtriorer.

Syntaxe :
CREATE UNIQUE
NONCLUSTERED INDEX Idx1
ON dbo.DEPARTEMENT(NomDep);

Comme on peut utiliser le concepteur SSMS SQL SERVER MANAGER SERVICE


Ouvrir le tableau en mode cration puis cliquer sur

Fentre pour ajouter un index idx1

Ralis par :A BENDAOUD

82

2.

Directives relatives aux bases de donnes

La dfinition de nombreux index sur une table affecte les performances des instructions
INSERT, UPDATE, DELETE , car mesure que les donnes de la table changent, tous les
index doivent tre mis jour en consquence.
vitez que les tables mises jour ne soient trop abondamment indexes et faites en sorte
que les index soient troits, c'est--dire qu'ils comprennent le moins de colonnes possible

E.

Validation (CHECK)

La contrainte CHECK de validation est celle qui offre le plus de possibilit. En contre partie son
excution est trs coteuse. Elle permet de dfinir un prdicat complexe, bas sur une comparaison
pouvant contenir une requte de type SELECT. Pour valider la contrainte, le prdicat doit tre valu
TRUE ou UNKNOWN (prsence de NULL).

syntaxe :

CHECK ( prdicat )

O prdicat peut contenir le mot clef VALUE pour faire rfrence la colonne pour laquelle la
contrainte est dfinie

Exemple :
CREATE TABLE T_PERSONNE9
(PRS_ID
INTEGER
CHECK (PRS_ID > 0),
PRS_NOM
VARCHAR(32) ,
PRS_PRENOM
VARCHAR(32) ,
PRS_SEXE
CHAR(1) CHECK (PRS_SEXE IN ('M', 'F')),
PRS_TELEPHONE
CHAR(14)
)

La colonne PRS_ID ne peut avoir de valeurs infrieures 0.


La colonne PRS_SEXE peut avoir exclusivement les valeurs M ou F.

ATTENTION : la longueur du prdicat d'une contrainte CHECK (en nombre de caractres) peut tre
limite. Il faut en effet pouvoir stocker cette contrainte dans le dictionnaire des informations de la
base et ce dernier n'est pas illimit.

Ralis par :A BENDAOUD

83

II.

Intgrit rfrentielle (FOREIGN KEY / REFERENCES)

La contrainte de type FOREIGN KEY permet de mettre en place une intgrit rfrentielle entre
une (ou plusieurs) colonnes d'une table et la (ou les) colonne composant la clef d'une autre table afin
d'assurer les relations existantes et joindre les tables dans le requte selon le modle relationnel que
l'on a dfini.
Le but de l'intgrit rfrentielle est de maintenir les liens entre les tables quelque soit les
modifications engendres sur les donnes dans l'une ou l'autre table.

Cette contrainte dans sa syntaxe complte est assez complexe et c'est pourquoi nous allons dans
ce paragraphe donner une syntaxe trs simplifi des fins didactiques :

syntaxe :
FOREIGN KEY REFERENCES table (colonne)

Attention :

la colonne spcifie comme rfrence doit tre une colonne clef

Exemple :
CREATE TABLE T_FACTURE1
(FTC_ID INTEGER,
PRS_ID INTEGER FOREIGN KEY REFERENCES T_PERSONNE5 (PRS_ID) ,
FCT_DATE
DATE,
FCT_MONTANT DECIMAL(16,2))

La table T_FACTURE1 est lie la table T_PERSONNE5 et ce lien se fait entre la clef trangre
PRS_ID de la table T_FACTURE1 et la clef de la table T_PERSONNE5 qui s'intitule aussi PRS_ID.

Ralis par :A BENDAOUD

84

Important :

il est trs important que les noms des colonnes de jointure soit les mmes dans les
diffrentes tables (notamment cause du NATURAL JOIN), mais cela n'est pas
obligatoire.
Ds lors toute tentative d'insertion d'une facture dont la rfrence de client est inexistante se
terminera par un chec. De mme toute tentative de supprimer un client pour lequel les donnes
d'une ou de plusieurs factures sont prsente se soldera par un arrt sans effet de l'ordre SQL.
Examinons maintenant comment le SGBDR ragit pour assurer la cohrence de la base lors
d'oprations tenant de briser les liens d'intgrit rfrentielle :

Exemple :

Ralis par :A BENDAOUD

85

Remarque :

Comme on le voit, le mcanisme d'intgrit rfrentielle est un lment


indispensable au maintient des relations entre tables. Un SGBD qui en est dpourvu ne
peut pas prtendre grer le relationnel. En particulier MySQL ne peut en aucun cas
prtendre tre une base de donnes relationnelle !

III.

Les contraintes de table

Une table peut tre pourvue des contraintes de ligne suivante :

PRIMARY KEY : prcise que la ou les colonnes composent la clef de la table. ATTENTION :
ncessite que chaque colonne concourrant la clef soit NOT NULL.
UNIQUE : les valeurs de la ou les colonnes doivent tre unique ou NULL, c'est dire qu'
l'exception du marqueur NULL, il ne doit jamais y avoir plus d'une fois la mme valeur (pas de
doublon) au sein de l'ensemble de donnes form par les valeurs des diffrentes colonnes
composant la contrainte.
CHECK : permet de prciser un prdicat validant diffrentes colonnes de la table et qui
accepterons les valeurs s'il est valu vrai.
FOREIGN KEY : permet, pour les valeurs de la ou les colonnes, de faire rfrence des
valeurs prexitantes dans une ou plusieurs colonnes d'une autre table. Ce mcanisme
s'apelle intgrit rfrentielle.

Comme dans le cas des contraintes de colonne, lorsqu'au cours d'un ordre SQL d'insertion, de
modification ou de suppression, une contrainte n'est pas vrifie on dit qu'il y a "violation" de la
contrainte et les effets de l'ordre SQL sont totalement annul (ROLLBACK).

A.

Clef multicolonne (PRIMARY KEY)

La clef d'une table peut tre compose de plusieurs colonnes. Dans ce cas la syntaxe est :

Syntaxe :
CONSTRAINT nom_contrainte PRIMARY KEY (liste_colonne)

Exemple :
clef primaire sur PRS_NOM / PRS_PRENOM
CREATE TABLE T_PERSONNE9
(PRS_NOM
VARCHAR(32) NOT NULL,
PRS_PRENOM
VARCHAR(32) NOT NULL,
PRS_TELEPHONE
CHAR(14),

CONSTRAINT PK_PRS PRIMARY KEY (PRS_NOM, PRS_PRENOM))

Ralis par :A BENDAOUD

86

B.

Unicit globale (UNIQUE)

Une contrainte d'unicit peut tre porte sur plusieurs colonnes. Dans ce cas chaque n-uplets de
valeurs explicites doit tre diffrents.

Syntaxe :
CONSTRAINT nom_contrainte UNIQUE (liste_colonne)

Exemple :

Remarque :

certains SGBDR comme MS SQL Server refuse de voir la prsence de plusieurs


marqueurs NULL dans la cas d'une contrainte d'unicit. D'autres comme InterBase
refusent une contrainte d'unicit dpourvue d'une contrainte NOT NULL...

Ralis par :A BENDAOUD

87

Attention :

vous ne pouvez pas dfinir une contrainte d'unicit sur des colonnes de type BLOB

C.

Validation de ligne (CHECK)

La contrainte CHECK permet d'effectuer un contrle de validation multicolonne au sein de la


table.
Sa syntaxe est :

Syntaxe :
CONSTRAINT nom_contrainte CHECK ( prdicat )

Exemple :
vrification de prsence d'information dans au moins une colonne crdit ou dbit de la
table compte :
CREATE TABLE T_COMPTE
(CPT_ID
INTEGER,
CPT_DATE
DATE,
CPT_CREDIT
DECIMAL (16,2),
CPT_DEBIT
DECIMAL (16,2),
CLI_ID
INTEGER,
CONSTRAINT CHK_OPERATION CHECK((CPT_CREDIT >= 0 AND CPT_DEBIT IS
NULL) OR (CPT_DEBIT >= 0 AND CPT_CREDIT IS NULL)))

Toute tentative d'insrer une ligne avec des valeurs non renseignes pour les colonnes dbit et
crdit, ou bien avec des valeurs ngative se soldera par un refus.

IV.

Intgrit rfrentielle de table (FOREIGN KEY / REFERENCES)

Comme dans le cas d'une contrainte rfrentielle de colonne, il est possible de placer une
contrainte d'intgrit portant sur plusieurs colonnes. Ceci est d'autant plus important qu'il n'est pas
rare de trouver des tables dont la clef est compose de plusieurs colonnes. La syntaxe est la suivante
:

Syntaxe :
CONSTRAINT
nom_contrainte
FOREIGN
nom_table_ref (liste_colonne_ref)

Ralis par :A BENDAOUD

KEY

(liste_colonne)

REFERENCES

88

Exemple :
CREATE TABLE T_FACTURE2
(FTC_ID
INTEGER,
PRS_NOM
VARCHAR(32),
PRS_PRENOM
VARCHAR(32),
FCT_DATE
DATE,
FCT_MONTANT
DECIMAL(16,2),
CONSTRAINT FK_FCT_PRS FOREIGN KEY
PRS_PRENOM)
REFERENCES
T_PERSONNE9
PRS_PRENOM))

(PRS_NOM,
(PRS_NOM,

La table T_FACTURE2 est lie la table T_PERSONNE9 et ce lien se fait entre la clef trangre
composite PRS_NOM / PRS_PRENOM de la table T_FACTURE2 et la clef de la table T_PERSONNE9 elle
mme compose des colonnes PRS_NOM / PRS_PRENOM.

Examinons maintenant comment le SGBDR ragit pour assurer la cohrence de la base lors
d'oprations tenant de briser les liens d'intgrit rfrentielle :

La personne Mouhammed Brahim nexiste pas dans la table T_PESONNE10


Ralis par :A BENDAOUD

89

V.

Suppression dune table


Syntaxe :

DROP TABLE MATABLE1


Exemple :

CREATE TABLE MATABLE1(column_a INT) ;


GO
DROP TABLE MATABLE1;

VI.

MODIFIER UN TABLEAU

Modifie la dfinition d'une table en changeant, en ajoutant ou en supprimant des colonnes et des
contraintes, en raffectant des partitions, en dsactivant ou en activant des contraintes et des
dclencheurs.

A.

Ajout d'une nouvelle colonne

L'exemple suivant ajoute une colonne qui accepte les valeurs NULL et pour laquelle aucune valeur
n'est spcifie via une dfinition DEFAULT. Dans la nouvelle colonne, chaque ligne aura la valeur

NULL
Exemple :

CREATE TABLE MATABLE1(column_a INT) ;


GO
ALTER
TABLE
MATABLE1
ADD
column_b
VARCHAR(20) NULL ;
GO
EXEC sp_help MATABLE1;
GO
DROP TABLE MATABLE1;
GO

Ralis par :A BENDAOUD

90

B.

Suppression d'une colonne

L'exemple suivant supprime une colonne dans une table.

Exemple :
CREATE TABLE maTable2 (column_a INT, column_b VARCHAR(20) NULL) ;
GO
ALTER TABLE maTable2 DROP COLUMN column_b ;
GO
/*pour afficher le schema de la lable maTable2 aprs modification */
EXEC sp_help maTable2 GO ;

C.

Modification du type de donnes d'une colonne

L'exemple suivant modifie le type d'une colonne d'une table de INT en DECIMAL.

Exemple :
Ralis par :A BENDAOUD

91

CREATE TABLE maTable3 (column_a INT ) ;


GO
INSERT INTO maTable3 (column_a) VALUES (10) ;
GO
ALTER TABLE maTable3 ALTER COLUMN column_a DECIMAL (5, 2) ;
--pour afficher le schema aprs modification du type de
column_a
EXEC sp_help maTable3
-- pour supprimer le tableau aprs verification
DROP TABLE maTable3 ;
GO

D.

Ajout d'une colonne avec une contrainte

L'exemple suivant ajoute une nouvelle colonne avec une contrainte UNIQUE.

Exemple :
CREATE TABLE maTable4 (column_a INT) ;
GO
ALTER TABLE maTable4 ADD column_b VARCHAR(20) NULL
CONSTRAINT exb_unique UNIQUE ;
GO
--pour afficher le schema de la table maTable4
EXEC sp_help maTable4 ;
GO
--pour supprimer la table d'exemple
DROP TABLE maTable4 ;
GO

Ralis par :A BENDAOUD

92

E.
Ajout d'une contrainte CHECK non vrifie une colonne
existante
L'exemple suivant ajoute une contrainte une colonne existante de la table. La colonne comporte
une valeur qui ne respecte pas la contrainte. Par consquent, WITH NOCHECK empche la
validation de la contrainte sur les lignes existantes, et permet l'ajout de la contrainte

Exemple :
CREATE TABLE maTable5 ( column_a INT) ;
GO
INSERT INTO maTable5 VALUES (-1) ;
GO
ALTER TABLE maTable5 WITH NOCHECK
ADD CONSTRAINT exd_check CHECK (column_a > 1) ;
GO
--pour afficher le schema de la table maTable5
EXEC sp_help maTable5 ;
GO
--pour supprimer la table d'exemple
DROP TABLE maTable5 ;
GO

F.

Ajout d'une contrainte DEFAULT une colonne existante

L'exemple suivant cre une table de deux colonnes et insre une valeur dans la premire ; l'autre
colonne conserve la valeur NULL. Une contrainte DEFAULT est alors ajoute la deuxime
colonne. Pour vrifier que la valeur par dfaut est applique, une autre valeur est insre dans la
premire colonne et la table fait l'objet d'une requte

Exemple :
CREATE TABLE maTable6 ( column_a INT, column_b INT) ;
GO
INSERT INTO maTable6 (column_a)VALUES ( 7 ) ;
GO
ALTER TABLE maTable6
ADD CONSTRAINT col_b_def
DEFAULT 50 FOR column_b ;
GO
INSERT INTO maTable6 (column_a) VALUES ( 10 ) ;
select * from maTable6

Ralis par :A BENDAOUD

93

G.

Ajout de plusieurs colonnes avec des contraintes

L'exemple suivant ajoute plusieurs colonnes avec des contraintes dfinies. La premire colonne a
la proprit IDENTITY. Chaque ligne de la table a de nouvelles valeurs incrmentielles dans la
colonne d'identit.

Exemple :
CREATE TABLE maTable7 ( column_a INT CONSTRAINT column_a_un UNIQUE) ;
GO
ALTER TABLE maTable7 ADD
-- Add a PRIMARY KEY identity column.
column_b INT IDENTITY
CONSTRAINT column_b_pk PRIMARY KEY,
-- Add a column that references another column in the same table.
column_c INT NULL
CONSTRAINT column_c_fk
REFERENCES maTable7(column_a),
-- Add a column with a constraint to enforce that
-- nonnull data is in a valid telephone number format.
column_d VARCHAR(16) NULL
CONSTRAINT column_d_chk
CHECK
(column_d LIKE '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]' OR
column_d LIKE
'([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'),
-- Add a nonnull column with a default.
column_e DECIMAL(3,3)
CONSTRAINT column_e_default
DEFAULT .081 ;
GO
EXEC sp_help maTable7 ;
GO
DROP TABLE maTable7 ;
GO

Ralis par :A BENDAOUD

94

Travaux Dirigs
Soit la base de donnes suivante :
Appartement
codeAp
type
surface
#codeIm

Immeuble
codeIm
Adresse
ville

1. Donner le code SQL qui permet de crer la table Appartement sans


oublier la contrainte de la cl trangre
2. Ajouter une contrainte a la table Appartement qui permet de contrler le
type (le type prend les valeurs F2,F3,F4,F5 )

Ralis par :A BENDAOUD

95

CHAPITRE 5
Leon 1 : langage de manipulation des donnes
Objectifs :vous serez mme d'effectuer les tches
suivantes

I.

Linstruction INSERT ajout


Linstruction UPDATE modification
Linstruction DELETE suppression

Langage de manipulation des donnes


Le langage de manipulation de donnes (LMD) est le langage permettant
de modifier les informations contenues dans la base.
Il existe trois commandes SQL permettant d'effectuer les trois types de
Modification des donnes :
INSERT ajout de lignes
UPDATE mise jour de lignes
DELETE suppression de lignes

Ces trois commandes travaillent sur la base telle qu'elle tait au dbut de l'excution
de la commande. Les modifications effectues par les autres utilisateurs entre le dbut et la
fin de l'excution ne sont pas prises en compte (mme pour les transactions valides).

A.

Insertion
Syntaxe :
INSERT INTO table (col1,..., coln )
VALUES (val1,...,valn )

OU

Syntaxe :
INSERT INTO table (col1,..., coln )
SELECT ...
Ralis par :A BENDAOUD

96

table est le nom de la table sur laquelle porte l'insertion. col1,..., coln est la liste des noms des
colonnes pour lesquelles on donne une valeur. Cette liste est optionnelle. Si elle est omise, ORACLE
prendra par dfaut l'ensemble des colonnes de la table dans l'ordre o elles ont t donnes lors de
la cration de la table. Si une liste de colonnes est spcifie, les colonnes ne figurant pas dans la liste
auront la valeur NULL.

Exemple :
a) INSERT INTO dept VALUES (10, 'FINANCES', 'PARIS')
b) INSERT INTO dept (lieu, nomd, dept) VALUES ('GRENOBLE',
'RECHERCHE', 20)

La deuxime forme avec la clause SELECT permet d'insrer dans une table des lignes provenant
d'une table de la base. Le SELECT a la mme syntaxe qu'un SELECT normal.

Exemple :
Enregistrer la participation de MARTIN au groupe de projet numro10 :
INSERT INTO PARTICIPATION (MATR, CODEP)
SELECT MATR, 10 FROM EMP
WHERE NOME= MARTIN ;

B.

Modification

La commande UPDATE permet de modifier les valeurs d'un ou plusieurs champs,


dans une ou plusieurs lignes existantes d'une table.
Syntaxe :
UPDATE table
SET col1 = exp1, col2 = exp2, ...
WHERE prdicat
OU
Syntaxe :
UPDATE table
SET (col1, col2,...) = (SELECT ...)
WHERE prdicat

Ralis par :A BENDAOUD

97

Table est le nom de la table mise jour ; col1, col2, ... sont les noms des colonnes qui
seront modifies ; exp1, exp2,... sont des expressions. Elles peuvent aussi tre un ordre
SELECT renvoyant les valeurs attribues aux colonnes (deuxime variante de la syntaxe).
Les valeurs de col1, col2... sont mises jour dans toutes les lignes satisfaisant le
prdicat. La clause WHERE est facultative. Si elle est absente, toutes les lignes sont mises
jour.
Le prdicat peut contenir des sous-interrogations.

Exemple :
Faire passer MARTIN dans le dpartement 10 :
UPDATE EMP SET DEPT = 10
WHERE NOME = 'MARTIN'

Exemple : Augmenter de 10 % les commerciaux :


UPDATE EMP SET SAL = SAL * 1.1
WHERE POSTE = 'COMMERCIAL'

Exemple :
Donner CLEMENT un salaire 10 % au dessus de la moyenne des salaires
des secrtaires
UPDATE EMP SET SAL = (SELECT AVG(SAL) * 1.10
FROM EMP WHERE POSTE = 'SECRETAIRE')
WHERE NOME = 'CLEMENT'

On remarquera que la moyenne des salaires sera calcule pour les valeurs qu'avaient
les salaires au dbut de l'excution de la commande UPDATE et que les modifications
effectues sur la base pendant l'excution de cette commande ne seront pas prises en
compte
Exemple :
Enlever (plus exactement, mettre la valeur NULL) la commission de
MARTIN :
UPDATE EMP
SET COMM = NULL
WHERE NOME = 'MARTIN'

Ralis par :A BENDAOUD

98

Requte update avec la clause from


Soit la base de donnes suivante
coureur(numCour,nom,#codeEqui,#codePays)
Equipe(codeEquip,nomEqui,nomDir,categorie,Nbcour)
Temps(#numEtape,#numCour,temps,classement)
Etape(numEtape,villeDep,villeArr,Kms)
1. Donner la requte qui met a jour le champs NbCour

update equipe set nbCour=t.nbCour


from(select c.CodeEq, COUNT(*) as nbCour from
equipe e inner join Coureurs c
on e.codeEqui=c.CodeEq group by c.CodeEq ) as t
where equipe.codeEqui=t.CodeEq
2. Donner la requte qui met jour le champ classement

update temps set classement=tab.classement


from(select t.NumCour as numCour , ROW_NUMBER()
OVER(ORDER BY t.temps ASC,t.numTour) as
classement from temps t
) as tab
where temps.numCour=tab.numCour
C.

Modification et insertion avec linstruction MERGE

Dans SQL Server 2008, vous pouvez effectuer des oprations d'insertion, de mise jour ou de
suppression dans une instruction unique en utilisant l'instruction MERGE. L'instruction MERGE vous
permet de joindre une source de donnes une table ou une vue cible et deffectuer plusieurs

Ralis par :A BENDAOUD

99

actions sur l'objet cible en fonction des rsultats de cette jointure. Par exemple, vous pouvez utiliser
l'instruction MERGE pour effectuer les oprations suivantes :

Insrer ou mettre jour sous condition des lignes dans une table cible unique l'aide d'une
instruction unique.
Si la ligne existe dans la table cible, mettez jour une ou plusieurs colonnes ; sinon, insrez les
donnes dans une nouvelle ligne.

Synchroniser deux tables.


Insrer, mettre jour ou supprimer des lignes dans une table cible selon les diffrences avec les
donnes sources.

La syntaxe MERGE consiste en cinq clauses principales :

La clause MERGE spcifie la table ou vue qui est la cible des oprations d'insertion, de mise jour
ou de suppression.

La clause USING spcifie la source de donnes qui est jointe avec la cible.

La clause ON spcifie les conditions de jointure qui dtermineront le point de correspondance


entre la cible et la source.

Les clauses WHEN spcifient les actions prendre en fonction des rsultats de la clause ON.
La clause OUTPUT retourne une ligne pour chaque ligne dans l'objet cible mis jour, insr ou
supprim.

Exemple :
Cet exemple permet de mettre a jour la quantite de la table stock si la rfrence de larticle existe
dj dans la table stock, si non il ajoute une ligne dans la table stock contient les informations de
larticle et sa quantit livr

-----------------instruction MERGE------------IF OBJECT_ID (N'dbo.LIVRAISON', N'U') IS NOT


NULL
DROP TABLE dbo.LIVRAISON;
GO
CREATE TABLE LIVRAISON(codel int identity
primary key,
ref int,datel date,quantite int
)
Ralis par :A BENDAOUD

100

IF OBJECT_ID (N'dbo.STOCK', N'U') IS NOT NULL


DROP TABLE dbo.STOCK;
GO
create table STOCK(ref int primary key,Quantite
int )
insert into LIVRAISON values(1,'11/01/2014',10)
insert into LIVRAISON values(2,'11/01/2014',11)
insert into LIVRAISON values(1,'10/01/2014',5)
insert into LIVRAISON values(2,'10/01/2014',3)
insert into LIVRAISON values(3,'10/01/2014',2)
insert into STOCK values(1,100)
insert into STOCK values(2,50)
MERGE stock as cible
using (select * from livraison where
datel='10/01/2014') as source
on cible.ref=source.ref
when matched then update set
cible.Quantite=cible.Quantite+source.Quantite
when not matched BY TARGET then
insert(ref,Quantite)
values(source.ref,source.Quantite);
select * from stock
resultat,la table stock aprs lexcution de linstruction MERGE

Suppression
L'ordre DELETE permet de supprimer des lignes d'une table.

Syntaxe :
Ralis par :A BENDAOUD

101

DELETE FROM table


WHERE prdicat

La clause WHERE indique quelles lignes doivent tre supprimes.

Attention :

cette clause est facultative ; si elle n'est pas prcise, TOUTES


LES LIGNES DE LA TABLE SONT SUPPRIMEES (heureusement qu'il existe
ROLLBACK!). Le prdicat peut contenir des sous-interrogations

Exemple :
DELETE FROM dept WHERE dept = 10

Travaux Dirigs
Soit la base de donnes VOLS suivante :
PILOTE (NUMPIL, NOMPIL, ADR, SAL)
AVION (NUMAV, NOMAV, CAPACITE, LOC)
VOL (NUMVOL, NUMPIL, NUMAV, VILLE_DEP, VILLE_ARR, H_DEP, H_ARR)
Pilote
NUMPIL
NOMPIL
ADR
SAL

VOL
NUMVOL
NUMPIL
NUMAV
VILLE_DEP
VILLE_ARR
H_DEP
H_ARR

AVION
NUMAV
NOMAV
CAPACITE
LOC

NUMPIL: cl de PILOTE, nombre entier


NOMPIL: nom du pilote, chane de caractres
ADR: ville de la rsidence du pilote, chane de caractres
SAL: salaire du pilote, nombre entier
NUMAV: cle de AVION, nombre entier
CAPACITE: nombre de places dun avion, nombre entier
LOC: ville de laroport dattache de lavion, chane de caractres
NUMVOL: cle de VOL, nombre entier
VILLE_DEP: ville de dpart du vol, chane de caractres
VILLE_ARR: ville darrive du vol, chane de caractres
H_DEP: heure de dpart du vol, nombre entier entre 0 et 23
H_ARR: heure darrive du vol, nombre entier entre 0 et 23
Ralis par :A BENDAOUD

102

Question de cours :
1. En quoi consiste la notion de mappage dans QSL Server 2008
Implmentation de la base de donnes
1. Donner la transat SQL qui permet de crer la table vol
2. Modifier la table vol en ajoutant les contraintes (cl trangres)
3. Modifier la table vol en ajoutant les contraintes qui contrlent la saisie des donnes H_DEP
H_ARR (comprise entre 0 et 23)
4. Donner le code sql qui permet de crer une connexion operateur et un utilisateur
Mohammed dans la base et lui donne le droit total sur la table vol
Questions interroger une base de donnes:
1. Liste des pilotes dont les noms commencent par un A
2. Quels est le salaire minimum dun pilote conduisant un vol Bordeaux-Marseille?
3. Dans quelle ville le salaire moyen des pilotes qui y rrsident est-il maximum?
4. Liste des pilotes qui rsident dans la LOC des avions qui pilotent
5. Quel est lensemble des (NUMAV,V_DEP,V_ARR) de VOL tel quon ne trouve pas
(NUMAV,V_ARR,V_DEP) dans VOL
Langage de manipulation des donnes :
1. Ajouter les pilotes
(10,fatihi,Rabat,14000),
(11,ibrahimi, casa , 15000),
(12,kamani,rabat ,1200),
(13,malaki,fes,16000)
2. Augmenter le salaire de 5% des pilotes qui habitent Casa
3. *Augmenter le salaire de 8% des pilotes qui ont effectu plus de 100 vols
4. Supprimer les avions qui ont une capacit <= 40
5. Supprimer les avions qui nont effectu aucun vol
6. modifier le salaire de fatihi pour quil soit gal au salaire moyen des pilotes qui habitent
casa

Ralis par :A BENDAOUD

103

Chapitre 5
Leon 2 : Interroger une base de donnes
Objectifs : vous serez mme d'effectuer les tches suivantes

Interroger une table


La clause select
La clause from
La clause where
Les operateurs logiques and /or
Sous interrogation retournant ramenant une ligne et une colonne
Sous interrogation retournant ramenant plusieurs lignes
Prdicat ALL /ANY/exists
Fonctions de groupes
Division avec EXISTS
Clause having
Fonction arithmtique/et chane de caractres

Remarque : pour les exemples on va utiliser la base de donnes suivante :

Ralis par :A BENDAOUD

104

I.

Interrogations
A.

Syntaxe gnrale

L'ordre SELECT possde six clauses diffrentes, dont seules les deux premires sont
obligatoires. Elles sont donnes ci-dessous, dans l'ordre dans lequel elles doivent apparatre, quand
elles sont utilises :

Syntaxe :
SELECT ...
FROM ...
WHERE ...
GROUP BY ...
HAVING ...
ORDER BY ...

B.

Clause SELECT

Cette clause permet d'indiquer quelles colonnes, ou quelles expressions doivent tre
retournes par l'interrogation.

Syntaxe :
SELECT [DISTINCT] *
Ou
SELECT [DISTINCT] exp1 [[AS] nom1 ], exp2 [[AS] nom2 ], .....

exp1, exp2, ... sont des expressions, nom1, nom2, ... sont des noms facultatifs de 30
caractres maximum, donns aux expressions. Chacun de ces noms est insr derrire l'expression,
spar de cette dernire par un blanc ou par le mot cl AS (optionnel) ; il constituera le titre de la
colonne dans l'affichage du rsultat de la slection. Ces noms ne peuvent tre utiliss dans les autres
clauses (where par exemple).
Le symbole

signifie que toutes les colonnes de la table sont slectionnes.

Le mot cl facultatif DISTINCT ajout derrire l'ordre SELECT permet d'liminer les duplications :
si, dans le rsultat, plusieurs lignes sont identiques, Une seule sera conserve.

Exemple :
SELECT * FROM DEPT
SELECT DISTINCT POSTE FROM EMP
SELECT NOME, SAL + NVL(COMM,0) AS Salaire FROM
EMP

La requte suivante va provoquer une erreur car on utilise le nom Salaire dans la clause where :
Ralis par :A BENDAOUD

105

SELECT NOME, SAL + NVL(COMM,0) AS Salaire FROM EMP


WHERE Salaire > 1000
Si le nom contient des sparateurs (espace, caractre spcial), ou s'il est
Identique un mot rserv SQL (exemple : DATE), il doit tre mis entre crochet.

Exemple :

SELECT NOME, SAL + NVL(COMM,0) as Salaire Total FROM EMP

Le nom complet d'une colonne d'une table est le nom de la table suivi d'un
Point et du nom de la colonne. Par exemple : EMP.MATR, EMP.DEPT, DEPT.DEPT
Le nom de la table peut tre omis quand il n'y a pas d'ambigut. Il doit tre prcis s'il y a une
ambigut, ce qui peut arriver quand on fait une slection sur plusieurs tables la fois et que celles-ci
contiennent des colonnes qui ont le mme nom

C.

Clause FROM

La clause FROM donne la liste des tables participant l'interrogation. Il est possible de lancer des
interrogations utilisant plusieurs tables la fois.

Syntaxe :
FROM table1 [synonyme1 ] , table2 [synonyme2 ] ,

synonyme1, synonyme2,... sont des synonymes attribus facultativement aux tables pour le
temps de la slection. On utilise cette possibilit pour lever certaines ambiguts, quand la mme
table est utilise de plusieurs faons diffrentes dans une mme interrogation (voir les exemples)
Quand on a donn un synonyme une table dans une requte, elle n'est plus reconnue sous son
nom d'origine dans cette requte. Le nom complet d'une table est celui de son crateur (celui du
nom du schma suivi d'un point et du nom de la table. Par dfaut, le nom du crateur est celui de
l'utilisateur en cours. Ainsi, on peut se dispenser de prciser ce nom quand on travaille sur ses
propres tables. Mais il faut le prciser ds que l'on se sert de la table d'un autre utilisateur.
Pour obtenir la liste des employs avec le pourcentage de leur salaire par rapport au total
des salaires, il fallait auparavant utiliser une vue. Il est maintenant possible d'avoir cette liste avec
une seule instruction SELECT :

Exemple :
select nome, sal, sal/total*100
from emp, (select sum(sal) total from emp)

Ralis par :A BENDAOUD

106

D.

Clause WHERE

La clause WHERE permet de spcifier quelles sont les lignes slectionner dans une table ou
dans le produit cartsien de plusieurs tables. Elle est suivie d'un prdicat (expression logique ayant la
valeur vrai ou faux) qui sera valu pour chaque ligne. Les lignes pour lesquelles le prdicat est vrai
seront slectionnes. La clause where est tudie ici pour la commande SELECT. Elle peut se
rencontrer aussi dans les commandes UPDATE et DELETE avec la mme

Clause WHERE simple


Syntaxe :
WHERE prdicat

Un prdicat simple est la comparaison de deux expressions ou plus au moyen d'un

Oprateur logique :
WHERE exp1 = exp2
WHERE exp1 != exp2
WHERE exp1 < exp2
WHERE exp1 > exp2
WHERE exp1 <= exp2
WHERE exp1 >= exp2
WHERE exp1 BETWEEN exp2 AND exp3
WHERE exp1 LIKE exp2
WHERE exp1 NOT LIKE exp2
WHERE exp1 IN (exp2, exp3,...)
WHERE exp1 NOT IN (exp2, exp3,...)
WHERE exp IS NULL
WHERE exp IS NOT NULL

Les trois types d'expressions (arithmtiques, caractres, ou dates) peuvent tre compares au
moyen des oprateurs d'galit ou d'ordre (=, !=, <, >, <=,>=) : pour les types date, la relation
d'ordre est l'ordre chronologique ; pour les types caractres, la relation d'ordre est l'ordre
lexicographique. Il faut ajouter ces oprateurs classiques les oprateurs suivants BETWEEN, IN,
LIKE, IS NULL :
exp1 BETWEEN exp2 AND exp3 est vrai si exp1 est compris entre exp2 et exp3, bornes
incluses.
exp1 IN (exp2 , exp3...) est vrai si exp1 est gale l'une des expressions de la liste entre
parenthses.
Exp1 LIKE exp2 teste l'galit de deux chanes en tenant compte des caractres jokers dans
La 2me chane : _ remplace 1 caractre exactement % remplace une chane de caractres
de longueur quelconque, y compris de longueur nulle
Le fonctionnement est le mme que celui des caractres joker ? et * pour le shell sous Unix. Ainsi
l'expression 'MARTIN' LIKE '_AR%' sera vraie.
Ralis par :A BENDAOUD

107

L'oprateur IS NULL permet de tester la valeur NULL : exp IS [NOT] NULL est vrai si l'expression
a la valeur NULL (ou l'inverse avec NOT).

E.

Oprateurs logiques AND et OR

Les oprateurs logiques AND et OR peuvent tre utiliss pour combiner plusieurs prdicats
(l'oprateur AND est prioritaire par rapport l'oprateur OR). Des parenthses peuvent tre utilises
pour imposer une priorit dans l'valuation du prdicat, ou simplement pour rendre plus claire
l'expression logique. Loprateur NOT plac devant un prdicat en inverse le sens.

Exemple : Slectionner les employs du dpartement 30 ayant un salaire


suprieur 1500 frs.
SELECT NOME FROM EMP
WHERE DEPT = 30 AND SAL > 1500

Exemple : Afficher une liste comprenant les employs du dpartement 30 dont


le salaire est suprieur 11000 Frs et (attention, la traduction par OR) les
employs qui ne touchent pas de commission.
SELECT
nome
FROM
WHERE dept = 30 AND sal > 11000 OR comm IS NULL

Ralis par :A BENDAOUD

emp

108

II.

Sous-interrogation

Une caractristique puissante de SQL est la possibilit qu'un prdicat employ dans une clause
WHERE (expression droite d'un oprateur de comparaison) comporte un SELECT embot.
Par exemple, la slection des employs ayant mme poste que MARTIN peut s'crire en joignant
la table EMP avec elle-mme :

Exemple :
SELECT E1.NOME
FROM EMP E1 INNER JOIN EMP E2 ON E1.POSTE = E2.POSTE
WHERE E2.NOME = 'MARTIN'

mais on peut aussi la formuler au moyen d'une sous-interrogation :

Exemple :
SELECT NOME FROM EMP
WHERE POSTE = (SELECT POSTE
FROM EMP
WHERE NOME = 'MARTIN')

Les sections suivantes exposent les divers aspects de ces sous-interrogations.

A.

Sous-interrogation une ligne et une colonne

Dans ce cas, le SELECT imbriqu quivaut une valeur.


o op est un des oprateurs = ,<>,<, > <=, >= exp est toute expression lgale.

Exemple :
Liste des employs travaillant dans le mme dpartement que MERCIER

Syntaxe :
WHERE exp op (SELECT ...)

Ralis par :A BENDAOUD

109

Exemple :
SELECT NOM FROM EMP
WHERE DEPT = (SELECT DEPT FROM EMP WHERE NOME = 'MERCIER')

Un SELECT peut comporter plusieurs sous-interrogations, soit imbriques, soit au mme


niveau dans diffrents prdicats combins par des AND ou des OR.

Exemple : Liste des employs du dpartement 10 ayant mme poste que


quelqu'un du dpartement VENTES :
SELECT NOME, POSTE FROM EMPLYE E1
WHERE E1.DEPT = 10
AND E1.POSTE IN
(SELECT POSTE FROM EMPLYE E2
WHERE E2. NDEPT = (SELECT D.NDEP
FROM DEPARTEMENT D
WHERE D. NOMD = 'VENTES'))

Exemple : Liste des employs ayant mme poste que MERCIER ou un salaire
suprieur CHATEL :
SELECT NOME, POSTE, SAL FROM EMP
WHERE POSTE = (SELECT POSTE FROM EMP
WHERE NOME = 'MERCIER')
OR SAL > (SELECT SAL FROM EMP WHERE NOME = 'CHATEL')

Jointures et sous-interrogations peuvent se combiner.

Exemple :
SELECT NOME, POSTE
FROM EMPLOYE EMP INNER
JOIN DEPARTEMENT DEPT ON
EMP.DEPT = DEPT.DEPT
WHERE LIEU = 'LYON'
AND POSTE = (SELECT POSTE FROM EMP
WHERE NOME = 'FREMONT')

Ralis par :A BENDAOUD

110

On peut aussi plus simplement utiliser la jointure naturelle puisque les


noms des colonnes de jointures sont les mmes :

Exemple : Liste des employs travaillant LYON et ayant mme poste que
FREMONT.
SELECT NOME, POSTE
FROM EMPLOYE EMP INNER JOIN DEPARTEMENT
EMP.NDEP= DEPT.NDEP
WHERE LIEU = 'LYON'
AND POSTE = (SELECT POSTE FROM EMP
WHERE NOME = 'FREMONT')

DEPT

ON

Attention :

une sous-interrogation une seule ligne doit ramener une


Seule ligne ; dans le cas o plusieurs lignes, ou pas de ligne du tout seraient
ramenes, un message d'erreur sera affich et l'interrogation sera abandonne.

B.

Sous-interrogation ramenant plusieurs lignes

Une sous-interrogation peut ramener plusieurs lignes condition que l'oprateur de comparaison
admette sa droite un ensemble de valeurs.
Les oprateurs permettant de comparer une valeur un ensemble de valeurs sont :
l'oprateur IN les oprateurs obtenus en ajoutant ANY ou ALL la suite des oprateurs
de comparaison classique =, <>, <, >, <=, >=.ANY : la comparaison sera vraie si elle est vraie
pour au moins un lment de l'ensemble (elle est donc fausse si l'ensemble est vide).
ALL : la comparaison sera vraie si elle est vraie pour tous les lments de l'ensemble (elle est vraie
si l'ensemble est vide).

Exemple :

WHERE exp op ANY (SELECT ...)


WHERE exp op ALL (SELECT ...)
WHERE exp IN (SELECT ...)
WHERE exp NOT IN (SELECT ...)

Ralis par :A BENDAOUD

111

o op est un des oprateurs =, <>, <, >, <=, >=.

Exemple :
Liste des employs gagnant plus que tous les employs du dpartement 30 :
SELECT NOME, SAL FROM EMP
WHERE SAL > ALL (SELECT SAL FROM EMP
WHERE DEPT=30)

Remarque :

L'oprateur IN est quivalent = ANY, et l'oprateur NOT IN est quivalent


<> ALL.

C.

Les Prdicats : ALL, DISTINCT, DISTINCTROW, TOP

1.

Le prdicat ALL

Si vous n'incluez aucun prdicat, le moteur de base de donnes Microsoft Jet slectionne tous les
enregistrements qui remplissent les conditions de l'instruction SQL. Les deux exemples suivants sont
quivalents et renvoient tous les enregistrements de la table Employs :

Ralis par :A BENDAOUD

112

2.

Le prdicat DSTINCT

Omet tous les enregistrements pour lesquels les champs slectionns contiennent des donnes
en double. Ainsi, pour tre incluses dans les rsultats de la requte, les valeurs de chaque champ
rpertori dans l'instruction SELECT doivent tre uniques. Par exemple, plusieurs employs
rpertoris dans une table Employs peuvent avoir le mme nom. Si deux enregistrements
contiennent Durand dans le champ "Nom", l'instruction SQL suivante ne renvoie alors qu'un seul de
ces enregistrements :

Ralis par :A BENDAOUD

113

3.

Predicat DISTINCTROW

Omet les donnes sur la base des enregistrements complets en double, et pas seulement de
champs en double. Par exemple, vous pouvez crer une requte qui joint les tables Clients et
Commandes l'aide du champ "Code client". La table Clients
ne contient aucun doublon dans le champ "Code client", mais la table Commandes en contient car
chaque client passe plusieurs commandes. L'instruction SQL suivante montre comment utiliser
DISTINCTROW pour produire une liste de socits qui ont pass au moins une commande, sans
afficher le dtail de ces commandes :

Exemple :
SELECT DISTINCTROW Socit
FROM Clients INNER JOIN Commandes
ON Clients.[Code client]= Commandes.[Code client]
ORDER BY Socit;

Si vous omettez DISTINCTROW, cette requte produit plusieurs lignes pour chaque socit ayant
pass plusieurs commandes. DISTINCTROW n'a d'effet que si vous slectionnez des champs dans
seulement certaines des tables utilises dans la requte. DISTINCTROW est ignor si votre requte
n'inclut qu'une seule table ou si vous slectionnez les champs de toutes les tables.

Ralis par :A BENDAOUD

114

4.

TOP n [PERCENT]

Renvoie un certain nombre d'enregistrements situs au dbut ou la fin d'une plage spcifie par
une clause ORDER BY. Supposons que vous souhaitiez obtenir les noms des 25 premiers tudiants de
la promotion 1996 :

Exemple :
SELECT TOP 25 Nom, Prnom
FROM Etudiants
WHERE Promotion = 1996
ORDER BY Moyenne DESC;

Si vous n'incluez pas la clause ORDER BY, la requte renverra une srie de 25 enregistrements
choisis arbitrairement parmi ceux de la table Students qui remplissent les conditions de la clause
WHERE. Le prdicat TOP n'effectue pas de choix entre des valeurs gales. Dans l'exemple prcdent,
si, parmi les meilleurs rsultats obtenus, le vingt-cinquime et le vingt-sixime ont obtenu la mme
moyenne, la requte renvoie 26 enregistrements. Vous pouvez galement utiliser le mot rserv
PERCENT pour renvoyer un certain pourcentage des premiers ou derniers enregistrements d'une
plage spcifie par la clause ORDER BY. Supposons qu'au lieu des 25 meilleurs tudiants, vous
souhaitiez slectionner 10 pour cent de la
promotion :

Exemple :
SELECT TOP 10 PERCENT
Nom, Prnom
FROM Etudiants
WHERE Promotion = 1994
ORDER BY Moyenne ASC;

Le prdicat ASC donne des valeurs croissantes. La valeur qui suit TOP doit tre un entier non
sign. TOP n'affecte pas les possibilits de mise jour de la requte

D.

Sous-interrogation synchronise ou bien corrles

Il est possible de synchroniser une sous-interrogation avec l'interrogation principale.


Dans les exemples prcdents, la sous-interrogation pouvait tre value d'abord, puis le rsultat
utilis pour excuter l'interrogation principale. SQL sait galement traiter une sous-interrogation
faisant rfrence une colonne de la table de l'interrogation principale.
Le traitement dans ce cas est plus complexe car il faut valuer la sous interrogation pour chaque
ligne de l'interrogation principale.

Ralis par :A BENDAOUD

115

Exemple :
Liste des employs ne travaillant pas dans le mme dpartement que
leur suprieur.
SELECT NOME FROM EMP E
WHERE DEPT <> (SELECT DEPT FROM EMP
WHERE MATR = E.SUP)

Il a fallu renommer la table EMP de l'interrogation principale pour pouvoir la rfrencer dans la
sous-interrogation.

E.

Sous-interrogation ramenant plusieurs colonnes

Il est possible de comparer le rsultat d'un SELECT ramenant plusieurs colonnes une liste des
colonnes. La liste de colonnes figurera entre parenthses gauche de l'oprateur de comparaison.
Avec une seule ligne slectionne :

Syntaxe :
WHERE (exp, exp,...) op (SELECT ...)

Avec plusieurs lignes slectionnes :


WHERE (exp, exp,...) op ANY (SELECT ...)
WHERE (exp, exp,...) op ALL (SELECT ...)
WHERE (exp, exp,...) IN (SELECT ...)

o op est un des oprateurs = ou <> Les expressions figurant dans la liste entre parenthses
seront compares celles qui sont ramenes par le SELECT.

Exemple :
Employs ayant mme poste et mme salaire que MERCIER :
SELECT NOME, POSTE, SAL FROM EMP
WHERE (POSTE, SAL) =
(SELECT POSTE, SAL FROM EMP
WHERE NOME = 'MERCIER')

On peut utiliser ce type de sous-interrogation pour retrouver les lignes qui correspondent des
optima sur certains critres pour des regroupements de lignes (voir dernier exemple des exemples

Ralis par :A BENDAOUD

116

F.

Clause EXISTS

La clause EXISTS est suivie d'une sous-interrogation entre parenthses, et prend la valeur vrai
s'il existe au moins une ligne satisfaisant les conditions de la sous-interrogation.

Exemple :
SELECT NOMD FROM DEPT
WHERE EXISTS (SELECT NULL FROM EMP
WHERE DEPT = DEPT.DEPT AND SAL > 10000);

Cette interrogation liste le nom des dpartements qui ont au moins un employ ayant plus
de 10.000 comme salaire ; pour chaque ligne de DEPT la sous-interrogation synchronise
est excute et si au moins une ligne est trouve dans la table EMP, EXISTS prend la valeur
vrai et la ligne de DEPT satisfait les critres de l'interrogation.
Souvent on peut utiliser IN la place de la clause EXISTS. Essayez sur l'exemple
prcdent.

Remarque :

Il faut se mfier lorsque l'on utilise EXISTS en prsence de valeurs NULL. Si


on veut par exemple les employs qui ont la plus grande commission par la
requte suivante,
select nome from emp e1
where not exists
(select matr from emp
where comm > e1.comm)
on aura en plus dans la liste tous les employs qui ont une commission
NULL.

G.

Division avec la clause EXISTS

NOT EXISTS permet de spcifier des prdicats o le mot tous intervient dans un
sens comparable celui de l'exemple. Elle permet d'obtenir la division de deux relations.
On rappelle que la division de R par S sur l'attribut B (note R S)
Est define par:

Ralis par :A BENDAOUD

117

Faisons une traduction mot mot de cette dernire dfinition en langage SQL

Exemple : 1
select A from R R1
where not exists
(select C from S
where not exists
(select A, B from R
where A = R1.A and B = S.C))

En fait, on peut remplacer les colonnes des selects placs derrire des not Exists par ce que
l'on veut, puisque seule l'existence ou non d'une ligne compte. On peut crire par exemple :

Exemple : 2
select A from R R1
where not exists
(select null from S
where not exists
(select null from R
where A = R1.A and B = S.C))

On arrive souvent optimiser ce type de select en utilisant les spcificits du cas, le plus
souvent en simplifiant le select externe en remplaant une jointure de tables par une seule
table.
La rponse la question Quels sont les dpartements qui participent
tous les projets ?_ est fourni par R _Dept S o R = (PARTICIPATION
JN{Matr} EMP) [Dept, CodeP] (_JN{Matr}_ indique une jointure naturelle
sur l'attribut Matr) et S = PROJET [CodeP]
Ralis par :A BENDAOUD

118

Il reste faire la traduction _mot mot_ en SQL :

Exemple : 3
SELECT DEPT
FROM PARTICIPATION NATURAL JOIN EMP E1
WHERE NOT EXISTS
(SELECT CODEP FROM PROJET
WHERE NOT EXISTS
(SELECT DEPT, CODEP
FROM PARTICIPATION NATURAL JOIN EMP
WHERE DEPT = E1.DEPT
AND CODEP = PROJET.CODEP))

Remarque 4.10

Remarque : 1

Il faudrait ajouter DISTINCT dans le premier select pour viter les doublons.
Sur ce cas particulier on voit qu'il est inutile de travailler sur la jointure
de PARTICIPATION et de EMP pour le SELECT externe. On
peut travailler sur la table DEPT. Il en est de mme sur tous les cas
o la table R est une jointure. D'aprs cette remarque, le SELECT
prcdent devient :
SELECT DEPT FROM DEPT
WHERE NOT EXISTS
(SELECT CODEP FROM PROJET
WHERE NOT EXISTS
(SELECT DEPT, CODEP
FROM PARTICIPATION NATURAL JOIN EMP
WHERE DEPT = DEPT.DEPT
AND CODEP = PROJET.CODEP))

Remarque : 2

Dans le cas o il est certain que la table dividende (celle qui est divise
ne contient dans la colonne qui sert pour la division que des valeurs qui
existent dans la table diviseur, on peut exprimer la division en utilisant
les regroupements (tudis dans la prochaine section) et en comptant
les lignes regroupes. Pour l'exemple des dpartements qui participent
tous les projets, on obtient :
select dept
from emp natural join participation
group by dept
Ralis par :A BENDAOUD

119

having count(distinct codeP) =


(select count(distinct codeP) from projet)

Traduction : si le nombre des codeP associs un dpartement donn est gal au nombre des
tous les codeP possibles, a signifie que ce dpartement est associ tous les dpartements. Ici on a
bien le rsultat cherch car les codeP du select sont ncessairement des codeP de la table des
projets (cl trangre de PARTICIPATION qui rfrence la cl primaire de la table PROJET). Si un
ensemble A est inclus dans un ensemble B et si A a le mme nombre d'lments que B,
c'est que A =B.
Mais il ne faut pas oublier que dans des requtes complexes les donnes qui interviennent dans
les divisions peuvent provenir de requtes embotes. Il n'y a alors pas ncessairement de
contraintes de rfrence comme dans l'exemple trait ici (contrainte qui impose que codeP doit
ncessairement correspondre un codeP dans la table Projet). Si on n'a pas A _ B, le fait que A et B
aient le mme nombre d'lments ne signifie pas que A = B.
S'il peut y avoir dans la colonne qui sert pour la division des valeur qui n'existent pas dans la table
diviseur, la requte est lgrement plus complexe :

select dept
from emp natural join participation
where codeP in
(select codeP from projet)
group by dept
having count(distinct codeP) =
(select count(distinct codeP) from projet)

III.

Fonctions de groupes

Les fonctions de groupes peuvent apparatre dans le Select ou le Having ; ce sont les fonctions
suivantes :
AVG
SUM
MIN
MAX
VARIANCE
STDDEV
COUNT(*)
Ralis par :A BENDAOUD

moyenne
somme
plus petite des valeurs
plus grande des valeurs
variance
cart type (dviation standard)
nombre de lignes
120

COUNT(col )
nombre de valeurs non nulles de la colonne
COUNT(DISTINCT col ) nombre de valeurs non nulles di_rentes

Exemple :
(a) SELECT COUNT(*) FROM EMP
(b) SELECT SUM(COMM) FROM EMP WHERE DEPT = 10

Dans le reste du cours groupement en travaille avec la table dont le script de creation est :
Create table EMP(code int,nom nvarchar(30),COMM decimal(8,2),DEPT int,sal
decimal(8,2),poste nvarchar(30))

Les valeurs NULL sont ignores par les fonctions de groupe. Ainsi, SUM(col) est la somme des
valeurs qui ne sont pas gales NULL de la colonne 'col'.
De mme, AVG est la somme des valeurs non NULL divise par le nombre de valeurs non NULL.
Il faut remarquer qu' un niveau de profondeur (relativement aux sous interrogations), d'un
SELECT, les fonctions de groupe et les colonnes doivent tre toutes du mme niveau de
regroupement. Par exemple, si on veut le nom et le salaire des employs qui gagnent le plus dans
l'entreprise, la requte suivante provoquera une erreur :
La requte qui donne le nom de lemploy qui a le plus grand salaire
Attention :

SELECT NOME, SAL FROM EMP


WHERE SAL = MAX(SAL)

Il faut une sous-interrogation car MAX(SAL) n'est pas au mme niveau de regroupement que le
simple SAL :
SELECT NOME, SAL FROM EMP
WHERE SAL = (SELECT MAX(SAL) FROM EMP)

Requte qui donne les noms des employs qui ont un salaire suprieur au salaire maximum des
secrtaires

Ralis par :A BENDAOUD

121

Clause GROUP BY
Il est possible de subdiviser la table en groupes, chaque groupe tant l'ensemble des lignes ayant
une valeur commune.

Syntaxe :
GROUP BY exp1, exp2,...

Group by permet de grouper en une seule ligne toutes les lignes pour lesquelles exp1, exp2,...
ont la mme valeur.
Cette clause se place juste aprs la clause WHERE, ou aprs
la clause FROM si la clause WHERE n'existe pas.
Des lignes peuvent tre limines avant que le groupe ne soit form grce
la clause WHERE.

Exemple :
(a) SELECT DEPT, COUNT(*) FROM EMP
GROUP BY DEPT
Cette requte donne le nombre des employes par departement

(b) SELECT DEPT, COUNT(*) FROM EMP


WHERE POSTE = 'SECRETAIRE'
GROUP BY DEPT
Cette requte donne le nombre des employes secrtaires par departement

(c) SELECT DEPT, POSTE, COUNT(*) FROM EMP


GROUP BY DEPT, POSTE
Cette requte donne le nombre des employes par departement et poste
(d) SELECT NOME, DEPT FROM EMP
WHERE (DEPT, SAL) IN
(SELECT DEPT, MAX(SAL) FROM EMP
GROUP BY DEPT)
(d) sous sql server 2008

select E.nom,p.dept from EMP E


where sal =(select MAX(sal) from EMP
where dept=E.dept group by dept)
Ralis par :A BENDAOUD

122

Cette requte donne les noms des employs qui ont le plus grand salaire par
departement

RESTRICTION :
Une expression d'un SELECT avec clause GROUP BY ne peut videmment que
correspondre une caractristique de groupe. SQL n'est pas trs intelligent pour
comprendre ce qu'est une caractristique de groupe ; une expression du SELECT ne peut
tre que :
soit une fonction de groupe,
soit une expression figurant dans le GROUP BY.
L'ordre suivant est invalide car NOMD n'est pas une expression du GROUP BY :
SELECT NOMD, SUM(SAL)
FROM EMP INNER JOIN DEPT
GROUP BY DEPT

Il faut, soit se contenter du numro de dpartement au lieu du nom :


SELECT DEPT, SUM(SAL)
FROM EMP INNER JOIN DEPT
GROUP BY DEPT
Soit modifier le GROUP BY pour avoir le nom du dpartement :
SELECT NOMD, SUM(SAL)
FROM EMP INNER JOIN DEPT
GROUP BY NOMD

Clause HAVING
HAVING prdicat Sert prciser quels groupes doivent tre slectionns.
Elle se place aprs la clause GROUP BY.
Le prdicat suit la mme syntaxe que celui de la clause WHERE. Cependant,
il ne peut porter que sur des caractristiques de groupe : fonction de
Groupe ou expression figurant dans la clause GROUP BY.

Exemple :
SELECT DEPT, COUNT (*)
FROM EMP
Ralis par :A BENDAOUD

123

WHERE POSTE = 'SECRETAIRE'


GROUP BY DEPT HAVING COUNT(*) > 1
Cette requte donne les dpartements qui ont plus dune secrtaire

On peut videmment combiner toutes les clauses, des jointures et des Sousinterrogations. La requte suivante donne le nom du dpartement (et son nombre de
secrtaires) qui a le plus de secrtaires :
SELECT NOMD , COUNT(*) as "Nombre de secrtaires"
FROM EMP INNER JOIN DEPARTEMENT DEP ON EMP.DEPT=DEP.DEPT
WHERE POSTE = 'SECRETAIRE'
GROUP BY NOMD HAVING COUNT(*) =
(SELECT MAX(COUNT(*)) FROM EMP
WHERE POSTE = 'SECRETAIRE'
GROUP BY DEPT)
On remarquera que la dernire sous-interrogation est indispensable car MAX (COUNT(*))
n'est pas au mme niveau de regroupement que les autres Expressions du premier
SELECT.
La question est : la
secrtaires

liste des dpartements qui ont le plus grand nombre de

Requte corrige
SELECT NOMD , COUNT(*) as "Nombre de secrtaires"
FROM EMP INNER JOIN DEPT on EMP.CodeDEP=DAPT.codeDEP
WHERE POSTE = 'SECRETAIRE'
GROUP BY NOMD HAVING COUNT(*)> = all
(SELECT COUNT(*) FROM EMP
WHERE POSTE = 'SECRETAIRE'
GROUP BY DEPT)

1.

Exercice dapplication

1- La requte qui affiche le salaire moyen par dpartement


2- La requte qui affiche les employs qui ont un salaire suprieur au salaire moyen de leur
dpartement.
3- La requte qui affiche les dpartements qui ont pour salaire moyen suprieur au salaire
moyen de tous les employs
4- Les dpartements qui ont le salaire moyen des secrtaires est suprieur au salaire moyen des
vendeurs de la mme dpartement
5- Les dpartements qui nont pas de secrtaire

Ralis par :A BENDAOUD

124

2.

Reponses

1- Select nom_dep ,avg(salaire) as SalMoy from employe Emp INNER JOIN Departement Dep
ON Emp.CodeDep=Dep.CodeDep
GROUP BY nom_dep
2- Select nom, salaire from Employe e1
where
e1.salaire >=(select AVG(salaire) as SalMoyfrom Employe e2
where e2.CodeDep=e1.CodeDep
GROUP BY CodeDep )
3- Select codeDep,avg(salaire)
From EM
Group By codeDep
having avg(salaire)>=(select avg(salaire) from EMP )
4- Select E1.codeDEP ,avg(salaire)
from EMP E1
where E1.poste=secretaire
group by E1.codeDEP
having avg(salaire)>=( Select avg(salaire)
from EMP E2
where E2.poste=vendeur and E2.codeDEP= E1.codeDEP
group by E2.codeDEP
ici on a utilis une requte imbrique synchronis(corrle)

select distinct dept from EMP p


where p.dept not in(
select dept
from EMP
where poste='secretaire'
group by dept)
5)

IV.

Fonctions

Nous allons dcrire ci-dessous les principales fonctions disponibles dans Oracle. Il faut remarquer
que ces fonctions ne sont pas standardises et ne Sont pas toutes disponibles dans les autres SGBD;
elles peuvent aussi avoir Une syntaxe diffrente, ou mme un autre nom.

A.

Fonctions arithmtiques

ABS(n)
Ralis par :A BENDAOUD

valeur absolue de n
125

MOD (n1, n2)

n1 modulo n2

POWER (n, e)

n la puissance e

ROUND (n [, p])

arrondit n la prcision p (0 par dfaut)

SIGN(n)

-1 si n<0, 0 si n=0, 1 si n>0

SQRT(n)

racine carre de n

TRUNC (n [, p])

tronque n la prcision p (0 par dfaut)


Convertit une expression d'un type de
donnes en un autre.

CONVERT

Exemple : Calcul du salaire journalier


SELECT NOME, ROUND (SAL/22, 2) FROM EMP

B.

Fonctions chane de caractres

Concatnation :
il est possible de concatner des chanes avec l'oprateur + ;

Exemple :
select '2 a la puissance 4 est :' +
convert(nvarchar(10),POWER(2,4))

LEN (chane) :
Prend comme valeur la longueur de la chane.
SUBSTRING :

SUBSTRING (chane, position , longueur)


Ralis par :A BENDAOUD

126

SUBSTRING('salut',2,3) retourne

alu

Extrait de la chane chane une sous-chane de longueur longueur commenant En position


position de la chane. Le paramtre longueur est facultatif : par dfaut, la sous-chane va jusqu'
l'extrmit de la chane.
UPPER :
UPPER (chane) convertit en majuscules
LOWER :
LOWER (chane) convertit en minuscules
LTRIM :
LTRIM (chane)
Renvoie une chane de caractres aprs avoir supprim les espaces de dbut.

select LTRIM('

salut') retoutne salut

RTRIM :
RTRIM (chane)
Renvoie une chane de caractres aprs la suppression des espaces de fin

select RTRIM('salut') retourne

salut

LEFT :
Retourne la partie de gauche d'une chane de caractres avec le nombre spcifi de caractres.

RIGHT :
Renvoie la partie d'une expression de caractres qui commence et se situe droite d'une position
de caractre spcifie partir de la droite.

REPLACE :
Renvoie une expression de caractres aprs le remplacement d'une chane de caractres situe
dans l'expression par une autre chane de caractres ou une chane vide

REPLACE('06:67:87:67/103',':','.') retourne O6.67.87.67/103

C.

Les fonctions des dates :

DATEADD :
Renvoie une nouvelle valeur DT_DBTIMESTAMP aprs l'ajout d'un nombre qui reprsente un
intervalle de date ou d'heure la partie de date spcifie d'une date. Le paramtre numrique doit

Ralis par :A BENDAOUD

127

Exemple : L'exemple suivant ajoute un mois la date actuelle.

Exemple : L'exemple suivant ajoute 21 jours aux dates de la colonne ModifiedDate

DATEADD("day", 21, ModifiedDate)


DATEADD("Month", 1,GETDATE())

DATEDIFF :
Renvoie le nombre de limites de date et d'heure traverses entre deux dates donnes. Le paramtre
datepart identifie quelles limites de date et d'heure il faut comparer.

Le tableau suivant dcrit les parties de date et les abrviations reconnues par l'valuateur
d'expression.
Partie de date

Abrviations

Anne

yy, yyyy

Trimestre

qq, q

Mois

mm, m

Jour de l'anne

dy, y

Ralis par :A BENDAOUD

128

Jour

dd, d

Exemple : L'exemple suivant calcule le nombre de jours entre deux littraux de


date. la fonction renvoie 7

select DATEDIFF(dd, '1/8/2003', '8/8/2003')


Semaine

wk, ww

Jour de la semaine

dw, w

Heure

Hh

Minute

mi, n

Seconde

ss, s

Milliseconde

Ms

Exemple :
La difference entre la date 8/1/2003 ET LA DATE actuelle
07/12/2009

select GETDATE()
SELECT DATEDIFF(mm, '8/1/2003',GETDATE())

Ralis par :A BENDAOUD

129

CHAPITRE 6
Leon 1 : Transaction SQL
Objectifs : vous serez mme d'effectuer les tches
suivantes

I.

Commencer, valider ou annuler des transactions


Grer les erreurs par programmation

Initialisation validation ou annulation de transaction

Lorsque vous modifiez des donnes dans une base de donnes, une des choses les plus
importantes prendre en compte par les dveloppeurs est la faon de sassurer que ces donnes
restent dans un tat cohrent. un tat cohrent signifie qu tout moment toutes les donnes de la
base de donnes doivent tre correctes.les donnes incorrectes doivent tre supprimes ou mieux
encore, jamais insres.
Les transactions sont le mcanisme primaire par lequel vous pouvez par programmation veiller
la cohrence des donnes. Lorsque vous dbutez une transaction, toute modification de donnes
effectue nest, par dfaut, visible que par votre connexion.les autres connexions ne peuvent pas
voir votre modification. Elles doivent attendre que la transaction soit valide (la modification est
inscrite dans la base de donnes) ou annule
, auquel cas les donnes retrouvent leur aspect antrieur au dbut de la transaction
Ralis par :A BENDAOUD

130

Le processus fondamental employer lors du travail avec les transactions est le suivant :
1. Initiez une transaction laide de la commande BEGIN TRANSACTION
2. Une transaction initie par BEGIN TRANSACTION va enregistrer toutes les modifications
de donnes accomplies par votre connexion : insertion, mise jour et /ou suppression
3. La transaction ne prend fin que lorsque vous la validez ou que vous lannulez
Vous validez une transaction et enregistrer les modifications laide de la commande COMMIT
TRANSACTION ou lannulez laide de la commande ROLLBACK TRANSACTION.si a tout moment
aprs le dbut de la transaction, vous dtectez un problme, ROLLBACK transaction permet de
revenir aux donnes originales.

Exemple :
USE AdventureWorksDW2008;
GO
IF OBJECT_ID(N'TestTran',N'U') IS NOT NULL
DROP TABLE TestTran;
GO
CREATE TABLE TestTran (Cola INT PRIMARY KEY, Colb
CHAR(3));
GO
-- This statement sets @@TRANCOUNT to 1.
BEGIN TRANSACTION transact1;
GO
PRINT N'nombre de transaction aps BEGIN transact1 = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
INSERT INTO TestTran VALUES (1, 'aaa');
GO
COMMIT TRANSACTION transact1;
PRINT N'nombre de transaction aprs commit transact1 = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
GO

Exemple : Utilisation de ROLLBACK TRANSACTION

USE TempDB;
GO
Ralis par :A BENDAOUD

131

CREATE TABLE ValueTable ([value] int)


GO
--debut de la procedure Transaction1,
--insertion de deux lignes
BEGIN TRANSACTION Transaction1;
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
ROLLBACK TRANSACTION Transaction1;
INSERT INTO ValueTable VALUES(3);
INSERT INTO ValueTable VALUES(4);
SELECT * FROM ValueTable
DROP TABLE ValueTable

A.

Dtection des erreurs

Nous allons donc ajouter une partie de gestion d'erreurs notre code. Pour rcuprer
une erreur, il suffit d'employer la variable prdfini @@ERROR qui contient l'erreur pour
la dernire requte effectue. Nous allons donc dclarer une variable @errors pour
stocker les diffrentes erreurs rcupres lors de l'excution :

BEGIN TRANSACTION changement_etat_civil --On dmarre une transaction et


on lui donne un nom
DECLARE @errors INT --On dclare une variable qui sera destin
accueillir nos erreurs
DECLARE @ID_INSERTION NUMERIC(19,0) -- On dclare une variable
numrique destine contenir l'id insr
UPDATE T_TEXTES SET
SET @error = @error
UPDATE T_TEXTES SET
SET @error = @error

TEXTE='Divorc(e)' WHERE ID = '1'


+ @@error
TEXTE='IT:Divorc(e)' WHERE ID = '2'
+ @@error

UPDATE T_TEXTES SET TEXTE='Mari(e)' WHERE ID = '3'


SET @error = @error + @@error
INSERT INTO T_VALEUR_PARAMETRE (version, PARAM_CODE, OFFICE, PARAMETRE)

Ralis par :A BENDAOUD

132

VALUES (GetDate() 'etatCivil.values.pacs.value', '6', '99')


SET @errors = @errors + @@ERROR --On additionne l'erreur lie la
dernire requte SQL dans notre variable
SET @errors = @errors + @@ERROR --On additionne l'erreur lie la
dernire requte SQL dans notre variable
SET @ID_INSERTION = @@identity --On rcupre la valeur du dernier id
insr et on le stocke dans notre variable
INSERT INTO T_TEXTES (TEXTE, LANGUE, VALEUR_PARAMETRE)
VALUES('Li(e) par un partenariat enregistr','fr', @ID_INSERTION)
SET @errors = @errors + @@ERROR --On additionne l'erreur lie la
dernire requte SQL dans notre variable
INSERT INTO T_TEXTES (TEXTE, LANGUE, VALEUR_PARAMETRE)
VALUES('IT:Li(e) par un partenariat enregistr','it', @ID_INSERTION)
SET @errors = @errors + @@ERROR --On additionne l'erreur lie la
dernire requte SQL dans notre variable
INSERT INTO T_TEXTES (TEXTE, LANGUE, VALEUR_PARAMETRE)
VALUES('Verbunden
durch
eine
eingetragene
Partnerschaft','de',
@ID_INSERTION)
SET @errors = @errors + @@ERROR --On additionne l'erreur lie la
dernire requte SQL dans notre variable
COMMIT TRANSACTION changement_etat_civil --On commit cette transaction,
c'est dire qu'on valide ses modifications
Vous pouvez aussi afficher les erreurs avec :
PRINT 'Statut de l'erreur : ' + CAST(@errors AS VARCHAR(10)) --On
affiche le statut de l'erreur cast sous forme de caractre
Juste avant le commit.

B.

Gestion des erreurs

Bon, c'est bien beau, vous me direz, on voit les erreurs, mais en cas d'erreurs notre
base est toujours incohrente. Bien, ca prouve que vous suivez. Une astuce pour cela est
de dclarer notre variable @errors 1, comme a, si la fin de l'excution des requtes,
elle n'est plus un, on sait qu'il y a eu une erreur et on peut faire quelque chose.

DECLARE @errors INT


SET @errors = 0 --On dclare notre variable 0
--Vos requtes

Ralis par :A BENDAOUD

133

On va maintenant contrler s'il y a eu ou non des erreurs et s'il y en a eu, on va


annuler toutes les oprations faites dans la transaction en utilisant la commande
ROLLBACK TRANSACTION :
IF @errors = 0 --Si errors est gale 0, donc s'il n'y a eu aucune
erreur
COMMIT
TRANSACTION
changement_etat_civil
-On
commit
la
transaction
ELSE --S'il y a eu des erreurs
ROLLBACK TRANSACTION changement_etat_civil --On annule tous les
changements de cette transaction

Travaux pratiques
Soit la base de donnes suivante :

Client
CodeCl
nom
prenom

Compte
numCompte
#codeCl
sole
date Ouverture

On veut transfrer un montant dun compte C1 a un autre compte C2


C dire que le compte C1 sera dbit dun montant M1 et ce mme montant sera crdit
Au compte C2 autrement dit on va soustraire le montant M1 le solde du compte C1
Et ajouter M1 au solde du compte C2 ces deux actions doivent constituer une seule
transaction pour avoir la cohrence des donnes.
Faire une conception transactionnelle pour rpondre a ce besoin

Ralis par :A BENDAOUD

134

Ralis par :A BENDAOUD

135

Liste des rfrences bibliographiques.


Ouvrage
Implmentation et maintenance de SQL
server
Langage SQL

Auteur
Microsoft Press

Edition

richard Grin version

5.4.5 du polycopi
http://webtic.free.fr/sql/
http://georges.gardarin.free.fr/
http://baptistewicht.developpez.com/tutoriel/mssql/securiser

Ralis par :A BENDAOUD

136

Вам также может понравиться