Sunteți pe pagina 1din 55

Initiation aux Bases de Donnes Relationnelles

BASES de DONNEES
Ce document est bas sur les supports de cours de Rosine CICCHETTI et Nicole BIDOIT.

Introduction : lapproche Bases de donnes ............................................................................................................... 2 1.1 Approche par application .................................................................................................................................... 2 1.2 Approche Bases de Donnes ............................................................................................................................... 2 Le modle relationnel ................................................................................................................................................. 3 2.1 Rappels mathmatiques ...................................................................................................................................... 3 2.2 Concept de Relation ............................................................................................................................................ 3 2.3 Concept de Domaine ........................................................................................................................................... 4 2.4 Concept dAttribut .............................................................................................................................................. 4 2.5 Double vision dune relation ............................................................................................................................... 4 2.6 Concepts complmentaires ................................................................................................................................. 5 2.7 Schma relationnel et Contraintes dIntgrit ..................................................................................................... 5 Algbre relationnelle .................................................................................................................................................. 7 3.1 Projection ............................................................................................................................................................ 8 3.2 Slection ............................................................................................................................................................. 9 3.3 Jointure ............................................................................................................................................................. 14 3.4 Notations supplmentaires ................................................................................................................................ 22 3.4.1 Oprateur produit (jointure naturelle) ....................................................................................................... 22 3.4.2 Oprateur somme ...................................................................................................................................... 22 3.4.3 Oprateur produit cartsien ....................................................................................................................... 22 3.4.4 Oprateur union ........................................................................................................................................ 22 3.4.5 Oprateur intersection ............................................................................................................................... 22 3.4.6 Oprateur diffrence ................................................................................................................................. 23 3.4.7 Proprit des oprateurs ensemblistes ....................................................................................................... 23 3.4.8 Oprateur de projection............................................................................................................................. 23 3.4.9 Oprateur de slection............................................................................................................................... 23 Structured Query Language (SQL) ........................................................................................................................... 24 4.1 SQL LDD.......................................................................................................................................................... 24 4.1.1 Types syntaxiques (presque les domaines) ............................................................................................... 24 4.1.2 Cration de table ....................................................................................................................................... 25 4.1.3 Modification de la structure d'une table .................................................................................................... 25 4.1.4 Consultation de la structure d'une base ..................................................................................................... 25 4.1.5 Destruction de table .................................................................................................................................. 25 4.2 SQL LMD ......................................................................................................................................................... 26 4.2.1 Interrogation.............................................................................................................................................. 26 4.2.2 Insertion de donnes ................................................................................................................................. 26 4.2.3 Modification de donnes ........................................................................................................................... 26 4.2.4 Suppression de donnes ............................................................................................................................ 26 Les clauses de SELECT ............................................................................................................................................ 27 5.1 Expression des projections ................................................................................................................................ 27 5.2 Expression des slections .................................................................................................................................. 28 5.3 Calculs horizontaux .......................................................................................................................................... 30 5.4 Calculs verticaux (fonctions agrgatives) ......................................................................................................... 33 5.5 Expression des jointures sous forme prdicative .............................................................................................. 34 5.6 Autre expression de jointures : forme imbrique .............................................................................................. 35 5.7 Tri des rsultats ................................................................................................................................................. 38 5.8 Test dabsence de donnes ................................................................................................................................ 38 5.9 Classification ou partitionnement ..................................................................................................................... 40 5.10 Recherche dans les sous-tables ......................................................................................................................... 41 5.11 Recherche dans une arborescence ..................................................................................................................... 42 5.12 Expression des divisions ................................................................................................................................... 45 5.13 Gestion des transactions .................................................................................................................................... 48 SQL comme langage de contrle des donnes.......................................................................................................... 49 6.1 Gestion des utilisateurs et de leurs privilges ................................................................................................... 49 6.1.1 Cration et suppression dutilisateurs ....................................................................................................... 49 6.1.2 Cration et suppression de droits .............................................................................................................. 50 6.2 Cration d'index ................................................................................................................................................ 52 6.3 Cration et utilisation des vues ......................................................................................................................... 52 Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

BASES de DONNEES
Ce document est bas sur les supports de cours de Rosine CICCHETTI et Nicole BIDOIT.

1 Introduction : lapproche Bases de donnes


1.1 Approche par application
Automatisation des tches et enchanement de traitements Avantages : - Facilit de mise en uvre - Vision globale non ncessaire Inconvnients : - Redondance des donnes o dperdition de stockage o danger dincohrence - Dpendances des niveaux logique et physique - Dpendances des donnes et des traitements

1.2 Approche Bases de Donnes


Bases de Donnes : Rservoir unique de donnes, commun aux diffrents utilisateurs SGBD : Systme de Gestion de Bases de Donnes Avantages : - Trs nombreux Inconvnients : - Difficult de mise en uvre - Nouveaux problmes de scurit - Difficult de conception Univers rel SI MCD Drivation et Normalisation MLD BD MPD Implmentation et optimisation Modle de Bases de Donnes (hirarchique, rseaux, relationnelle, objet) Conception

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

2 Le modle relationnel
Dfini par Codd (IBM) en 1970 - Bas sur la thorie ensembliste - Structure et langage trs simple

2.1 Rappels mathmatiques


Produit cartsiens : A a1 a2 a3 B b1 b2

A x B = { (a1b1), (a1b2), (a2b1), (a2b2), (a3b1), (a3b2) } = { (ai bj) / ai A et bj B } Le produit cartsien de deux ensembles A et B, est lensemble A x B de tous les couples possibles forms dun lment de A et dun lment de B.

2.2 Concept de Relation


Relation entre 2 ensembles : sous-ensemble du produit cartsien R A x B Exemple : R1 = { (a1b1), (a2b2) } R2 = { (a3b2) } R3 = { (a1b1), (a1b2), (a2b1), (a2b2), (a3b1), (a3b2) } = A x B Relation : un sous-ensemble du produit cartsien des n ensembles de valeurs qui sont appels des domaines Exemple : Compagnie arienne AVION - 100 - 101 - 103 - 110 D_NUMAV - A300 - A320 - A330 - 300 - 60 - 350 - 500 D_CAP - Marseille - Bordeaux - Paris

D_NOMAV

D_LOC

Avion = { (100, A300, 350, Marseille), (101, A320, 500, Paris) } Une relation peut-tre vue comme un ensemble de n-uplets ou tuples. Chaque tuple dcrit un objet de lunivers rel. La relation permet de stocker des objets de mme nature ayant les mmes donnes descriptives
3 Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

2.3 Concept de Domaine


Domaine : ensemble de valeurs dot dune smantique. Diffrence par rapport aux types syntaxique : des valeurs peuvent tre comparables syntaxiquement (deux entiers, deux chanes) mais pourtant leur comparaison est absurde Exemple : D_AGE = [0..200] D_NBPERS = [0..200] Question : O est la smantique ?

2.4 Concept dAttribut


Le mme domaine peut tre utilis plusieurs fois dans une relation. Exemple : VOL D_NUMVOL x D_NUMPIL x D_NUMAV x D_VILLE x D_VILLE x D_HEURE x D_HEURE D_VILLE et D_HEURE apparaissent deux fois ! Attribut : explicite le rle jou par un domaine dans une relation => Deux attributs dans une relation ne peuvent pas avoir le mme nom. Exemple : VOL( NUMVOL :D_NUMVOL, NUMPIL :D_NUMPIL, NUMAV :D_NUMAV, VILLE_DEP :D_VILLE, VILLE_ARR :D_VILLE, H_DEP :D_HEURE, H_ARR :D_ HEURE ) Deux attributs dont la comparaison na pas de sens doivent tre dfinis sur deux domaines diffrents. Deux attributs dfinis sur le mme domaine sont dits smantiquement comparables, compatibles.

2.5 Double vision dune relation


- structure i.e. lensemble de ses attributs avec leur domaine respectif : R( A1 :D1, A2 :D2, , An :Dn) - ses donnes i.e. lensemble de ses tuples : R = { t / t(A1) D1, , t(An) Dn } Cette double vision est perceptible quand on voit la relation sous forme de table de valeurs AVION CAP LOC NUMAV NOMAV 100 A300 350 Marseille 101 A320 500 Paris PILOTE NUMPIL NOMPIL 1 Smith 2 Scott ADRESSE Marseille Bordeaux

VOL

V_ARR NUMVOL NUMAV NUMPIL H_DEP H_ARR V_DEP 1 100 1 12h00 13h20 Marseille Paris 2 100 2 14h00 15h00 Paris Bordeaux 3 101 1 16h00 17h30 Paris Bordeaux
Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

2.6 Concepts complmentaires


Clef primaire : attribut ou ensemble dattributs permettant didentifier un tuple dune relation. Exemple : NUMAV, NUMVOL, NUMPIL N Etudiant, N Personne Toute relation doit avoir une clef primaire Question : Pourquoi besoin dune clef primaire ? Domaine primaire : domaine dfini dun attribut de la clef Clef trangre : attribut dfini sur un domaine primaire et qui nest pas clef primaire dans sa relation. Exemple : VOL( , NUMPIL :D_NUMPIL, NUMAV :D_NUMAV , ) V_ARR VOL NUMVOL NUMAV NUMPIL H_DEP H_ARR V_DEP 1 100 1 12h00 13h20 Marseille Paris 2 100 2 14h00 15h00 Paris Bordeaux 3 101 1 16h00 17h30 Paris Bordeaux 100 1 12h00 13h20 Marseille Paris Question : diffrence de smantique entre NUMPIL dans PILOTE et VOL ? Degr dune relation : nombre dattribut Cardinalit dune relation : nombre de tuples Relation dynamique : possde une clef trangre Relation statique : pas de clef trangre, indpendante des autres

2.7 Schma relationnel et Contraintes dIntgrit


Schma relationnel (schma de la BD) : ensemble de relations smantiquement lies (par des couples clefs primaires / clefs trangres ou simplement des attributs compatibles). En fait, dans une BD relationnelle, des rgles de cohrence doivent tre constamment vrifies pour garantir la validit des donnes. Ces rgles de cohrence sont appeles Contrainte dIntgrit On distingue deux catgories de CI : - Dpendantes de lapplication - Lie aux concepts du relationnel o CI de domaine : toute valeur dun attribut doit appartenir son domaine de dfinition o CI de relation : toute valeur de clef primaire doit exister et tre unique Remarque : une valeur inexistante dans la base de donnes est appele valeur nulle (NULL) (valeur impossible ou valeur inconnue)

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

