Академический Документы
Профессиональный Документы
Культура Документы
II.
Objectifs......................................................................................................................... 11
B.
I.
II.
B.
III.
A.
IV.
A.
1.
2.
3.
B.
C.
D.
Les Schmas....................................................................................................................... 31
V.
I.
B.
Autorisations ..................................................................................................................... 36
A.
Retirer privilges............................................................................................................... 38
B.
C.
2.
Dfinition ........................................................................................................................... 44
B.
C.
II.
B.
C.
D.
E.
I.
B.
C.
D.
E.
F.
G.
H.
Ligne de COM
I.
Article ............................................................................................. 67
I.
II.
I.
I.
B.
C.
D.
E.
1.
2.
II.
III.
A.
B.
C.
IV.
V.
VI.
MODIFIER UN TABLEAU......................................................................................................... 90
A.
B.
C.
D.
E.
Ajout d'une contrainte CHECK non vrifie une colonne existante ............................... 93
F.
G.
I.
Insertion ............................................................................................................................ 96
B.
Modification ...................................................................................................................... 97
Suppression .................................................................................................................................. 99
I.
B.
C.
D.
E.
II.
B.
C.
2.
3.
4.
D.
E.
F.
G.
III.
IV.
A.
1.
2.
I.
B.
C.
B.
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 :
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
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
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 :
CHAPITRE : 1
Leon1 : Systme de gestion des bases de donnes
10
I.
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
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)
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)
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)
Afin dviter les problmes lors des mises jour, chaque donne ne doit tre prsente quune
seule fois dans la base.
f)
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
12
g)
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)
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)
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.
13
II.
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.
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.
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
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.
Reporting Services
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.
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
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
20
Chapitre 2
Matrise des Concepts de base de scurit
21
Chapitre 2
Leon 1 : Matrise des Concepts de base de scurit
I.
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
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.
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.
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 :
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.
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.
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 :
24
IV.
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
A.
25
1.
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
syntaxe :
EXEC master..sp_addsrvrolemember @loginame = N'cn1', @rolename
=N'setupadmin'
GO
2.
3.
Il existe des rles prdfinis de base de donnes SQL server Qui sont :
26
Description
db_owner
db_securityadmin
db_accessadmin
db_backupoperator
db_ddladmin
db_datawriter
db_datareader
db_denydatawriter
db_denydatareader
Ladministrateur de serveur peut dfinir ses propres rles par Exemple (cre un rle vendeurs qui
contient tous les vendeurs)
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 :
Exemple :
USE [vente] GO
CREATE APPLICATION ROLE [roleApp2] WITH
DEFAULT_SCHEMA=[dbo],PASSWORD=N'azerty'
GO
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.
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.
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.
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
enable
Crer
lutilisateur alisalem
partir de la connexion log11
30
exec sp_who
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.
31
syntaxe :
USE [AdventureWorksDW2008]
GO
CREATE SCHEMA [schema1] AUTHORIZATION [dbo]
GO
Exemple:
achats
ventes
T1
T3
T4
T2
T6
T5
alter
32
ventes
achats
T3
T1
T5
T2
E.
T6
T4
CREATE
CREATE
CREATE
CREATE
USER
USER
USER
USER
[user1]
[user2]
[user3]
[user4]
FOR
FOR
FOR
FOR
LOGIN
LOGIN
LOGIN
LOGIN
[CN1]
[CN2]
[CN3]
[CN4]
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
33
Travaux pratiques
Ralisez les travaux pratiques se trouvant dans le dossier document
TP1
TP2
34
Chapitre 2
Leon 2 : gestion des droits et permissions
Objectifs: vous serez mme d'effectuer les tches suivantes
V.
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.
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
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]
38
B.
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.
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:
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
L'attribution de permissions
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.
La rvocation de permissions
Syntaxe :
REVOKE
[GRANT OPTION FOR] Liste_de_permissions
ON Liste_d_objets
FROM Liste_d_utilisateurs;
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
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 :
41
conclusion :
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
42
CHAPITRE 3
Leon1 : Notion de base de donnes
Objectifs : vous serez mme d'effectuer les tches
suivantes :
43
I.
Dfinition
B.
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.
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
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
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
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
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 :
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.
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
ALL
FRA
B-G
ITA
49
B.
Exemple :
SELECT DISTINCT codePays FROM Coureurs ;
SELECT DISTINCT NomCoureur, codePays FROM Coureurs;
C.
Opration RESTRICTION
Syntaxe :
Formalisme : R = SELECTION (R1, condition)
50
NumroCoure
NomCoureur
CodeEquipe
CodePays
ur
31
JALABERT Laurent
ONC
FRA
61
ROMINGER Tony
COF
FRA
Exemple :
SELECT * FROM Coureurs WHERE CodePays=FRA;
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%' ;
Affiche la liste des tudiants qui ont un codePoste qui commence par 42
SELECT *
FROM ETUDIANT
WHERE CodePostal 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.
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 :
53
E.
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
OUTER
JOIN
Dtail_Commande
*
ON
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
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.
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
56
Chapitre 3 :
Leon2 : les oprations ensemblistes
Opration union
Opration intersection
Opration Diffrence
Opration produit cartsien
Opration division
Opration tri
57
I.
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
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
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
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.
Exemple :
SELECT nenseignant, NomEnseignant FROM E1
UNION
SELECT nenseignant, NomEnseignant FROM E2 ;
C.
Opration INTERSECTION
nom_enseignant
DUPONT
nom_enseignant
DUPONT
60
DURAND
MARTIN
MARTIN
MICHEL
BERTRAND
nom_enseignant
DUPONT
MARTIN
D.
61
Syntaxe :
Syntaxe :
Exemple :
SELECT nenseignant, NomEnseignant FROM E1
WHERE nenseignant IN (SELECT nenseignant FROM E2) ;
ou
Exemple :
Ralis par :A BENDAOUD
62
E.
Opration DIFFERENCE
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
63
F.
Syntaxe :
Syntaxe :
Syntaxe :
Syntaxe :
Syntaxe :
64
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
NULL
E2.NomEnseignant
DUPONT
NULL
MARTIN
NULL
65
G.
Epreuves
nom
libell preuve
coefficient
101
DUPONT
Informatique
102
MARTIN
Mathmatiques
Gestion financire
nom
libell preuve
coefficient
101
DUPONT
Informatique
101
DUPONT
Mathmatiques
101
DUPONT
Gestion financire
102
MARTIN
Informatique
102
MARTIN
Mathmatiques
102
MARTIN
Gestion financire
1.
66
Exemple :
Syntaxe :
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
67
1050
CS20
1070
CS20
1021
CS10
1050
CS30
1021
CS20
1070
CS30
Rponse :
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, ... ;
68
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.
69
4 - Donner la liste des titres des reprsentations, les lieux et les tarifs pour la
journe du 14/09/96.
70
Chapitre 4
Leon 1 : Langage de dfinition des donnes
71
I.
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
Decimal
A fixed precision and fixed scale numeric value between -1038 -1 and +1038 1.
numrique
exect
numriq
ue
approximati
fs
Int
A fixed precision and fixed scale numeric value between -1038 -1 and +1038 -
Numeric
1.
SmallInt
TinyInt
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.
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
VarBinaryMax
A VARBINARY(MAX) type.
Bit
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.
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.
73
Exemple :
CREATE TABLE Article
(ref char(10) NOT NULL ,
prix numeric(18,2),
dateMaj Datetime )
A.
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
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
75
Chapitre 4
Leon 2 : mise en uvre des contraintes
Objectifs: A la fin de cette leon, vous saurez
I.
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
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.
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.
77
Important :
I.
A.
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
78
B.
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.
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 :
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);
82
2.
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)
)
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.
83
II.
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 :
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.
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 :
85
Remarque :
III.
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.
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),
86
B.
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 :
87
Attention :
vous ne pouvez pas dfinir une contrainte d'unicit sur des colonnes de type BLOB
C.
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.
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)
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 :
89
V.
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.
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 :
90
B.
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.
L'exemple suivant modifie le type d'une colonne d'une table de INT en DECIMAL.
Exemple :
Ralis par :A BENDAOUD
91
D.
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
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.
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
93
G.
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
94
Travaux Dirigs
Soit la base de donnes suivante :
Appartement
codeAp
type
surface
#codeIm
Immeuble
codeIm
Adresse
ville
95
CHAPITRE 5
Leon 1 : langage de manipulation des donnes
Objectifs :vous serez mme d'effectuer les tches
suivantes
I.
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
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 :
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'
98
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
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.
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.
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
100
Suppression
L'ordre DELETE permet de supprimer des lignes d'une table.
Syntaxe :
Ralis par :A BENDAOUD
101
Attention :
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
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
103
Chapitre 5
Leon 2 : Interroger une base de donnes
Objectifs : vous serez mme d'effectuer les tches suivantes
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
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
Exemple :
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)
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
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.
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.
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'
Exemple :
SELECT NOME FROM EMP
WHERE POSTE = (SELECT POSTE
FROM EMP
WHERE NOME = 'MARTIN')
A.
Exemple :
Liste des employs travaillant dans le mme dpartement que MERCIER
Syntaxe :
WHERE exp op (SELECT ...)
109
Exemple :
SELECT NOM FROM EMP
WHERE DEPT = (SELECT DEPT FROM EMP WHERE NOME = 'MERCIER')
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')
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')
110
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 :
B.
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 :
111
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 :
C.
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 :
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 :
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.
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.
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.
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 ...)
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
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 :
G.
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:
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
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
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 :
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
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
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
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
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
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
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)
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
n1 modulo n2
POWER (n, e)
n la puissance e
ROUND (n [, p])
SIGN(n)
SQRT(n)
racine carre de n
TRUNC (n [, p])
CONVERT
B.
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 :
126
SUBSTRING('salut',2,3) retourne
alu
select LTRIM('
RTRIM :
RTRIM (chane)
Renvoie une chane de caractres aprs la suppression des espaces de fin
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
C.
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
127
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
128
Jour
dd, d
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())
129
CHAPITRE 6
Leon 1 : Transaction SQL
Objectifs : vous serez mme d'effectuer les tches
suivantes
I.
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
USE TempDB;
GO
Ralis par :A BENDAOUD
131
A.
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 :
132
B.
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.
133
Travaux pratiques
Soit la base de donnes suivante :
Client
CodeCl
nom
prenom
Compte
numCompte
#codeCl
sole
date Ouverture
134
135
Auteur
Microsoft Press
Edition
5.4.5 du polycopi
http://webtic.free.fr/sql/
http://georges.gardarin.free.fr/
http://baptistewicht.developpez.com/tutoriel/mssql/securiser
136