BASES de DONNEES - dil.univ-mrs.frnovelli/BD/BD_Initiation.pdf · Initiation aux Bases de Données...

of 55/55
Initiation aux Bases de Données Relationnelles 1 Noël NOVELLI BASES de DONNEES Ce document est basé sur les supports de cours de Rosine CICCHETTI et Nicole BIDOIT. 1 Introduction : l’approche Bases de données ............................................................................................................... 2 1.1 Approche par application .................................................................................................................................... 2 1.2 Approche Bases de Données ............................................................................................................................... 2 2 Le modèle relationnel ................................................................................................................................................. 3 2.1 Rappels mathématiques ...................................................................................................................................... 3 2.2 Concept de Relation ............................................................................................................................................ 3 2.3 Concept de Domaine ........................................................................................................................................... 4 2.4 Concept d’Attribut .............................................................................................................................................. 4 2.5 Double vision d’une relation ............................................................................................................................... 4 2.6 Concepts complémentaires ................................................................................................................................. 5 2.7 Schéma relationnel et Contraintes d’Intégrité ..................................................................................................... 5 3 Algèbre relationnelle .................................................................................................................................................. 7 3.1 Projection ............................................................................................................................................................ 8 3.2 Sélection ............................................................................................................................................................. 9 3.3 Jointure ............................................................................................................................................................. 14 3.4 Notations supplémentaires ................................................................................................................................ 22 3.4.1 Opérateur produit (jointure naturelle) ....................................................................................................... 22 3.4.2 Opérateur somme ...................................................................................................................................... 22 3.4.3 Opérateur produit cartésien ....................................................................................................................... 22 3.4.4 Opérateur union ........................................................................................................................................ 22 3.4.5 Opérateur intersection ............................................................................................................................... 22 3.4.6 Opérateur différence ................................................................................................................................. 23 3.4.7 Propriété des opérateurs ensemblistes....................................................................................................... 23 3.4.8 Opérateur de projection............................................................................................................................. 23 3.4.9 Opérateur de sélection............................................................................................................................... 23 4 Structured Query Language (SQL) ........................................................................................................................... 24 4.1 SQL LDD.......................................................................................................................................................... 24 4.1.1 Types syntaxiques (presque les domaines) ............................................................................................... 24 4.1.2 Création 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 données ................................................................................................................................. 26 4.2.3 Modification de données ........................................................................................................................... 26 4.2.4 Suppression de données ............................................................................................................................ 26 5 Les clauses de SELECT ............................................................................................................................................ 27 5.1 Expression des projections................................................................................................................................ 27 5.2 Expression des sélections.................................................................................................................................. 28 5.3 Calculs horizontaux .......................................................................................................................................... 30 5.4 Calculs verticaux (fonctions agrégatives) ......................................................................................................... 33 5.5 Expression des jointures sous forme prédicative .............................................................................................. 34 5.6 Autre expression de jointures : forme imbriquée .............................................................................................. 35 5.7 Tri des résultats ................................................................................................................................................. 38 5.8 Test d’absence de données ................................................................................................................................ 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 6 SQL comme langage de contrôle des données.......................................................................................................... 49 6.1 Gestion des utilisateurs et de leurs privilèges ................................................................................................... 49 6.1.1 Création et suppression d’utilisateurs ....................................................................................................... 49 6.1.2 Création et suppression de droits .............................................................................................................. 50 6.2 Création d'index ................................................................................................................................................ 52 6.3 Création et utilisation des vues ......................................................................................................................... 52
  • date post

    10-Sep-2018
  • Category

    Documents

  • view

    218
  • download

    1

Embed Size (px)