o CI de rfrence : toute valeur de clef trangre doit exister pour la clef primaire associe, i.e. NUMAV dans VOL - 100 - 101 NUMAV dans AVION - 100 - 101 - 103 - 110

Exemple : impossible de crer un VOL si lavion et le pilote nexiste pas dj dans la base de donnes. Ordre dans linsertion de tuples : dabord les relations statiques puis les relations dynamiques Ordre dans la suppression de tuples Ordre dans la cration des relations CI applicatives ou dynamiques : toute contrainte de cohrence lie lapplication Exemples : - Pas de recouvrement de vols faits par le mme pilote ou le mme avion - Dure dun vol tjrs > 30 minutes - Salaire ne peut pas dcrotre.

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

3 Algbre relationnelle
Nous prsentons lalgbre relationnelle par lexemple

Exemple dinstance de la Base de Donnes Cinma : FILM TITRE Speed 2 Speed 2 Speed 2 Marion Marion Marion METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont M. Poirier M. Poirier M. Poirier ACTEUR S. Bullock J. Patrick W. Dafoe C. Tetard MF Pisier M. Poirier

CINE

NOM Franais Gaumont Trianon UGC Ariel

ADRESSE 9, rue Montesquieu 9, Cours Clemenceau 6, rue Franklin 20, rue Judaique

TELEPHONE 05 56 44 11 87 05 56 52 03 54 05 56 44 35 17 05 56 44 31 17

PROGRAMME NOM-CINE Franais Franais Franais Franais Trianon

TITRE Speed 2 Speed 2 Speed 2 Marion Marion

HORAIRE 18h00 20h00 22h00 16h00 18h00

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

3.1 Projection
Notation : Projection( Relation / Attr )

Extraire tous les titres de tous les films : R1 = Projection( FILM / TITRE )

FILM

TITRE Speed 2 Speed 2 Speed 2 Marion Marion Marion TITRE Speed 2 Marion

METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont M. Poirier M. Poirier M. Poirier

ACTEUR S. Bullock J. Patrick W. Dafoe C. Tetard MF Pisier M. Poirier

R1

Extraire les titres des films laffiche : R2 = Projection( PROGRAMME / TITRE ) PROGRAMME NOM-CINE Franais Franais Franais Franais Trianon R2 TITRE Speed 2 Marion TITRE Speed 2 Speed 2 Speed 2 Marion Marion HORAIRE 18h00 20h00 22h00 16h00 18h00

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

3.2 Slection
Notations : - Slection( Relation / Attr op Valeur ) o op est un oprateur de comparaison, Valeur une constante. - Slection( Relation / Attr op Attr ) o op est un oprateur de comparaison, Attr un autre attribut de la relation. Extraire les informations concernant les films dont le titre est Speed 2 : R3 = Slection( FILM / TITRE = Speed 2 ) FILM TITRE Speed 2 Speed 2 Speed 2 Marion Marion Marion TITRE Speed 2 Speed 2 Speed 2 METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont M. Poirier M. Poirier M. Poirier METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont ACTEUR S. Bullock J. Patrick W. Dafoe C. Tetard MF Pisier M. Poirier ACTEUR S. Bullock J. Patrick W. Dafoe

R3

Extraire les films dont un acteur est le metteur en scne de ce film : R4 = Slection( FILM / METTEUR EN SCENE = ACTEUR ) FILM TITRE Speed 2 Speed 2 Speed 2 Marion Marion Marion TITRE Marion METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont M. Poirier M. Poirier M. Poirier METTEUR EN SCENE M. Poirier ACTEUR S. Bullock J. Patrick W. Dafoe C. Tetard MF Pisier M. Poirier ACTEUR M. Poirier

R4

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Extraire les informations concernant la programmation aprs 18h00 du film Marion : R5 = Slection( PROGRAMME / HORAIRE >= 18h00 ET TITRE = Marion ) Ou R5_1 = Slection( PROGRAMME / HORAIRE >= 18h00 ) R5 = Slection( R5_1 / TITRE = Marion ) Ou R5_1 = Slection( PROGRAMME / HORAIRE >= 18h00 ) R5_2 = Slection( PROGRAMME / TITRE = Marion ) R5 = Intersection( R5_1, R5_2 ) PROGRAMME NOM-CINE Franais Franais Franais Franais Trianon R5_1 NOM-CINE Franais Franais Franais Trianon NOM-CINE Trianon TITRE Speed 2 Speed 2 Speed 2 Marion Marion TITRE Speed 2 Speed 2 Speed 2 Marion TITRE Marion HORAIRE 18h00 20h00 22h00 16h00 18h00 HORAIRE 18h00 20h00 22h00 18h00 HORAIRE 18h00

R5

10

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Extraire la programmation des films dont le titre est Marion ou qui passent lUGC : R6 = Slection( PROGRAMME / TITRE = Marion OU NOM-CINE = UGC ) Ou R6_1 = Slection( PROGRAMME / TITRE = Marion ) R6_2 = Slection( PROGRAMME / NOM-CINE = UGC ) R6 = Union( R6_1, R6_2 ) PROGRAMME NOM-CINE Franais Franais Franais Franais Trianon R6_1 NOM-CINE Franais Trianon NOM-CINE NOM-CINE Franais Trianon TITRE Speed 2 Speed 2 Speed 2 Marion Marion TITRE Marion Marion TITRE TITRE Marion Marion HORAIRE 18h00 20h00 22h00 16h00 18h00 HORAIRE 16h00 18h00 HORAIRE HORAIRE 16h00 18h00

R6_2 R6

11

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Extraire les cinmas qui projettent le film Marion aprs 18h00 : R7_1 = Slection( PROGRAMME / TITRE = Marion ) R7_2 = Slection( R7_1 / HORAIRE >= 18h00 ) R7 = Projection( R7_2 / NOM-CINE, HORAIRE ) PROGRAMME NOM-CINE Franais Franais Franais Franais Trianon R7_1 NOM-CINE Franais Trianon NOM-CINE Trianon NOM-CINE Trianon TITRE Speed 2 Speed 2 Speed 2 Marion Marion TITRE Marion Marion TITRE Marion HORAIRE 18h00 HORAIRE 18h00 20h00 22h00 16h00 18h00 HORAIRE 16h00 18h00 HORAIRE 18h00

R7_2

R7

12

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Donner les films dans lesquels MF Pisier ne joue pas : (version 1) R8 = Slection( FILM / ACTEUR <> MF Pisier ) Ou R8_1 = Slection( FILM / ACTEUR = MF Pisier ) R8 = Diffrence( FILM, R8_1 ) FILM TITRE Speed 2 Speed 2 Speed 2 Marion Marion Marion TITRE Marion TITRE Speed 2 Speed 2 Speed 2 Marion Marion METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont M. Poirier M. Poirier M. Poirier METTEUR EN SCENE M. Poirier METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont M. Poirier M. Poirier ACTEUR S. Bullock J. Patrick W. Dafoe C. Tetard MF Pisier M. Poirier ACTEUR MF Pisier ACTEUR S. Bullock J. Patrick W. Dafoe C. Tetard M. Poirier

R8_1

R8

Ceci ne rpond pas la question !

13

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

3.3 Jointure
Notation : Jointure( Relation1, Relation2 / Attr1 op Attr2 ) o op est un oprateur de comparaison, Attr1 est un attribut de Relation1 et Attr2 est un attribut de Relation2. Exemple: R_A

A1 * ? +

A2 a1 a2 a3

R_B

B1 * * + B1 * * + * * + * * + B1 * * + B2 b1 b2 b3 b4 b1 b2 b3 b4 b1 b2 b3 b4 B2 b1 b3 b4

B2 b1 b2 b3 b4

Produit cartsien (R_A x R_B)

A1 * * * * ? ? ? ? + + + + A1 * * +

A2 a1 a1 a1 a1 a2 a2 a2 a2 a3 a3 a3 a3 A2 a1 a1 a3

Jointure( R_A, R_B / A1 = B1 )

ATTENTION: Jointure( R_A, R_B / A1 <> B1 )

A1 A2 B1 B2 b2 * a1 + * a1 b4 * ? a2 b1 ? a2 b2 * ? a2 b3 + ? a2 b4 * + a3 b1 + a3 b2 * + a3 b3 Donner les films dans lesquels MF Pisier ne joue pas : (version 2)


14 Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

FILM

TITRE Speed 2 Speed 2 Speed 2 Marion Marion Marion

METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont M. Poirier M. Poirier M. Poirier

ACTEUR S. Bullock J. Patrick W. Dafoe C. Tetard MF Pisier M. Poirier

R8_1 = Slection( FILM / ACTEUR = MF Pisier ) R8_1 TITRE Marion METTEUR EN SCENE M. Poirier ACTEUR MF Pisier

R8_2 = Projection( R8_1 / TITRE ) R8_2 TITRE Marion

R8_3 = Jointure( FILM, R8_2 / FILM.TITRE <> R8_2.TITRE ) FILM x R8_2 TITRE Speed 2 Speed 2 Speed 2 Marion Marion Marion TITRE Speed 2 Speed 2 Speed 2 METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont M. Poirier M. Poirier M. Poirier METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont ACTEUR R8_2.TITRE S. Bullock Marion J. Patrick Marion W. Dafoe Marion C. Tetard Marion MF Pisier Marion M. Poirier Marion ACTEUR R8_2.TITRE S. Bullock Marion J. Patrick Marion W. Dafoe Marion

R8_3

R8 = Projection( R8_3 / TITRE ) R8 TITRE Speed 2

Ce rsultat est exact mais ceci ne rpond toujours pas la question !

15

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Donner les films dans lesquels MF Pisier ne joue pas : (version 3)

FILM

TITRE Speed 2 Speed 2 Speed 2 Marion Marion Marion La patinoire

METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont M. Poirier M. Poirier M. Poirier JP Toussaint

ACTEUR S. Bullock J. Patrick W. Dafoe C. Tetard MF Pisier M. Poirier MF Pisier

R8_1 = Slection( FILM / ACTEUR = MF Pisier ) R8_1 TITRE Marion La patinoire METTEUR EN SCENE M. Poirier JP Toussaint ACTEUR MF Pisier MF Pisier

R8_2 = Projection( R8_1 / TITRE ) R8_2 TITRE Marion La patinoire

16

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

R8_3 = Jointure( FILM, R8_2 / FILM.TITRE <> R8_2.TITRE ) FILM x R8_2 TITRE Speed 2 Speed 2 Speed 2 Marion Marion Marion La patinoire Speed 2 Speed 2 Speed 2 Marion Marion Marion La patinoire TITRE Speed 2 Speed 2 Speed 2 La patinoire Speed 2 Speed 2 Speed 2 Marion Marion Marion METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont M. Poirier M. Poirier M. Poirier JP Toussaint Jan de Bont Jan de Bont Jan de Bont M. Poirier M. Poirier M. Poirier JP Toussaint METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont JP Toussaint Jan de Bont Jan de Bont Jan de Bont M. Poirier M. Poirier M. Poirier ACTEUR R8_2.TITRE S. Bullock Marion J. Patrick Marion W. Dafoe Marion C. Tetard Marion MF Pisier Marion M. Poirier Marion MF Pisier Marion S. Bullock La patinoire J. Patrick La patinoire W. Dafoe La patinoire C. Tetard La patinoire MF Pisier La patinoire M. Poirier La patinoire MF Pisier La patinoire ACTEUR R8_2.TITRE S. Bullock Marion J. Patrick Marion W. Dafoe Marion MF Pisier Marion S. Bullock La patinoire J. Patrick La patinoire W. Dafoe La patinoire C. Tetard La patinoire MF Pisier La patinoire M. Poirier La patinoire

R8_3

R8 = Projection( R8_3 / TITRE ) R8 TITRE Speed 2 La patinoire Marion

Ceci ne rpond toujours pas la question !

17

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Donner les films dans lesquels MF Pisier ne joue pas : (version 4)

FILM

TITRE Speed 2 Speed 2 Speed 2 Marion Marion Marion La patinoire

METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont M. Poirier M. Poirier M. Poirier JP Toussaint

ACTEUR S. Bullock J. Patrick W. Dafoe C. Tetard MF Pisier M. Poirier MF Pisier

R8_1 = Slection( FILM / ACTEUR = MF Pisier ) R8_1 TITRE Marion La patinoire METTEUR EN SCENE M. Poirier JP Toussaint ACTEUR MF Pisier MF Pisier

R8_2 = Projection( R8_1 / TITRE ) R8_2 TITRE Marion La patinoire

R8_3 = Jointure( FILM, R8_2 / FILM.TITRE = R8_2.TITRE ) FILM x R8_2 TITRE Speed 2 Speed 2 Speed 2 Marion Marion Marion La patinoire Speed 2 Speed 2 Speed 2 Marion Marion Marion La patinoire METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont M. Poirier M. Poirier M. Poirier JP Toussaint Jan de Bont Jan de Bont Jan de Bont M. Poirier M. Poirier M. Poirier JP Toussaint ACTEUR R8_2.TITRE S. Bullock Marion J. Patrick Marion W. Dafoe Marion C. Tetard Marion MF Pisier Marion M. Poirier Marion MF Pisier Marion S. Bullock La patinoire J. Patrick La patinoire W. Dafoe La patinoire C. Tetard La patinoire MF Pisier La patinoire M. Poirier La patinoire MF Pisier La patinoire

18

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

R8_3

TITRE Marion Marion Marion La patinoire

METTEUR EN SCENE M. Poirier M. Poirier M. Poirier JP Toussaint

ACTEUR R8_2.TITRE C. Tetard Marion MF Pisier Marion M. Poirier Marion MF Pisier La patinoire

R8_4 = Projection( R8_3 / FILM.TITRE, FILM.MES, FILM.ACTEUR ) R8_4 TITRE Marion Marion Marion La patinoire METTEUR EN SCENE M. Poirier M. Poirier M. Poirier JP Toussaint ACTEUR C. Tetard MF Pisier M. Poirier MF Pisier

R8_5 = Diffrence( FILM, R8_4 ) R8_5 TITRE Speed 2 Speed 2 Speed 2 METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont ACTEUR S. Bullock J. Patrick W. Dafoe

R8 = Projection( R8_5 / TITRE ) R8 TITRE Speed 2

Ce rsultat est exact et ceci rpond bien la question mais il y a plus simple.

19

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Donner les films dans lesquels MF Pisier ne joue pas : (version 4 bis)

FILM

TITRE Speed 2 Speed 2 Speed 2 Marion Marion Marion La patinoire

METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont M. Poirier M. Poirier M. Poirier JP Toussaint

ACTEUR S. Bullock J. Patrick W. Dafoe C. Tetard MF Pisier M. Poirier MF Pisier

R8_1 = Slection( FILM / ACTEUR = MF Pisier ) R8_1 TITRE Marion La patinoire METTEUR EN SCENE M. Poirier JP Toussaint ACTEUR MF Pisier MF Pisier

R8_2 = Projection( R8_1 / TITRE ) R8_2 TITRE Marion La patinoire

R8_3 = Projection( FILM, TITRE) R8_3 TITRE Speed 2 Marion La patinoire

R8 = Diffrence( R8_3, R8_2 ) R8_3 TITRE Speed 2

Ce rsultat est exact et ceci rpond bien la question.

20

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Donner les cinmas qui projettent un film dans lequel MF Pisier est actrice (pour chaque cinma donner le titre du film et lhoraire) : R9_1 = Slection( FILM / ACTEUR = MF Pisier ) R9_2 = Jointure( R9_1, PROGRAMME / TITRE = TITRE ) R9 = Projection( R9_2 / NOM-CINE, TITRE, HORAIRE ) FILM TITRE Speed 2 Speed 2 Speed 2 Marion Marion Marion TITRE Marion METTEUR EN SCENE Jan de Bont Jan de Bont Jan de Bont M. Poirier M. Poirier M. Poirier METTEUR EN SCENE M. Poirier ACTEUR S. Bullock J. Patrick W. Dafoe C. Tetard MF Pisier M. Poirier ACTEUR MF Pisier

R9_1

PROGRAMME NOM-CINE Franais Franais Franais Franais Trianon

TITRE Speed 2 Speed 2 Speed 2 Marion Marion ACTEUR MF Pisier MF Pisier

HORAIRE 18h00 20h00 22h00 16h00 18h00 NOM-CINE Franais Trianon TITRE HORAIRE Marion Marion 16h00 18h00

R9_2 R9_1.TITRE R9_1.METTEUR EN SCENE Marion M. Poirier Marion M. Poirier

Donner les films avec leur Metteur en scne et leurs acteurs dans lesquels joue MF Pisier :

Donner les titres des films dans lesquels joue MF Pisier et qui sont laffiche :

21

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

3.4 Notations supplmentaires


On note A(X) lensemble de toutes les affectations du schma de la relation X. On note L/Y la restriction de laffectation de L aux attributs de Y. 3.4.1 Oprateur produit (jointure naturelle) Soient R(X) et S(Y) deux relations. Le produit de R(X) et de S(Y) est la relation (R*S)(Z) dfinie par : 1- Z = X Y 2- R*S = { L A(Z) tq (L/X R) et (L/Y S) } 3.4.2 Oprateur somme Soient R(X) et S(Y) deux relations. La somme de R(X) et de S(Y) est la relation (R+S)(Z) dfinie par : 1- Z = X Y 2- R+S = { L A(Z) tq (L/X R) ou (L/Y S) } 3.4.3 Oprateur produit cartsien Soient R(X) et S(Y) deux relations o X et Y nont aucun attribut en commun. Le produit cartsien de R(X) et de S(Y) est la relation (R x S)(Z) dfinie par : 1- Z = X Y 2- R x S = R*S 3.4.4 Oprateur union Soient R(X) et S(X) deux relations dfinie sur le mme schma. Lunion de R(X) et de S(X) est la relation (R S)(Z) dfinie par : 1- Z = X 2- R S = R+S 3.4.5 Oprateur intersection Soient R(X) et S(X) deux relations dfinie sur le mme schma. Lintersection de R(X) et de S(X) est la relation (R S)(Z) dfinie par : 1- Z = X 2- R S = R*S

22

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

3.4.6 Oprateur diffrence Soient R(X) et S(X) deux relations dfinies sur le mme schma. La diffrence de R(X) et de S(X) est la relation (R S)(Z) dfinie par : 1- Z = X 2- R S = { L A(X) tq (L R) et (L S) } ou encore R S = R * S 3.4.7 Proprit des oprateurs ensemblistes Idempotence de la somme : R + R = R Idempotence du produit : R * R = R Associativit de la somme : R + (S + T) = (R + S) + T Associativit du produit : R * (S * T) = (R * S) * T Commutativit de la somme : R + S = S + R Commutativit du produit : R * S = S * R Distributivit de la somme par rapport au produit : R + (S * T) = (R + S) * (R + T) Distributivit du produit par rapport la somme : R * (S + T) = (R * S) + (R * T) Relation entre le complment, la somme et le produit : (R + S) = R * S (R * S) = R + S 3.4.8 Oprateur de projection Soient X un schma et Y une partie de X. La projection sur Y dune relation R(X) est la relation, R[Y](Z) dfinie par : 1- Z = Y 2- R[Y] = { L A(Y) tq L A(X), (L/Y= L) et (L R) } 3.4.9 Oprateur de slection Une condition de slection est une formule logique construite sur les attributs dun schma X laide des connecteurs suivant : (et), (ou), (non), =, >, <, , , . La slection sur une relation R(X) suivant une condition de slection E est la relation (R :E)(Y) dfinie par : 1- Y = X 2- R :E = { L A(X) tq (L R) et (E(L) = vrai) }

23

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

4 Structured Query Language (SQL)


Langage de Dfinition de Donnes (LDD) cration et modification de la structure des Bases de Donnes Langage de Manipulation de Donnes (LMD) insertion et modification des donnes des Bases de Donnes Langage de Contrle des Donnes (LCD) gestion de la scurit, confidentialit et Contraintes d'Intgrit Petit lexique entre le modle relationnel et SQL : Modle relationnel Relation Attribut Tuple SQL Table Colonne Ligne