Transcript of BASES de DONNEES - dil.univ-mrs.frnovelli/BD/BD_Initiation.pdf · Initiation aux Bases de Données...

  • Initiation aux Bases de Donnes Relationnelles

    1 Nol NOVELLI

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

    1 Introduction : lapproche Bases de donnes ............................................................................................................... 2

    1.1 Approche par application .................................................................................................................................... 2 1.2 Approche Bases de Donnes ............................................................................................................................... 2

    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

    3 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

    4 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

    5 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

    6 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

  • Initiation aux Bases de Donnes Relationnelles

    2 Nol NOVELLI

    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

    MCD

    MLD

    MPD

    SI

    BD

    Conception

    Drivation et Normalisation

    Implmentation et optimisation

    Modle de Bases de Donnes (hirarchique, rseaux, relationnelle, objet)

  • Initiation aux Bases de Donnes Relationnelles

    3 Nol NOVELLI

    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 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 D_NUMAV D_NOMAV D_CAP 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

    a1 a2 a3

    b1 b2

    A B

    - 100 - 101 - 103 - 110

    - A300 - A320 - A330

    - 300 - 60 - 350 - 500

    - Marseille - Bordeaux - Paris x x x

  • Initiation aux Bases de Donnes Relationnelles

    4 Nol NOVELLI

    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 NUMAV NOMAV CAP LOC 100 A300 350 Marseille 101 A320 500 Paris PILOTE NUMPIL NOMPIL ADRESSE 1 Smith Marseille 2 Scott Bordeaux VOL NUMVOL NUMAV NUMPIL H_DEP H_ARR V_DEP V_ARR 1 100 1 12h00 13h20 Marseille Paris 2 100 2 14h00 15h00 Paris Bordeaux 3 101 1 16h00 17h30 Paris Bordeaux

  • Initiation aux Bases de Donnes Relationnelles

    5 Nol NOVELLI

    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 , ) VOL NUMVOL NUMAV NUMPIL H_DEP H_ARR V_DEP V_ARR 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)

  • Initiation aux Bases de Donnes Relationnelles

    6 Nol NOVELLI

    o CI de rfrence : toute valeur de clef trangre doit exister pour la clef primaire associe, i.e.

    NUMAV dans VOL NUMAV dans AVION 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.

    - 100 - 101

    - 100 - 101 - 103 - 110

  • Initiation aux Bases de Donnes Relationnelles

    7 Nol NOVELLI

    3 Algbre relationnelle Nous prsentons lalgbre relationnelle par lexemple Exemple dinstance de la Base de Donnes Cinma : FILM TITRE METTEUR EN SCENE ACTEUR Speed 2 Jan de Bont S. Bullock Speed 2 Jan de Bont J. Patrick Speed 2 Jan de Bont W. Dafoe Marion M. Poirier C. Tetard Marion M. Poirier MF Pisier Marion M. Poirier M. Poirier CINE NOM ADRESSE TELEPHONE Franais 9, rue Montesquieu 05 56 44 11 87 Gaumont 9, Cours Clemenceau 05 56 52 03 54 Trianon 6, rue Franklin 05 56 44 35 17 UGC Ariel 20, rue Judaique 05 56 44 31 17 PROGRAMME NOM-CINE TITRE HORAIRE Franais Speed 2 18h00 Franais Speed 2 20h00 Franais Speed 2 22h00 Franais Marion 16h00 Trianon Marion 18h00

  • Initiation aux Bases de Donnes Relationnelles

    8 Nol NOVELLI

    3.1 Projection Notation : Projection( Relation / Attr ) Extraire tous les titres de tous les films : R1 = Projection( FILM / TITRE ) FILM TITRE METTEUR EN SCENE ACTEUR Speed 2 Jan de Bont S. Bullock Speed 2 Jan de Bont J. Patrick Speed 2 Jan de Bont W. Dafoe Marion M. Poirier C. Tetard Marion M. Poirier MF Pisier Marion M. Poirier M. Poirier R1 TITRE Speed 2 Marion Extraire les titres des films laffiche : R2 = Projection( PROGRAMME / TITRE ) PROGRAMME NOM-CINE TITRE HORAIRE Franais Speed 2 18h00 Franais Speed 2 20h00 Franais Speed 2 22h00 Franais Marion 16h00 Trianon Marion 18h00 R2 TITRE Speed 2 Marion

  • Initiation aux Bases de Donnes Relationnelles

    9 Nol NOVELLI

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

  • Initiation aux Bases de Donnes Relationnelles

    10 Nol NOVELLI

    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 TITRE HORAIRE Franais Speed 2 18h00 Franais Speed 2 20h00 Franais Speed 2 22h00 Franais Marion 16h00 Trianon Marion 18h00 R5_1 NOM-CINE TITRE HORAIRE Franais Speed 2 18h00 Franais Speed 2 20h00 Franais Speed 2 22h00 Trianon Marion 18h00 R5 NOM-CINE TITRE HORAIRE Trianon Marion 18h00

  • Initiation aux Bases de Donnes Relationnelles

    11 Nol NOVELLI

    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 TITRE HORAIRE Franais Speed 2 18h00 Franais Speed 2 20h00 Franais Speed 2 22h00 Franais Marion 16h00 Trianon Marion 18h00 R6_1 NOM-CINE TITRE HORAIRE Franais Marion 16h00 Trianon Marion 18h00 R6_2 NOM-CINE TITRE HORAIRE R6 NOM-CINE TITRE HORAIRE Franais Marion 16h00 Trianon Marion 18h00

  • Initiation aux Bases de Donnes Relationnelles

    12 Nol NOVELLI

    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 TITRE HORAIRE Franais Speed 2 18h00 Franais Speed 2 20h00 Franais Speed 2 22h00 Franais Marion 16h00 Trianon Marion 18h00 R7_1 NOM-CINE TITRE HORAIRE Franais Marion 16h00 Trianon Marion 18h00 R7_2 NOM-CINE TITRE HORAIRE Trianon Marion 18h00 R7 NOM-CINE HORAIRE Trianon 18h00

  • Initiation aux Bases de Donnes Relationnelles

    13 Nol NOVELLI

    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 METTEUR EN SCENE ACTEUR Speed 2 Jan de Bont S. Bullock Speed 2 Jan de Bont J. Patrick Speed 2 Jan de Bont W. Dafoe Marion M. Poirier C. Tetard Marion M. Poirier MF Pisier Marion M. Poirier M. Poirier R8_1 TITRE METTEUR EN SCENE ACTEUR Marion M. Poirier MF Pisier R8 TITRE METTEUR EN SCENE ACTEUR Speed 2 Jan de Bont S. Bullock Speed 2 Jan de Bont J. Patrick Speed 2 Jan de Bont W. Dafoe Marion M. Poirier C. Tetard Marion M. Poirier M. Poirier Ceci ne rpond pas la question !

  • Initiation aux Bases de Donnes Relationnelles

    14 Nol NOVELLI

    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 R_B B1 B2 * a1 * b1 ? a2 - b2 + a3 * b3 + b4

    Produit cartsien (R_A x R_B) A1 A2 B1 B2 *

    * * * ? ? ? ? + + + +

    a1 a1 a1 a1 a2 a2 a2 a2 a3 a3 a3 a3

    * - * + * - * + * - * +

    b1 b2 b3 b4 b1 b2 b3 b4 b1 b2 b3 b4

    Jointure( R_A, R_B / A1 = B1 ) A1 A2 B1 B2 *

    * +

    a1 a1 a3

    * * +

    b1 b3 b4

    ATTENTION: Jointure( R_A, R_B / A1 B1 ) A1 A2 B1 B2 *

    * ? ? ? ? + + +

    a1 a1 a2 a2 a2 a2 a3 a3 a3

    - + * - * + * - *

    b2 b4 b1 b2 b3 b4 b1 b2 b3

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

  • Initiation aux Bases de Donnes Relationnelles

    15 Nol NOVELLI

    FILM TITRE METTEUR EN SCENE ACTEUR Speed 2 Jan de Bont S. Bullock Speed 2 Jan de Bont J. Patrick Speed 2 Jan de Bont W. Dafoe Marion M. Poirier C. Tetard Marion M. Poirier MF Pisier Marion M. Poirier M. Poirier R8_1 = Slection( FILM / ACTEUR = MF Pisier ) R8_1 TITRE METTEUR EN SCENE ACTEUR Marion M. Poirier 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 METTEUR EN SCENE ACTEUR R8_2.TITRE Speed 2 Jan de Bont S. Bullock Marion Speed 2 Jan de Bont J. Patrick Marion Speed 2 Jan de Bont W. Dafoe Marion Marion M. Poirier C. Tetard Marion Marion M. Poirier MF Pisier Marion Marion M. Poirier M. Poirier Marion R8_3 TITRE METTEUR EN SCENE ACTEUR R8_2.TITRE Speed 2 Jan de Bont S. Bullock Marion Speed 2 Jan de Bont J. Patrick Marion Speed 2 Jan de Bont W. Dafoe Marion R8 = Projection( R8_3 / TITRE ) R8 TITRE Speed 2 Ce rsultat est exact mais ceci ne rpond toujours pas la question !

  • Initiation aux Bases de Donnes Relationnelles

    16 Nol NOVELLI

    Donner les films dans lesquels MF Pisier ne joue pas : (version 3) FILM TITRE METTEUR EN SCENE ACTEUR Speed 2 Jan de Bont S. Bullock Speed 2 Jan de Bont J. Patrick Speed 2 Jan de Bont W. Dafoe Marion M. Poirier C. Tetard Marion M. Poirier MF Pisier Marion M. Poirier M. Poirier La patinoire JP Toussaint MF Pisier R8_1 = Slection( FILM / ACTEUR = MF Pisier ) R8_1 TITRE METTEUR EN SCENE ACTEUR Marion M. Poirier MF Pisier La patinoire JP Toussaint MF Pisier R8_2 = Projection( R8_1 / TITRE ) R8_2 TITRE Marion La patinoire

  • Initiation aux Bases de Donnes Relationnelles

    17 Nol NOVELLI

    R8_3 = Jointure( FILM, R8_2 / FILM.TITRE R8_2.TITRE ) FILM x R8_2 TITRE METTEUR EN SCENE ACTEUR R8_2.TITRE Speed 2 Jan de Bont S. Bullock Marion Speed 2 Jan de Bont J. Patrick Marion Speed 2 Jan de Bont W. Dafoe Marion Marion M. Poirier C. Tetard Marion Marion M. Poirier MF Pisier Marion Marion M. Poirier M. Poirier Marion La patinoire JP Toussaint MF Pisier Marion Speed 2 Jan de Bont S. Bullock La patinoire Speed 2 Jan de Bont J. Patrick La patinoire Speed 2 Jan de Bont W. Dafoe La patinoire Marion M. Poirier C. Tetard La patinoire Marion M. Poirier MF Pisier La patinoire Marion M. Poirier M. Poirier La patinoire La patinoire JP Toussaint MF Pisier La patinoire R8_3 TITRE METTEUR EN SCENE ACTEUR R8_2.TITRE Speed 2 Jan de Bont S. Bullock Marion Speed 2 Jan de Bont J. Patrick Marion Speed 2 Jan de Bont W. Dafoe Marion La patinoire JP Toussaint MF Pisier Marion Speed 2 Jan de Bont S. Bullock La patinoire Speed 2 Jan de Bont J. Patrick La patinoire Speed 2 Jan de Bont W. Dafoe La patinoire Marion M. Poirier C. Tetard La patinoire Marion M. Poirier MF Pisier La patinoire Marion M. Poirier M. Poirier La patinoire R8 = Projection( R8_3 / TITRE ) R8 TITRE Speed 2 La patinoire Marion Ceci ne rpond toujours pas la question !

  • Initiation aux Bases de Donnes Relationnelles

    18 Nol NOVELLI

    Donner les films dans lesquels MF Pisier ne joue pas : (version 4) FILM TITRE METTEUR EN SCENE ACTEUR Speed 2 Jan de Bont S. Bullock Speed 2 Jan de Bont J. Patrick Speed 2 Jan de Bont W. Dafoe Marion M. Poirier C. Tetard Marion M. Poirier MF Pisier Marion M. Poirier M. Poirier La patinoire JP Toussaint MF Pisier R8_1 = Slection( FILM / ACTEUR = MF Pisier ) R8_1 TITRE METTEUR EN SCENE ACTEUR Marion M. Poirier MF Pisier La patinoire JP Toussaint 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 METTEUR EN SCENE ACTEUR R8_2.TITRE Speed 2 Jan de Bont S. Bullock Marion Speed 2 Jan de Bont J. Patrick Marion Speed 2 Jan de Bont W. Dafoe Marion Marion M. Poirier C. Tetard Marion Marion M. Poirier MF Pisier Marion Marion M. Poirier M. Poirier Marion La patinoire JP Toussaint MF Pisier Marion Speed 2 Jan de Bont S. Bullock La patinoire Speed 2 Jan de Bont J. Patrick La patinoire Speed 2 Jan de Bont W. Dafoe La patinoire Marion M. Poirier C. Tetard La patinoire Marion M. Poirier MF Pisier La patinoire Marion M. Poirier M. Poirier La patinoire La patinoire JP Toussaint MF Pisier La patinoire

  • Initiation aux Bases de Donnes Relationnelles

    19 Nol NOVELLI

    R8_3 TITRE METTEUR EN SCENE ACTEUR R8_2.TITRE Marion M. Poirier C. Tetard Marion Marion M. Poirier MF Pisier Marion Marion M. Poirier M. Poirier Marion La patinoire JP Toussaint MF Pisier La patinoire R8_4 = Projection( R8_3 / FILM.TITRE, FILM.MES, FILM.ACTEUR ) R8_4 TITRE METTEUR EN SCENE ACTEUR Marion M. Poirier C. Tetard Marion M. Poirier MF Pisier Marion M. Poirier M. Poirier La patinoire JP Toussaint MF Pisier R8_5 = Diffrence( FILM, R8_4 ) R8_5 TITRE METTEUR EN SCENE ACTEUR Speed 2 Jan de Bont S. Bullock Speed 2 Jan de Bont J. Patrick Speed 2 Jan de Bont 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.

  • Initiation aux Bases de Donnes Relationnelles

    20 Nol NOVELLI

    Donner les films dans lesquels MF Pisier ne joue pas : (version 4 bis) FILM TITRE METTEUR EN SCENE ACTEUR Speed 2 Jan de Bont S. Bullock Speed 2 Jan de Bont J. Patrick Speed 2 Jan de Bont W. Dafoe Marion M. Poirier C. Tetard Marion M. Poirier MF Pisier Marion M. Poirier M. Poirier La patinoire JP Toussaint MF Pisier R8_1 = Slection( FILM / ACTEUR = MF Pisier ) R8_1 TITRE METTEUR EN SCENE ACTEUR Marion M. Poirier MF Pisier La patinoire JP Toussaint 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.

  • Initiation aux Bases de Donnes Relationnelles

    21 Nol NOVELLI

    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 METTEUR EN SCENE ACTEUR Speed 2 Jan de Bont S. Bullock Speed 2 Jan de Bont J. Patrick Speed 2 Jan de Bont W. Dafoe Marion M. Poirier C. Tetard Marion M. Poirier MF Pisier Marion M. Poirier M. Poirier R9_1 TITRE METTEUR EN SCENE ACTEUR Marion M. Poirier MF Pisier PROGRAMME NOM-CINE TITRE HORAIRE Franais Speed 2 18h00 Franais Speed 2 20h00 Franais Speed 2 22h00 Franais Marion 16h00 Trianon Marion 18h00 R9_2 R9_1.TITRE R9_1.METTEUR

    EN SCENE ACTEUR NOM-CINE TITRE HORAIRE

    Marion M. Poirier MF Pisier Franais Marion 16h00 Marion M. Poirier MF Pisier Trianon Marion 18h00 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 :

  • Initiation aux Bases de Donnes Relationnelles

    22 Nol NOVELLI

    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

  • Initiation aux Bases de Donnes Relationnelles

    23 Nol NOVELLI

    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), =, >,

  • Initiation aux Bases de Donnes Relationnelles

    24 Nol NOVELLI

    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 SQL Relation Table Attribut Colonne Tuple 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) Chane de caractres de longueur variable (maximum n) CHAR(n) Chane de caractres de longueur fixe (n caractres) NUMBER Nombre entier (40 chiffres maximum) NUMBER(n, m) Nombre de longueur totale n avec m dcimales DATE Date (DD-MON-YY est le format par dfaut) LONG Flot de caractres

    ATTENTION : plusieurs SQL donc plusieurs syntaxes (ici ORACLE)

  • Initiation aux Bases de Donnes Relationnelles

    25 Nol NOVELLI

    4.1.2 Cration de table

    CREATE TABLE ( [NOT NULL] [, ], [] );

    o reprsente la liste des contraintes d'intgrit structurelles concernant les colonnes de la table cre. Elle s'exprime sous la forme suivante :

    CONSTRAINT o est :

    - PRIMARY KEY (attribut1, [attribut2] ) - FOREIGN KEY (attribut1, [attribut2]) REFERENCES (attribut1, [attribut2]) - CHECK (attribut ) avec qui peut tre une

    expression boolenne "simple" ou de la forme IN (liste de valeurs) ou BETWEEN AND

    4.1.3 Modification de la structure d'une table Ajout :

    ALTER TABLE ADD ( [, ] );

    ALTER TABLE ADD ( [, ]);

    Modification :

    ALTER TABLE MODIFY ([ ] [,

    ]);

    4.1.4 Consultation de la structure d'une base

    DESCRIBE ;

    4.1.5 Destruction de table

    DROP TABLE ;

  • Initiation aux Bases de Donnes Relationnelles

    26 Nol NOVELLI

    4.2 SQL LMD

    4.2.1 Interrogation

    SELECT [DISTINCT] [, ] FROM [, ] [WHERE ] [GROUP BY [, ] [HAVING ]] [ORDER BY [, ]]

    4.2.2 Insertion de donnes

    INSERT INTO [(colonne, )] VALUES (valeur, )

    INSERT INTO [(colonne, )] SELECT

    4.2.3 Modification de donnes

    UPDATE SET colonne = valeur, [WHERE condition]

    UPDATE SET colonne = SELECT

    4.2.4 Suppression de donnes

    DELETE FROM [WHERE condition]

  • Initiation aux Bases de Donnes Relationnelles

    27 Nol NOVELLI

    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] [, ] FROM [, ] [WHERE ] [GROUP BY [, ] [HAVING ]] [ORDER BY [, ]]

    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

  • Initiation aux Bases de Donnes Relationnelles

    28 Nol NOVELLI

    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

  • Initiation aux Bases de Donnes Relationnelles

    29 Nol NOVELLI

    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

  • Initiation aux Bases de Donnes Relationnelles

    30 Nol NOVELLI

    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 :

  • Initiation aux Bases de Donnes Relationnelles

    31 Nol NOVELLI

    ABS(n) la valeur absolue de n ; FLOOR(n) la partie entire de n ; POWER(m, n) m la puissance n ; TRUNC(n[, m]) 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.

  • Initiation aux Bases de Donnes Relationnelles

    32 Nol NOVELLI

    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).

  • Initiation aux Bases de Donnes Relationnelles

    33 Nol NOVELLI

    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'

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

  • Initiation aux Bases de Donnes Relationnelles

    34 Nol NOVELLI

    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 o 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

  • Initiation aux Bases de Donnes Relationnelles

    35 Nol NOVELLI

    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)

  • Initiation aux Bases de Donnes Relationnelles

    36 Nol NOVELLI

    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 sous-

    requte, 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')

  • Initiation aux Bases de Donnes Relationnelles

    37 Nol NOVELLI

    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')

  • Initiation aux Bases de Donnes Relationnelles

    38 Nol NOVELLI

    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)

  • Initiation aux Bases de Donnes Relationnelles

    39 Nol NOVELLI

    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).

  • Initiation aux Bases de Donnes Relationnelles

    40 Nol NOVELLI

    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 NUMVOL NUMPIL

    IT100 100 IT100 100 AF101 100 AF101 100 IT101 102 IT101 102 BA003 105 IT305 102 BA045 105 BA003 105 IT305 102 BA045 105 AF421 124 BA047 105 BA047 105 BA087 105 BA087 105 AF421 124

    Figure 1 : relation exemple VOL 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.

  • Initiation aux Bases de Donnes Relationnelles

    41 Nol NOVELLI

    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.

  • Initiation aux Bases de Donnes Relationnelles

    42 Nol NOVELLI

    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 Espagne

    PACA Ile-de-France Marseille Aix Cassis Paris

    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).

  • Initiation aux Bases de Donnes Relationnelles

    43 Nol NOVELLI

    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 = ou CONNECT BY = PRIOR 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 = PRIOR ou CONNECT BY PRIOR =

  • Initiation aux Bases de Donnes Relationnelles

    44 Nol NOVELLI

    Remarque : avec la reprsentation relationnelle plate, le dans une structure hirarchique correspond la clef primaire de la relation, le la clef trangre. Lorsque la valeur de lattribut est la racine de la hirarchie, la valeur de lattribut 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 :

  • Initiation aux Bases de Donnes Relationnelles

    45 Nol NOVELLI

    SELECT LPAD('-', 2*LEVEL,' ')|| LIEUSPEC FROM LIEU CONNECT BY PRIOR LIEUSPEC = LIEUGEN START WITH LIEUGEN = FRANCE ORDER BY LEVEL || 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.

  • Initiation aux Bases de Donnes Relationnelles

    46 Nol NOVELLI

    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.

  • Initiation aux Bases de Donnes Relationnelles

    47 Nol NOVELLI

    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 NUMPIL FROM PILOTE P WHERE 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 AVION VOL NUMPIL NUMAV NUMVOL NUMPIL NUMAV

    100 10 IT100 100 10 101 21 IT200 100 10 102 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.

  • Initiation aux Bases de Donnes Relationnelles

    48 Nol NOVELLI

    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

  • Initiation aux Bases de Donnes Relationnelles

    49 Nol NOVELLI

    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.

  • Initiation aux Bases de Donnes Relationnelles

    50 Nol NOVELLI

    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]

  • Initiation aux Bases de Donnes Relationnelles

    51 Nol NOVELLI

    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 SELECT, UPDATE ON VOL FROM ut1 Exemple : interdire toute opration tous les utilisateurs sur la table avion. REVOKE ALL ON AVION FROM PUBLIC

  • Initiation aux Bases de Donnes Relationnelles

    52 Nol NOVELLI

    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 ON (, [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 [WITH CHECK OPTION]

  • Initiation aux Bases de Donnes Relationnelles

    53 Nol NOVELLI

    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.

  • Initiation aux Bases de Donnes Relationnelles

    54 Nol NOVELLI

    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 sous-ensemble 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.

  • Initiation aux Bases de Donnes Relationnelles

    55 Nol NOVELLI

    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 .