4.1 SQL LDD


4.1.1 Types syntaxiques (presque les domaines) La notion de domaine n'est pas trs prsente dans les SGBD. Il nous faut donc nous limiter la dfinition des types syntaxiques suivants dans la majorit des cas : VARCHAR2(n) CHAR(n) NUMBER NUMBER(n, m) DATE LONG Chane de caractres de longueur variable (maximum n) Chane de caractres de longueur fixe (n caractres) Nombre entier (40 chiffres maximum) Nombre de longueur totale n avec m dcimales Date (DD-MON-YY est le format par dfaut) Flot de caractres

ATTENTION : plusieurs SQL donc plusieurs syntaxes (ici ORACLE)

24

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

4.1.2 Cration de table CREATE TABLE <nom de la table> ( <nom de colonne> <type> [NOT NULL] [, <nom de colonne> <type>], [<contrainte>] ); o <contrainte> reprsente la liste des contraintes d'intgrit structurelles concernant les colonnes de la table cre. Elle s'exprime sous la forme suivante : CONSTRAINT <nom de contrainte> <sorte de contrainte> o <sorte de contrainte> est : - PRIMARY KEY (attribut1, [attribut2] ) - FOREIGN KEY (attribut1, [attribut2]) REFERENCES <nom de table associe>(attribut1, [attribut2]) - CHECK (attribut <condition> ) avec <condition> qui peut tre une expression boolenne "simple" ou de la forme IN (liste de valeurs) ou BETWEEN <borne infrieure> AND <borne suprieure>

4.1.3 Modification de la structure d'une table Ajout : ALTER TABLE <nom de la table> ADD (<nom de colonne> <type> [, <contrainte>] ); ALTER TABLE <nom de la table> ADD (<contrainte> [, <contrainte>]);

Modification : ALTER TABLE <nom de la table> MODIFY ([<nom de colonne> <nouveau type>] [,<nom de colonne> <nouveau type>]);

4.1.4 Consultation de la structure d'une base DESCRIBE <nom de la table>;

4.1.5 Destruction de table DROP TABLE <nom de la table>;


25 Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

4.2 SQL LMD


4.2.1 Interrogation SELECT [DISTINCT] <nom de colonne>[, <nom de colonne>] FROM <nom de table>[, <nom de table>] [WHERE <condition>] [GROUP BY <nom de colonne>[, <nom de colonne>] [HAVING <condition avec calculs verticaux>]] [ORDER BY <nom de colonne>[, <nom de colonne>]]

4.2.2 Insertion de donnes INSERT INTO <nom de table> [(colonne, )] VALUES (valeur, ) INSERT INTO <nom de table> [(colonne, )] SELECT

4.2.3 Modification de donnes UPDATE <nom de table> SET colonne = valeur, [WHERE condition] UPDATE <nom de table> SET colonne = SELECT

4.2.4 Suppression de donnes DELETE FROM <nom de table> [WHERE condition]

26

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

5 Les clauses de SELECT


Base utilise : PILOTE(NUMPIL, NOMPIL, PRENOMPIL, ADRESSE, SALAIRE, PRIME) AVION(NUMAV, NOMAV, CAPACITE, LOCALISATION) VOL(NUMVOL, NUMPIL, NUMAV, DATE_VOL, HEURE_DEP, HEURE_ARR, VILLE_DEP, VILLE_ARR). On suppose qu'un vol, rfrenc par son numro NUMVOL, est effectu par un unique pilote, de numro NUMPIL, sur un avion identifi par son numro NUMAV. Rappel de la syntaxe : SELECT [DISTINCT] <nom de colonne>[, <nom de colonne>] FROM <nom de table>[, <nom de table>] [WHERE <condition>] [GROUP BY <nom de colonne>[, <nom de colonne>] [HAVING <condition avec calculs verticaux>]] [ORDER BY <nom de colonne>[, <nom de colonne>]]

5.1 Expression des projections


SELECT * FROM table o table est le nom de la relation consulter. Le caractre * signifie qu'aucune projection n'est ralise, i.e. que tous les attributs de la relation font partie du rsultat. Exemple : donner toutes les informations sur les pilotes. SELECT * FROM PILOTE La liste dattributs sur laquelle la projection est effectue doit tre prcise aprs la clause SELECT. Exemple : donner le nom et l'adresse des pilotes. SELECT NOMPIL, ADRESSE FROM PILOTE

27

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Alias : SELECT colonne [alias], Si alias est compos de plusieurs mots (spars par des blancs), il faut utiliser des guillemets. Exemple : slectionner l'identificateur et le nom de chaque pilote. SELECT NUMPIL "Num pilote", NOMPIL Nom_du_pilote FROM PILOTE

Suppression des duplicats : mot clef SQL DISTINCT Exemple : quelles sont toutes les villes de dpart des vols ? SELECT DISTINCT VILLE_DEP FROM VOL

5.2 Expression des slections


Clause WHERE Exemple : donner le nom des pilotes qui habitent Marseille. SELECT NOMPIL FROM PILOTE WHERE ADRESSE = 'MARSEILLE' Exemple : donner le nom et ladresse des pilotes qui gagnent plus de 3.000 . SELECT NOMPIL FROM PILOTE WHERE SALAIRE > 3000

28

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Autres oprateurs spcifiques :

IS NULL : teste si la valeur d'une colonne est une valeur nulle (inconnue). Exemple : rechercher le nom des pilotes dont l'adresse est inconnue. SELECT NOMPIL FROM PILOTE WHERE ADRESSE IS NULL IN (liste) : teste si la valeur d'une colonne concide avec l'une des valeurs de la liste. Exemple : rechercher les avions de nom A310, A320, A330 et A340. SELECT * FROM AVION WHERE NOMAV IN ('A310', 'A320', 'A330', 'A340') BETWEEN v1 AND v2 : teste si la valeur d'une colonne est comprise entre les valeurs v1 et v2 (v1 <= valeur <= v2). Exemple : quel est le nom des pilotes qui gagnent entre 3.000 et 5.000 ? SELECT NOMPIL FROM PILOTE WHERE SALAIRE BETWEEN 3000 AND 5000 LIKE 'chane_gnrique'. Le symbole % remplace une chane de caractre quelconque, y compris le vide. Le symbole _ remplace un caractre. Exemple : quelle est la capacit des avions de type Airbus ? SELECT CAPACITE FROM AVION WHERE NOMAV LIKE 'A%' Ngation des oprateurs spcifiques : NOT. Nous obtenons alors IS NOT NULL, NOT IN, NOT LIKE et NOT BETWEEN. Exemple : quels sont les noms des avions diffrents de A310, A320, A330 et A340 ? SELECT NOMAV FROM AVION WHERE NOMAV NOT IN ('A310','A320','A330','A340') Oprateurs logiques : AND et OR. Le AND est prioritaire et le parenthsage doit tre utilis pour modifier lordre dvaluation. Exemple : quels sont les vols au dpart de Marseille desservant Paris ? SELECT * FROM VOL WHERE VILLE_DEP = 'MARSEILLE' AND VILLE_ARR = 'PARIS'

29

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Requte paramtres : les paramtres de la requtes seront quantifis au moment de lexcution de la requte. Pour cela, il suffit dans le texte de la requte de substituer aux diffrentes constantes de slection des symboles de variables qui doivent systmatiquement commencer par le caractre &. Remarque : si la constante de slection est alphanumrique, on peut spcifier &var dans la requte, lutilisateur naura plus qu saisir la valeur, sinon il devra taper valeur. Exemple : quels sont les vols au dpart d'une ville et dont l'heure d'arrive est infrieure une certaine heure ? SELECT * FROM VOL WHERE VILLE_DEP = '&1' AND HEURE_ARR < &2 Lors de l'excution de cette requte, le systme demande l'utilisateur de lui indiquer une ville de dpart et une heure d'arrive.

5.3 Calculs horizontaux


Des expressions arithmtiques peuvent tre utilises dans les clauses WHERE et SELECT. Ces expressions de calcul horizontal sont values puis affiches et/ou testes pour chaque tuple appartenant au rsultat. Exemple : donner le revenu mensuel des pilotes Bordelais. SELECT NUMPIL, NOMPIL, SALAIRE + PRIME FROM PILOTE WHERE ADRESSE = 'BORDEAUX' Exemple : quels sont les pilotes qui avec une augmentation de 10% de leur prime gagnent moins de 5.000 ? Donner leur numro, leurs revenus actuel et simul. SELECT NUMPIL, SALAIRE+PRIME, SALAIRE + (PRIME*1.1) FROM PILOTE WHERE SALAIRE + (PRIME*1.1) < 5000 Expression dun calcul : Les oprateurs arithmtiques +, -, *, et / sont disponibles en SQL. De plus, loprateurs || (concatnation de chanes de caractres -ex : C1 || C2 correspond concatnation de C1 et C2). Enfin, les oprateurs + et - peuvent tre utiliss pour ajouter ou soustraire un nombre de jour une date. L'oprateur - peut tre utilis entre deux dates et rend le nombre de jours entre les deux dates arguments. Les fonctions disponibles en SQL dpendent du SGBD. Sous ORACLE, les fonctions suivantes sont disponibles :
30 Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

la valeur absolue de n ; la partie entire de n ; m la puissance n ; n tronqu m dcimales aprs le point dcimal. Si m est ngatif, la troncature se fait avant le point dcimal ; ROUND(n [, d]) arrondit n dix puissance -d ; CEIL(n) entier directement suprieur ou gal n ; MOD(n, m) n modulo m ; SIGN(n) 1 si n > 0, 0 si n = 0, -1 si n < 0 ; SQRT(n) racine carre de n (NULL si n < 0) ; GREATEST(n1, n2,) la plus grande valeur de la suite ; LEAST(n1, n2,) la plus petite valeur de la liste ; NVL(n1, n2) permet de substituer la valeur n2 n1, au cas o cette dernire est une valeur nulle ; LENGTH(ch) longueur de la chane ; SUBSTR(ch, pos [, long]) extraction d'une sous-chane de ch partir de la position pos en donnant le nombre de caractres extraire long ; INSTR(ch, ssch [, pos [, n]]) position de la sous-chane dans la chane ; UPPER(ch) mise en majuscules ; LOWER(ch) mise en minuscules ; INITCAP(ch) initiale en majuscules ; SOUNDEX(ch) comparaison phontique ; LPAD(ch, long [, car]) complte ch gauche la longueur long par car ; RPAD(ch, long [, car]) complte ch droite la longueur long par car ; LTRIM(ch, car) lague gauche ch des caractres car ; RTRIM(ch, car) lague droite ch des caractres car ; TRANSLATE(ch, car_source, car_cible) change car_source par car_cible ; TO_CHAR(nombre) convertit un nombre ou une date en chane de caractres ; TO_NUMBER(ch) convertit la chane en numrique ; ASCII(ch) code ASCII du premier caractre de la chane ; CHR(n) conversion en caractre d'un code ASCII ; TO_DATE(ch[, fmt]) conversion d'une chane de caractres en date ; ADD_MONTHS(date, nombre) ajout d'un nombre de mois une date ; MONTHS_BETWEEN(date1, date2) nombre de mois entre date1 et date2 ; LAST_DAY(date) date du dernier jour du mois ; NEXT_DAY(date, nom du jour) date du prochain jour de la semaine ; SYSDATE date du jour.
31 Nol NOVELLI

ABS(n) FLOOR(n) POWER(m, n) TRUNC(n[, m])

Initiation aux Bases de Donnes Relationnelles

Exemple : donner la partie entire des salaires des pilotes. SELECT NOMPIL,FLOOR(SALAIRE) "Salaire:partie entire" FROM PILOTE ATTENTION : Tous les SGBD n'valuent pas correctement les expressions arithmtiques que si les valeurs de ses arguments ne sont pas NULL. Pour viter tout problme, il convient d'utiliser la fonction NVL (dcrite ci avant) qui permet de substituer une valeur par dfaut aux valeurs nulles ventuelles. Exemple : lattribut Prime pouvant avoir des valeurs nulles, la requte donnant le revenu mensuel des pilotes toulousains doit se formuler de la faon suivante. SELECT NUMPIL, NOMPIL, SALAIRE + NVL(PRIME,0) FROM PILOTE WHERE ADRESSE = 'BORDEAUX'
Pour plus dinformation, vous pouvez consulter cette Illustration de la gestion des valeurs nulles par diffrents SGBD (http://dbforums.com/showthread.php?threadid=421723).

32

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

5.4 Calculs verticaux (fonctions agrgatives)


Les fonctions agrgatives s'appliquent un ensemble de valeurs d'un attribut de type numrique sauf pour la fonction de comptage COUNT pour laquelle le type de l'attribut argument est indiffrent. Contrairement aux calculs horizontaux, le rsultat dune fonction agrgative est valu une seule fois pour tous les tuples du rsultat1. Les fonctions agrgatives disponibles sont gnralement les suivantes : SUM somme, AVG moyenne arithmtique, COUNT nombre ou cardinalit, MAX valeur maximale, MIN valeur minimale, STDDEV cart type, VARIANCE variance. Chacune de ces fonctions a comme argument un nom d'attribut ou une expression arithmtique. Les valeurs nulles ne posent pas de problme d'valuation. La fonction COUNT peut prendre comme argument le caractre *, dans ce cas, elle rend comme rsultat le nombre de lignes slectionnes par le bloc. Exemple : quel est le salaire moyen des pilotes Marseillais. SELECT AVG(SALAIRE) FROM PILOTE WHERE ADRESSE = 'MARSEILLE' Exemple : trouver le nombre de vols au dpart de Marseille. SELECT COUNT(NUMVOL) FROM VOL WHERE VILLE_DEP = 'MARSEILLE' Dans cette requte, COUNT(*) peut tre utiliser la place de COUNT(NUMVOL) La colonne ou l'expression laquelle est applique une fonction agrgative peut avoir des valeurs redondantes. Pour indiquer qu'il faut considrer seulement les valeurs distinctes, il faut faire prcder la colonne ou l'expression de DISTINCT. Exemple : combien de destinations sont desservies au dpart de Bordeaux ? SELECT COUNT(DISTINCT VILLE_ARR) FROM VOL WHERE VILLE_DEP = 'BORDEAUX'

En cas de partitionnement, cette valuation est faite pour chaque classe dquivalence de tuples. Nol NOVELLI

33

Initiation aux Bases de Donnes Relationnelles

5.5 Expression des jointures sous forme prdicative


La clause FROM contient tous les noms de tables fusionner. La clause WHERE exprime le critre de jointure sous forme de condition. ATTENTION : si deux tables sont mentionnes dans la clause FROM et quaucune jointure nest spcifie, le systme effectue le produit cartsien des deux relations (chaque tuple de la premire est mis en correspondance avec tous les tuples de la seconde), le rsultat est donc faux car les liens smantiques entre relations ne sont pas utiliss. Donc respectez et vrifiez la rgle suivante. Si n tables apparaissent dans la clause FROM, il faut au moins (n 1) oprations de jointure. La forme gnrale d'une requte de jointure est : SELECT colonne, FROM table1, table2 WHERE <condition> o <condition> est de la forme attribut1 attribut2 et est un oprateur de comparaison. Exemple : quel est le numro et le nom des pilotes rsidant dans la ville de localisation de lavion n 33 ? SELECT NUMPIL, NOMPIL FROM PILOTE, AVION WHERE ADRESSE = LOCALISATION AND NUMAV = 33 Les noms des colonnes dans la clause SELECT et WHERE doivent tre uniques. Ne pas oublier de lever lambigut laide dalias (cf. auto-jointure) ou en prfixant les noms de colonnes. Exemple : donner le nom des pilotes faisant des vols au dpart de Marseille sur des Airbus ? SELECT DISTINCT NOMPIL FROM PILOTE, VOL, AVION WHERE VILLE_DEP = 'MARSEILLE' AND NOMAV LIKE 'A%' AND PILOTE.NUMPIL = VOL.NUMPIL AND VOL.NUMAV = AVION. NUMAV

34

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Alias de nom de table : se place dans la clause FROM aprs le nom de la table. Exemple : quels sont les avions localiss dans la mme ville que l'avion numro 103 ? SELECT AUTRES.NUMAV, AUTRES.NOMAV FROM AVION AUTRES, AVION AV103 WHERE AV103.NUMAV = 103 AND AUTRES.NUMAV <> 103 AND AV103.LOCALISATION = AUTRES.LOCALISATION Dans cette requte lalias AV103 est utilise pour retrouver l'avion de numro 103 et lalias AUTRES permet de balayer tous les tuples de AVION pour faire la comparaison des localisations. Exemple : quelles sont les correspondances (villes darrive) accessibles partir de la ville darrive du vol IT100 ? SELECT DISTINCT AUTRES.VILLE_ARR FROM VOL AUTRES, VOL VOLIT100 WHERE VOLIT100.NUMVOL = IT100 AND VOLIT100.VILLE_ARR = AUTRES.VILLE_DEP La requte recherche les vols dont la ville de dpart correspond la ville darrive du vol IT100 puis ne conserve que les villes darrive de ces vols.

5.6 Autre expression de jointures : forme imbrique


1. Premier cas :

Le rsultat de la sous-requte est form d'une seule valeur. C'est surtout le cas de sous-requtes utilisant une fonction agrgat dans la clause SELECT. Lattribut spcifi dans le WHERE est simplement compar au rsultat du SELECT imbriqu laide de loprateur de comparaison voulu. Exemple : quel est le nom des pilotes gagnant plus que le salaire moyen des pilotes ? SELECT NOMPIL FROM PILOTE WHERE SALAIRE > (SELECT AVG(SALAIRE) FROM PILOTE)

35

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

2. Deuxime cas :

Le rsultat de la sous-requte est form d'une liste de valeurs. Dans ce cas, le rsultat de la comparaison, dans la clause WHERE, peut tre considr comme vrai : soit si la condition doit tre vrifie avec au moins une des valeurs rsultats de la sous-requte. Dans ce cas, la sous-requte doit tre prcde du comparateur suivi de ANY (remarque : = ANY est quivalent IN) ; soit si la condition doit tre vrifie pour toutes les valeurs rsultats de la sousrequte, alors la sous-requte doit tre prcde du comparateur suivi de ALL. Exemple : quels sont les noms des pilotes en service au dpart de Marseille ? SELECT NOMPIL FROM PILOTE WHERE NUMPIL IN (SELECT DISTINCT NUMPIL FROM VOL WHERE VILLE_DEP = 'MARSEILLE') Exemple : quels sont les numros des avions localiss Marseille dont la capacit est suprieure celle de lun des appareils effectuant un Paris-Marseille ? SELECT NUMAV FROM AVION WHERE LOCALISATION = MARSEILLE AND CAP > ANY (SELECT DISTINCT CAP FROM AVION WHERE NUMAV = ANY (SELECT DISTINCT NUMAV FROM VOL WHERE VILLE-DEP = PARIS AND VILLE_ARR = MARSEILLE ) ) Exemple : quels sont les noms des pilotes Marseillais qui gagnent plus que tous les pilotes parisiens ? SELECT NOMPIL FROM PILOTE WHERE ADRESSE = 'MARSEILLE' AND SALAIRE > ALL (SELECT DISTINCT SALAIRE FROM PILOTE WHERE ADRESSE = 'PARIS')

36

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Exemple : donner le nom des pilotes Marseillais qui gagnent plus qu'un pilote parisien. SELECT NOMPIL FROM PILOTE WHERE ADRESSE = 'MARSEILLE' AND SALAIRE > ANY (SELECT SALAIRE FROM PILOTE WHERE ADRESSE = 'PARIS')
3. Troisime cas :

Le rsultat de la sous-requte est un ensemble de colonnes. le nombre de colonnes de la clause WHERE doit tre identique celui de la clause SELECT de la sous-requte. Ces colonnes doivent tre mises entre parenthses, la comparaison se fait entre les valeurs des colonnes de la requte et celle de la sous-requte deux deux, il faut que loprateur de comparaison soit le mme pour tous les attributs concerns.

Exemple : rechercher le nom des pilotes ayant mme adresse et mme salaire que Dupont. SELECT NOMPIL FROM PILOTE WHERE NOMPIL <> 'DUPONT' AND (ADRESSE, SALAIRE) IN (SELECT ADRESSE, SALAIRE FROM PILOTE WHERE NOMPIL = 'DUPONT')

37

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

5.7 Tri des rsultats


Il est possible avec SQL d'ordonner les rsultats. Cet ordre peut tre croissant (ASC) ou dcroissant (DESC) sur une ou plusieurs colonnes ou expressions. ORDER BY expression [ASC | DESC], L'argument de ORDER BY peut tre un nom de colonne ou une expression base sur une ou plusieurs colonnes mentionnes dans la clause SELECT. Exemple : En une seule requte, donner la liste des pilotes Marseillais par ordre de salaire dcroissant et par ordre alphabtique des noms. SELECT NOMPIL, SALAIRE FROM PILOTE WHERE ADRESSE = 'MARSEILLE' ORDER BY SALAIRE DESC, NOMPIL

5.8 Test dabsence de donnes


Pour vrifier quune donne est absente dans la base, le cas le plus simple est celui o lexistence de tuples est connue et on cherche si un attribut a des valeurs manquantes. Il suffit alors dutiliser le prdicat IS NULL. Mais cette solution nest correcte que si les tuples existent. Elle ne peut en aucun cas sappliquer si on cherche vrifier labsence de tuples ou labsence de valeur quand on ne sait pas si des tuples existent. Exemple : Les requtes suivantes ne peuvent pas tre formules avec IS NULL. Quels sont les pilotes neffectuant aucun vol ? Quelles sont les villes de dpart dans lesquelles aucun avion nest localis ? Pour formuler des requtes de type un lment nappartient pas un ensemble donn , trois techniques peuvent tre utilises. La premire consiste utiliser une jointure imbrique avec NOT IN. La sous-requte est utilise pour calculer lensemble de recherche et le bloc de niveau suprieur extrait les lments nappartenant pas cet ensemble. Exemple : quels sont les pilotes neffectuant aucun vol ? SELECT NUMPIL, NOMPIL FROM PILOTE WHERE NUMPIL NOT IN (SELECT NUMPIL FROM VOL)

38

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Une deuxime approche fait appel au prdicat NOT EXISTS qui sapplique un bloc imbriqu et rend la valeur vrai si le rsultat de la sous-requte est vide (et faux sinon). Il faut faire trs attention ce type de requte car NOT EXISTS ne dispense pas dexprimer des jointures. Ce danger est dtaill travers lexemple suivant. Exemple : reprenons la requte prcdente. La formulation suivante est fausse. SELECT NUMPIL, NOMPIL FROM PILOTE WHERE NOT EXISTS (SELECT NUMPIL FROM VOL) Il suffit quun vol soit cr dans la relation VOL pour que la requte prcdente retourne systmatiquement un rsultat vide. En effet le bloc imbriqu rendra une valeur pour NUMPIL et le NOT EXISTS sera toujours valu faux, donc aucun pilote ne sera retourn par le premier bloc. Le problme de cette requte est que le lien entre les lments cherchs dans les deux blocs nest pas spcifi. Or, il faut indiquer au systme que le 2me bloc doit tre valu pour chacun des pilotes examins par le 1er bloc. Pour cela, on introduit un alias pour la relation PILOTE et une jointure est exprime dans le 2me bloc en utilisant cet alias. La formulation correcte est la suivante : SELECT NUMPIL, NOMPIL FROM PILOTE PIL WHERE NOT EXISTS (SELECT NUMPIL FROM VOL WHERE VOL.NUMPIL = PIL.NUMPIL) Enfin, il est possible davoir recours loprateur de diffrence (MINUS).

39

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

5.9 Classification ou partitionnement


La classification permet de regrouper les lignes d'une table dans des classes dquivalence ou sous-tables ayant chacune la mme valeur pour la colonne de la classification. Ces classes forment une partition de l'extension de la relation considre (i.e. lintersection des classes est vide et leur union est gale la relation initiale). Exemple : considrons la relation VOL illustre par la figure 1. Partitionner cette relation sur lattribut NUMPIL consiste regrouper au sein dune mme classe tous les vols assurs par le mme pilote. NUMPIL prenant 4 valeurs distinctes, 4 classes sont introduites. Elles sont mises en vidence dans la figure 2 et regroupent respectivement les vols des pilotes n 100, 102, 105 et 124. NUMVOL NUMPIL IT100 100 AF101 100 IT101 102 BA003 105 BA045 105 IT305 102 AF421 124 BA047 105 BA087 105 Figure 1 : relation exemple VOL NUMVOL NUMPIL IT100 100 AF101 100 IT101 102 IT305 102 BA003 105 BA045 105 BA047 105 BA087 105 AF421 124 Figure 2 : regroupement selon NUMPIL

En SQL, loprateur de partitionnement sexprime par la clause GROUP BY qui doit suivre la clause WHERE (ou FROM si WHERE est absente). Sa syntaxe est : GROUP BY colonne1, [colonne2,] Les colonnes indiques dans SELECT, sauf les attributs arguments des fonctions agrgatives, doivent tre mentionnes dans GROUP BY. Il est possible de faire un regroupement multi-colonnes en mentionnant plusieurs colonnes dans la clause GROUP BY. Une classe est alors cre pour chaque combinaison distincte de valeurs de la combinaison dattributs. En prsence de la clause GROUP BY, les fonctions agrgatives s'appliquent l'ensemble des valeurs de chaque classe dquivalence.

40

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Exemple : quel est le nombre de vols effectus par chaque pilote ? SELECT NUMPIL, COUNT(NUMVOL) FROM VOL GROUP BY NUMPIL Dans ce cas, le rsultat de la requte comporte une ligne par numro de pilote prsent dans la relation VOL. Exemple : combien de fois chaque pilote conduit-il chaque avion ? SELECT NUMPIL, NUMAV, COUNT(NUMVOL) FROM VOL GROUP BY NUMPIL, NUMAV Nous obtenons ici autant de lignes par pilote qu'il y a d'avions distincts conduits le pilote considr. Chaque classe dquivalence cre par le GROUP BY regroupe tous les vols ayant mme pilote et mme avion. Partitionner une relation sur un attribut clef primaire ou clef candidate est videmment compltement inutile : chaque classe dquivalence est rduite un seul tuple ! De mme, mentionner un DISTINCT devant les attributs de la clause SELECT ne sert rien si le bloc comporte un GROUP BY : ces attributs tant aussi les attributs de partitionnement, il ny aura pas de duplicats parmi les valeurs ou combinaisons de valeurs retournes. Il faut par contre faire trs attention largument des fonctions agrgatives. Loubli dun DISTINCT peut rendre la requte fausse. Exemple : donner le nombre de destinations desservies par chaque avion. SELECT NUMAV, COUNT(DISTINCT VILLE_ARR) FROM VOL GROUP BY NUMAV Si le DISTINCT est oubli, cest le nombre de vols qui sera compt et la requte sera fausse.

5.10 Recherche dans les sous-tables


Des conditions de slection peuvent tre appliques aux sous-tables engendres par la clause GROUP BY, comme c'est le cas avec la clause WHERE pour les tables. Cette slection s'effectue avec la clause HAVING qui doit suivre la clause GROUP BY. Sa syntaxe est : HAVING condition La condition permet de comparer une valeur obtenue partir de la sous-table une constante ou une autre valeur rsultant d'une sous-requte.

41

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Exemple : donner le nombre de vols, s'il est suprieur 5, par pilote. SELECT NUMPIL, NOMPIL, COUNT(NUMVOL) FROM PILOTE, VOL WHERE PILOTE.NUMPIL = VOL.NUMPIL GROUP BY NUMPIL, NOMPIL HAVING COUNT(NUMVOL) > 5 Exemple : quelles sont les villes partir desquelles le nombre de villes desservies est le plus grand ? SELECT VILLE_DEP FROM VOL GROUP BY VILLE_DEP HAVING COUNT(DISTINCT VILLE_ARR) >= ALL (SELECT COUNT(DISTINCT VILLE_ARR) FROM VOL GROUP BY VILLE_DEP) Mme si les clauses WHERE et HAVING introduisent des conditions de slection mais elles sont diffrentes. Si la condition doit tre vrifie par chaque tuple dune classe dquivalence, il faut la spcifier dans le WHERE. Si la condition doit tre vrifie globalement pour la classe, elle doit tre exprime dans la clause HAVING.

5.11 Recherche dans une arborescence


La consultation des donnes de structure arborescente est une spcificit du SGBD ORACLE. Une telle structure de donnes est trs frquente dans le monde rel. Elle correspond des compositions ou des liens hirarchiques. Exemple : supposons que lon souhaite intgrer dans la base des informations sur la rpartition gographique des villes desservies. La figure 3 illustre lorganisation hirarchique des valeurs des diffrentes localisations rpertorier.
Europe France PACA Marseille Aix Cassis Ile-de-France Paris Espagne

Figure 3 : hirarchie des localisations La relation LIEU est ajoute au schma initial de la base pour reprsenter de manire plate la structure arborescente donne ci-dessus. Cette relation a le schma suivant : LIEU (LIEUSPEC, LIEUGEN).

42

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Lattribut LIEUGEN est dfini sur le mme domaine que LIEUSPEC. Cest donc une clef trangre rfrenant la clef primaire de sa propre relation. L'extension de cette relation, correspondant la hirarchie prcdente, est la suivante : LIEUSPEC LIEUGEN EUROPE NULL FRANCE EUROPE ESPAGNE EUROPE PACA FRANCE ILE-DE-FRANCE FRANCE MARSEILLE PACA AIX PACA CASSIS PACA PARIS ILE-DE-FRANCE Figure 4 : reprsentation relationnelle de la hirarchie des localisations La syntaxe gnrale d'une requte de recherche dans une arborescence est : SELECT colonne, FROM table [alias], [WHERE condition] CONNECT BY [PRIOR] colonne1 = [PRIOR] colonne 2 [AND condition] [START WITH condition] [ORDER BY LEVEL] La clause START WITH fixe le point de dpart de la recherche dans l'arborescence. La clause CONNECT BY PRIOR fixe le sens de parcours de l'arborescence. Ce parcours peut se faire : de haut en bas, i.e. qu'il correspond la recherche de sous-arbres ; de bas en haut, i.e. qu'il correspond la recherche du ou des anctres . Le parcours de haut en bas est spcifi en faisant prcder la colonne reprsentant un fils dans l'arborescence par le mot-clef PRIOR comme suit : CONNECT BY PRIOR <fils> = <pre> ou CONNECT BY <pre> = PRIOR <fils> Le parcours de bas en haut est spcifi en faisant prcder la colonne reprsentant un pre par le mot-clef PRIOR. Il peut s'exprimer aussi de deux faons : CONNECT BY <fils> = PRIOR <pre> ou CONNECT BY PRIOR <pre> = <fils>

43

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Remarque : avec la reprsentation relationnelle plate, le <fils> dans une structure hirarchique correspond la clef primaire de la relation, le <pre> la clef trangre. Lorsque la valeur de lattribut <fils> est la racine de la hirarchie, la valeur de lattribut <pre> est une valeur nulle : il sagit dun cas exceptionnel o lon admettra une valeur nulle pour une clef trangre. Exemple : donner la liste des villes desservies en France. SELECT LIEUSPEC FROM LIEU CONNECT BY PRIOR LIEUSPEC = LIEUGEN START WITH LIEUGEN = FRANCE Exemple : o se situe (continent, pays, rgion) la ville de Valladolid ? SELECT LIEUSPEC FROM LIEU CONNECT BY LIEUSPEC = PRIOR LIEUGEN START WITH LIEUSPEC = VALLADOLID La clause facultative[AND condition] permet de spcifier une condition value lors de la recherche dans un sous-arbre. Plus prcisment, si la condition nest pas satisfaite pour un nud de la hirarchie alors quaucun de ses descendants ne sera plus examin. Exemple : donner la liste des villes desservies en France en dehors de la rgion AQUITAINE. SELECT LIEUSPEC FROM LIEU CONNECT BY PRIOR LIEUSPEC = LIEUGEN AND LIEUGEN <> AQUITAINE START WITH LIEUGEN = FRANCE ORDER BY LEVEL Ds quun nud ne vrifiant pas la condition donne est trouv, le sous-arbre dont ce nud est racine est limin de la recherche, donc la rgion AQUITAINE et toutes les villes de cette rgion nappartiendront pas au rsultat. ORACLE associe une numrotation aux nuds d'une arborescence : c'est la notion de niveau (LEVEL). En fait le premier nud rpondant la requte est considr de niveau 1, ses fils (dans le cas d'une recherche de haut en bas) ou son pre (dans le cas d'une recherche de bas en haut) sont considrs de niveau 2, et ainsi de suite. Cette numrotation peut tre utilise pour classer les rsultats (clause ORDER BY LEVEL) et surtout pour en donner une meilleure prsentation. Celle-ci s'obtient en utilisant la fonction LPAD qui permet une indentation. Exemple : pour obtenir la liste des villes desservies en France mais avec prsentation plus claire, nous pouvons formuler la requte comme suit :
44 Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

SELECT FROM CONNECT BY PRIOR START WITH ORDER BY LEVEL

LPAD('-', 2*LEVEL,' ')|| LIEUSPEC LIEU LIEUSPEC = LIEUGEN LIEUGEN = FRANCE

|| est le symbole de concatnation de deux chanes de caractres. La fonction LPAD permet d'ajouter la chane '-', un nombre d'espaces gal au double du niveau, devant chaque valeur de LIEUSPEC pour mieux visualiser la division gographique.

5.12 Expression des divisions


La division consiste rechercher les tuples qui se trouvent associs tous les tuples dun ensemble particulier (le diviseur). SQL ne propose pas doprateur de division (quantificateur universel "tous les"). Il est nanmoins possible dexprimer cette opration mais de manire peu naturelle. Les deux techniques utilises consistent reformuler la requte diffremment, on parle de paraphrasage. Elles ne sont pas systmatiquement applicables (suivant linterrogation pose). La premire technique a recours aux partitionnements et fonctions agrgatives. Pour savoir si un tuple t est associ tous les tuples du diviseur, lide est de compter dune part le nombre de tuples associs t et dautre part le nombre de tuples du diviseur puis de comparer les valeurs obtenues. Exemple : quels sont les numros des pilotes qui conduisent tous les avions de la compagnie ? Pour l'exprimer en SQL avec la premire technique expose, cette requte est traduite de la manire suivante : Quels sont les pilotes qui conduisent autant d'avions que la compagnie en possde ? . SELECT NUMPIL FROM VOL GROUP BY NUMPIL HAVING COUNT(DISTINCT NUMAV) = (SELECT COUNT(NUMAV) FROM AVION) Le comptage dans la clause HAVING permet pour chaque pilote de dnombrer les appareils conduits. Loubli du DISTINCT rend la requte fausse (on compterait alors le nombre de vols assurs). Cette technique de paraphrasage ne peut tre utilise que si les deux ensembles dnombrs sont parfaitement comparables.
45 Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

La deuxime forme d'expression des divisions est plus dlicate formuler. Elle se base sur une double ngation de la requte et utilise la clause NOT EXISTS. Au lieu dexprimer quun tuple t doit tre associ tous les tuples du diviseur pour appartenir au rsultat, on recherche t tel quil nexiste aucun tuple du diviseur qui ne lui soit pas associ. Rechercher des tuples associs ou non, signifie concrtement effectuer des oprations de jointure.

46

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Exemple : quels sont les numros des pilotes qui conduisent tous les avions de la compagnie ? Pour l'exprimer en SQL, cette requte est traduite par : "Existe-t-il un pilote tel qu'il n'existe aucun avion de la compagnie qui ne soit pas conduit par ce pilote ?". SELECT FROM WHERE NUMPIL PILOTE P NOT EXISTS (SELECT * FROM AVION A WHERE NOT EXISTS (SELECT * FROM VOL WHERE VOL.NUMAV = A.NUMAV AND VOL.NUMPIL = P.NUMPIL ))

Dtaillons lexcution de cette requte. Pour chaque pilote examin par le 1er bloc, les diffrents tuples de AVION sont balays au niveau du 2me bloc et pour chaque avion, les conditions de jointure du 3me bloc sont values. Supposons que les trois relations de la base sont rduites aux tuples prsents dans la figure suivante. PILOTE NUMPIL 100 101 102 AVION NUMAV 10 21 VOL NUMVOL NUMPIL NUMAV IT100 100 10 IT200 100 10 AF214 101 21 AF321 102 10 AF036 101 10

Figure 5 : une instance de la base Considrons le pilote n 100. Parcourons les tuples de la relation AVION. Pour lavion n 10, le 3me bloc retourne un rsultat (le vol IT100), NOT EXISTS est donc faux et lavion n 10 nappartient pas au rsultat du 2me bloc. Lavion n 21 ntant jamais pilot par le pilote 100, le 3me bloc ne rend aucun tuple, le NOT EXISTS associ est donc valu vrai. Le 2me bloc rend donc un rsultat non vide (lavion n 21) et donc le NOT EXISTS du 1er bloc est faux. Le pilote n 100 nest donc pas retenu dans le rsultat de la requte. Pour le pilote 101 et lavion 10, il existe un vol (AF214). Le 3me bloc retourne un rsultat, NOT EXISTS est donc faux. Pour le mme pilote et lavion n 21, le 3me bloc restitue un tuple et nouveau NOT EXISTS est faux. Le 2me bloc rend donc un rsultat vide ce qui fait que le NOT EXISTS du 1er bloc est valu vrai. Le pilote 101 fait donc partie du rsultat de la requte. Le processus dcrit est nouveau excut pour le pilote 102 et comme il ne pilote pas lavion 21, le 2me bloc retourne une valeur et la condition du 1er bloc limine ce pilote du rsultat.

47

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

5.13 Gestion des transactions


Comme tout SGBD, ORACLE est un systme transactionnel, i.e. il gre les accs concurrents de multiples utilisateurs des donnes frquemment mises jour et soumises diverses contraintes. Une transaction est une squence doprations manipulant les donnes. Excute sur une base cohrente, elle laisse la base dans un tat cohrent : toutes les oprations sont ralises ou aucune. Les commandes COMMIT et ROLLBACK de SQL permettent de contrler la validation et l'annulation des transactions : - COMMIT : valide la transaction en cours. Les modifications de la base deviennent dfinitives ; - ROLLBACK : annule la transaction en cours. La base est restaure dans son tat au dbut de la transaction. Une modification directe de la base (INSERT, UPDATE ou DELETE) ne sera valide que par la commande COMMIT, ou lors de la sortie normale de sqlplus par la commande EXIT. Il est possible de se mettre en mode "validation automatique", dans ce cas, la validation est effectue automatiquement aprs chaque commande SQL de mise jour de donnes. Pour se mettre dans ce mode, il faut utiliser l'une des commandes suivantes : SET AUTOCOMMIT IMMEDIATE ou SET AUTOCOMMIT ON L'annulation de ce mode se fait avec la commande : SET AUTOCOMMIT OFF

48

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

6 SQL comme langage de contrle des donnes


6.1 Gestion des utilisateurs et de leurs privilges
6.1.1 Cration et suppression dutilisateurs Pour pouvoir accder ORACLE, un utilisateur doit tre identifi en tant que tel par le systme. Pour ce faire, il doit avoir un nom, un mot de passe et un ensemble de privilges (ou droits). Seul un administrateur (DBA - Data Base Administrator) peut crer des utilisateurs. La commande de cration est la suivante : GRANT [CONNECT, ][RESOURCE,] [DBA] TO utilisateur, [IDENTIFIED BY mot_de_passe,] Les options CONNECT, RESOURCE et DBA dterminent la classe de l'utilisateur crer, i.e. les droits qui lui sont attribus. Les droits associs ces options sont : - La connexion (CONNECT) : - Connexion tous les outils ORACLE ; - Manipulation des donnes sur lesquelles une autorisation a t attribue au pralable ; - Cration des vues et synonymes. - La cration de ressources (RESOURCE) Cette option n'est applicable que pour les utilisateurs ayant le privilge CONNECT. Elle offre en plus les droits suivants : - Cration des tables et index ; - Attribution et rsiliation de privilges sur des tables et index d'autres utilisateurs ; - L'administration (DBA) Cette option englobe les droits des deux options prcdentes. Elle offre en plus les droits suivants : - Accs toutes les donnes de tous les utilisateurs ; - Cration et suppression d'utilisateurs et de droits.

49

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

La clause IDENTIFIED BY n'est obligatoire que lors de la cration d'un nouvel utilisateur ou pour modifier le mot de passe d'un utilisateur existant. Il est aussi possible de crer ou d'attribuer les mmes privilges un ensemble d'utilisateurs dans une mme commande. Exemple : crer un nouvel utilisateur ut1 avec le mot de passe ut1p avec juste le droit de connexion. GRANT CONNECT TO ut1 IDENTIFIED BY ut1p Cette commande ne peut tre excute que par les utilisateurs ayant le privilge DBA Exemple : changer le mot de passe de ut1. Le nouveau mot de passe est utp. GRANT CONNECT TO ut1 IDENTIFIED BY utp Un utilisateur dORACLE peut tre supprim tout moment ou se voir dmuni de certains privilges. La commande correspondante est : REVOKE [CONNECT,] [RESOURCE,] [DBA] FROM utilisateur, L'option CONNECT interdit donc l'utilisateur de se connecter de nouveau ORACLE. 6.1.2 Cration et suppression de droits Toute table, vue ou synonyme n'est initialement accessible que par l'utilisateur qui l'a cr. Le partage de ces objets est souvent ncessaire. Pour rendre ce partage possible, le SGBD permet au propritaire d'un objet d'accorder des droits sur cet objet d'autres utilisateurs. La commande d'attribution des droits a la syntaxe suivante : GRANT droit, ON objet TO utilisateur, [WITH GRANT OPTION]

50

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Les droits possibles sont : SELECT interrogation des donnes ; INSERT ajout des donnes ; UPDATE modification des donnes ; DELETE suppression des donnes ; ALTER modification de la structure d'une relation ; INDEX cration d'index ; ALL toutes les oprations. Le privilge sur l'opration UPDATE peut concerner seulement quelques colonnes d'une table. Tout utilisateur qui reoit un privilge sur une table avec l'option WITH GRANT OPTION a en plus le droit de l'accorder un autre utilisateur. ALL peut tre utiliser pour dsigner tous les droits et PUBLIC pour dsigner tous les utilisateurs. Un droit ne peut tre retir que par l'utilisateur qui l'a accord ou bien qui a le privilge d'administration. La syntaxe de cette commande est la suivante : REVOKE droit, ON objet FROM utilisateur, Exemple : attribuer puis retirer l'utilisateur ut1 le droit d'interrogation et modification de la relation VOL. GRANT SELECT, UPDATE ON VOL TO ut1 REVOKE ON FROM SELECT, UPDATE VOL ut1

Exemple : interdire toute opration tous les utilisateurs sur la table avion. REVOKE ALL ON AVION FROM PUBLIC

51

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

6.2 Cration d'index


Pour acclrer les accs aux tuples, la cration d'index peut tre ralise pour un ou plusieurs attributs frquemment consults. La commande utiliser est la suivante : CREATE [UNIQUE] [NOCOMPRESS] INDEX <nom_index> ON <nom_table> (<nom_colonne>, [nom_colonne]) Lorsque le mot-clef UNIQUE est prcis, lattribut (ou la combinaison) index doit avoir des valeurs uniques. Une fois quils ont t crs, les index sont automatiquement utiliss par le systme et de manire transparente pour lutilisateur. Remarque : lors de la spcification de la contrainte PRIMARY KEY pour un ou plusieurs attributs ORACLE gnre automatiquement un index primaire (UNIQUE) pour le(s) attribut(s) concern(s). Exemple : CREATE INDEX ACCES_PILOTE ON PILOTE (NOMPIL)

6.3 Cration et utilisation des vues


Une vue permet de consulter et manipuler des donnes d'une ou de plusieurs tables. On considre quune vue est une table virtuelle car elle peut tre utilise de la mme faon quune relation mais ses donnes (redondantes par rapport la base originale) ne sont pas physiquement stockes. Plus prcisment, une vue est dfinie sous forme dune requte d'interrogation et cest cette requte qui est conserve dans le dictionnaire de la base. L'utilisation des vues permet de : - restreindre l'accs certaines colonnes ou certaines lignes d'une table pour certains utilisateurs (confidentialit) ; - simplifier la tche de l'utilisateur en le dchargeant de la formulation de requtes complexes ; - contrler la mise jour des donnes. La commande de cration d'une vue est la suivante : CREATE VIEW nom_vue [(colonne,)] AS <requte> [WITH CHECK OPTION]

52

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Si une liste de noms dattributs est prcise aprs le nom de la vue, ces noms seront ceux des attributs de la vue. Ils correspondent, deux deux, avec les attributs indiqus dans le SELECT de la requte dfinissant la vue. Si la liste de noms napparat pas, les attributs de la vue ont le mme nom que ceux attributs indiqus dans le SELECT de la requte. Il est trs important de savoir comment la vue crer sera utilise : consultation simplement et/ou mises jour. Exemple : pour viter que certains utilisateurs aient accs aux salaire et prime des pilotes, la vue suivante est dfinie leur intention et ils nont pas de droits sur la relation PILOTE. CREATE VIEW RESTRICT_PIL AS SELECT NUMPIL, NOMPIL, PRENOM_PIL, ADRESSE FROM PILOTE Exemple : pour pargner aux utilisateurs la formulation dune requte complexe, une vue est dfinie par les dveloppeurs pour consulter la charge horaire des pilotes. Sa dfinition est la suivante : CREATE VIEW CHARGE_HOR (NUMPIL, NOM, CHARGE) AS SELECT P.NUMPIL, NOMPIL, SUM(HEURE_ARR HEURE_DEP) FROM PILOTE P, VOL WHERE P.NUMPIL = VOL.NUMPIL GROUP BY P.NUMPIL, NOMPIL Lorsque cette vue est cre, les utilisateurs peuvent la consulter simplement par : SELECT * FROM CHARGE_HOR Un utilisateur ne sintressant quaux pilotes parisiens dont la charge excde un seuil de 40 heures formulera la requte suivante. SELECT * FROM CHARGE_HOR C, PILOTE P WHERE C.NUMPIL = P.NUMPIL AND CHARGE > 40 AND ADRESSE = PARIS

Lorsque le systme value une requte formule sur une vue, il combine la requte de lutilisateur et la requte de dfinition de la vue pour obtenir le rsultat.

53

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Lorsqu'une vue est utilise pour effectuer des oprations de mise jour, elle est soumise des contraintes fortes. En effet pour que les mises jour, travers une vue, soient automatiquement rpercutes sur la relation de base associe, il faut imprativement que : - la vue ne comprenne pas de clause GROUP BY. - la vue n'ait qu'une seule relation dans la clause FROM. Ceci implique que dans une vue multi-relation, les jointures soient exprimes de manire imbrique. Lorsque la requte de dfinition dune vue comporte une projection sur un sousensemble dattributs dune relation, les attributs non mentionns prendront des valeurs nulles en cas dinsertion travers la vue. Exemple : dfinir une vue permettant de consulter les vols des pilotes habitant Bayonne et de les mettre jour. CREATE VIEW VOLPIL_BAYONNE AS SELECT * FROM VOL WHERE NUMPIL IN (SELECT NUMPIL FROM PILOTE WHERE ADRESSE = BAYONNE) La vue prcdente permet la consultation uniquement des vols vrifiant la condition donne sur le pilote associ. Il est galement possible de mettre jour la relation VOL travers cette vue mais lopration de mise jour peut concerner nimporte quel vol (sans aucune condition). Par exemple supposons que le pilote n 100 habite Paris, linsertion suivante sera ralise dans la relation VOL travers la vue, mais le tuple ne pourra pas tre visible en consultant la vue. INSERT INTO VOLPIL_BAYONNE (NUMVOL,NUMPIL,NUMAV,VILLE_DEP) VALUES (IT256, 100, 14, PARIS)

Si la clause WITH CHECK OPTION est prsente dans lordre de cration dune vue, la table associe peut tre mise jour, avec vrification des conditions prsentes dans la requte dfinissant la vue. La vue joue alors le rle d'un filtre entre l'utilisateur et la table de base, ce qui permet la vrification de toute condition et notamment des contraintes d'intgrit.

54

Nol NOVELLI

Initiation aux Bases de Donnes Relationnelles

Exemple : dfinir une vue permettant de consulter et de les mettre jour uniquement les vols des pilotes habitant Bayonne. CREATE VIEW VOLPIL_BAYONNE AS SELECT * FROM VOL WHERE NUMPIL IN (SELECT NUMPIL FROM PILOTE WHERE ADRESSE = BAYONNE) WITH CHECK OPTION Lajout de la clause WITH CHECK OPTION la requte prcdente interdira toute opration de mise jour sur les vols qui ne sont pas assurs par des pilotes habitant Bayonne et linsertion dun vol assur par le pilote n 100 chouera. Exemple : dfinir une vue sur PILOTE, permettant la vrification de la contrainte de domaine suivante : le salaire d'un pilote est compris entre 3.000 et 5.000. CREATE VIEW DPILOTE AS SELECT * FROM PILOTE WHERE SALAIRE BETWEEN 3000 AND 5000 WITH CHECK OPTION Linsertion suivante va alors chouer. INSERT INTO DPILOTE (NUMPIL,SALAIRE) VALUES(175,7000) Exemple : dfinir une vue sur vol permettant de vrifier les contraintes d'intgrit rfrentielle en insertion et en modification. CREATE VIEW IMVOL AS SELECT * FROM VOL WHERE NUMPIL IN (SELECT NUMPIL FROM PILOTE) AND NUMAV IN (SELECT NUMAV FROM AVION) WITH CHECK OPTION De manire similaire une relation de la base, une vue peut tre - consulte via une requte d'interrogation ; - dcrite structurellement grce la commande DESCRIBE ou en interrogeant la table systme ALL_VIEWS ; - dtruite par l'ordre DROP VIEW <nom_vue>.

55

Nol NOVELLI

S-ar putea să vă placă și