BDD_Chap7

download BDD_Chap7

of 39

Transcript of BDD_Chap7

  • 7/25/2019 BDD_Chap7

    1/39

    Chapitre 7Langage SQL

    I. IntroductionSQL (Structured Query Language, ou langage de requtes structures) est l'interface externe la plusrpandue pour grer une base de donnes. C'est un langage dclaratif dans le sens o il suffit d'exprimer ceque l'on veut obtenir, sans devoir expliquer la mthode pour y parvenir. Ainsi, les oprations directementutilisables par les usagers sont en gnral celles des langages dits assertionnels.

    Ces langages, btis sur l'algbre relationnelle, permettent de manipuler des bases de donnes relationnelles.Nous pouvons citer titre d'exemple :-

    QUEL (QUEry Language) par Zook en 1977- QBE (Query By Example) par Zloof en 1977- SQL (Structured Query Language) par IBM

    Aujourd'hui, le langage SQL est normalis et constitue le standard d'accs aux bases de donnesrelationnelles. Les autres interfaces par menus, fentres, grilles ou de programmation type langage de 3meou 4me gnration (L3G et L4G) sont le plus souvent offertes au-dessus du langage SQL. Celui-ciconstitue donc le point d'entre des SGBD relationnels. Il a t normalis quatre reprises (ISO et ANSIsont des organismes chargs de la normalisation) :

    - 1986 : SQL 86 - ANSI*- 1989 : - ISO* et ANSI- 1992 : SQL 2 - ISO et ANSI- 1999 : SQL 3 - ISO

    II. Prsentation de SQL

    SQL est un langage de gestion de bases de donnes relationnelles. Il tend l'algbre relationnelle et permet :

    -

    de crer des bases de donnes- d'ajouter, modifier et consulter des donnes d'une base de donnes existante- de contrler les accs aux informations d'une BD

    SQL est un langage ensembliste qui :- respecte lindpendance des niveaux- garantit la scurit- permet une gestion multi-utilisateurs- utilise un dictionnaire- respecte les contraintes dintgrit- est portable (standardisation)

    SQL tend l'algbre relationnelle, cependant il utilise les termes table, ligneet colonneau lieu des termesrelationnels relation, tuple et attribut. Une instruction SQL peut s'crire sur plusieurs lignes. Pour tre

    excute, l'instruction doit se terminer par un point-virgule. SQL est un langage de requte, pas un langagede programmation. Par consquent, il n'y pas de variables ni de structures de contrles (if, while, for). C'estpourquoi on peut ventuellement l'intgrer dans un langage de programmation comme PL/SQL, C ou Java.

    III.Les 3 facettes de SQL

    SQL se subdivise en 3 sous-langages :- LDD(Langage de Dfinition de Donnes) : cration, modification et suppression des objets que peut

    manipuler une BD (tables, vues et index, etc).- LMD (Langage de Manipulation de Donnes) : ajout, suppression, modification et extraction des

    donnes.- LCD(Langage de Contrle de Donnes) : scurisation et validation des donnes.

  • 7/25/2019 BDD_Chap7

    2/39

    Base de donnes 37

    Chacun de ces sous-langages propose ses mots-cls propres. Voici les principales primitives que nousverrons au cours de ce chapitre :

    LDD LMD LCD

    CREATEALTER

    DROP

    SELECTINSERT

    UPDATEDELETE

    GRANTREVOKE

    COMMITROLLBACK

    IV.Le Langage de Dfinit ion de Donnes (LDD)

    Dfinition :Le langage de dfinition de donnes permet la dfinition du schma d'une base de donnes ainsi quecertaines de ses contraintes d'intgrit. Il comporte galement les oprations de mise jour de schmatelles que la suppression d'une table ou la modification de la dfinition d'une table.

    Le LDD est donc compos de 3 primitives :- CREATEpour la cration d'un objet (table, index, vue, etc).- ALTERpour la modification d'un objet.-

    DROPpour la suppression d'un objet.

    1. Cration de table

    La cration de table se fait grce au mot-cl CREATE TABLE.

    Chaque table est dfinie par :- son nom- sa liste d'attributs- sa liste de contraintes sur table

    Chaque attribut est dfini par :- son type

    -

    sa valeur par dfaut- sa liste des contraintes sur attribut

    Le type des attributs est choisir parmi un ensemble fini de types. Les principaux types possibles sontselon les standards:- 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 au maximum)- NUMBER(n,m) : nombre entier de longueur totale n avec m dcimales- INTEGER: entier- FLOAT: rel- DATE: date (DD-MON-YY est le format par dfaut)- ...

    Syntaxe de dfinition d'une table en SQL

    CREATE TABLE nom_t abl e

    ( at t r i but 1 t ype1[ DEFAULT val eur _par _df aut ] [ cont rai nt e sur at t r i but 1] ,

    ,att r i but N t ypeN

    [ DEFAULT val eur _par _df aut ] [ cont r ai nt e sur att r i but N] ,

    CONSTRAINT cont r ai nt e1 sur r el at i on) ,,CONSTRAINT cont rai nt eM sur r el at i on);

  • 7/25/2019 BDD_Chap7

    3/39

    Base de donnes 38

    Notation (les lments entre [ ] sont optionnels) :- Valeur_par_dfautdoit tre compatible avec le type de l'attribut. Elle peut prendre une des valeurs

    parmi :o constanteo NULL

    - Contrainte sur attributdcrit les contraintes mono-attributs. Elle peut prendre une valeur parmi :

    o

    NOT NULLo UNIQUEo REFERENCES nom_de_relation2 (pour les cls trangres)o CHECK (expression logique)o PRIMARY KEY

    Les contraintes sur attribut restreignent les valeurs d'un attribut (ex : l'ge d'une personne attributAge ne peut pas tre ngatif et ne dpasse pas 130 ans).Remarque : S'il y a plusieurs contraintes sur un attribut, elles sont spares par des virgules.

    - Contrainte sur relation dcrit les contraintes multi-attributs. Elle peut prendre une valeur parmi :o UNIQUE(liste d'attributs)o PRIMARY KEY(liste d'attributs)o FOREIGN KEY(liste d'attributs) REFERENCESnom_de_relation2 (liste d'attributs)

    S'il y a plusieurs contraintes multi-attribut, elles sont spares par des virgules.Les contraintes sur relation dfinissent des rgles smantiques entre plusieurs attributs. Il n'y a pasd'ordre dans la dfinition des attributs ou des contraintes sur relation.

    Les dfinitions d'attributs et de contraintes sont spares par des virgules. Chaque dfinition derelation se termine par un point-virgule.

    Il est recommand de donner des noms de contraintes explicites (aprs le mot cl CONSTRAINT)afin de retrouver plus facilement l'origine des erreurs qui pourront tre signales par le SGBD, suite des violations de ces contraintes.

    La signification des diffrents mots-cls (NULL, NOT NULL, UNIQUE,) est donne dans la suitedu chapitre.

    a. Rgles d'criture des contraintes

    Les contraintes sur attribut (C/A) ou sur relation (C/R) doivent satisfaire les rgles d'crituresuivantes :

    1. La clause NOT NULL dans les C/A et la valeur par dfaut NULL sont incompatibles.Un attribut ne peut pas tre NULLetNOT NULLen mme temps.

    2. La clause UNIQUE(aussi bien dans les C/A que dans les C/R) ne peut tre spcifie que surdes attributs dclars NOT NULL.

    3. L'expression logique de la condition CHECK ne peut contenir que des prdicats decomparaison d'attributs avec des constantes. La comparaison avec d'autres attributs ou l'usagede fonctions ou de sous-requtes ne sont pas autoriss.

    4.

    Les attributs de la clause PRIMARY KEY doivent tre pralablement dclars avec laclause NOT NULL.

    5. Dans les contraintes de relation, les clauses FOREIGN KEY et REFERENCES doiventapparatre simultanment

    6. Les attributs de la clause FOREIGN KEYdoivent correspondre soit des attributs dclarscomme PRIMARY KEYdans une autre relation, soit des attributs dclars UNIQUEdansune autre table. La premire option correspond une contrainte rfrentielle avec la clprimaire, la seconde correspond une contrainte rfrentielle avec une cl candidate.

    7. Si les attributs de FOREIGN KEYcorrespondent une cl primaire dans une autre relation,la clause REFERENCESne spcifie que le nom de cette dernire.

  • 7/25/2019 BDD_Chap7

    4/39

    Base de donnes 39

    8. Si les attributs de FOREIGN KEY correspondent une cl candidate dans une autrerelation, la clause REFERENCESdoit mentionner le nom de cette relation ainsi que la listedes attributs composant la cl candidate.

    9. Les clauses PRIMARY KEY, UNIQUE et NOT NULL sont redondantes lorsqu'il n'y aqu'une cl par relation. L'une ou l'autre des clauses suffit la spcifier. Selon la clauseutilise, il faut assurer la cohrence de la dfinition des contraintes rfrentielles en utilisantrespectivement la rgle 7 ou la rgle 8.

    10. Il faut enfin noter que l'ordre des CREATE TABLEpeut tre trs important par rapport auxcontraintes : les tables rfrences doivent apparatre avant les tables rfrenantes.

    b. Exemple

    CREATE TABLE VOI TURE(

    I mmat r i cul at i onVARCHAR( 8 ) ,Mar queVARCHAR( 20) ,Coul eur VARCHAR( 15) ,Pr i x INTEGER CONSTRAINT C1 CHECK ( Pri x>=0) ,

    CONSTRAINT C2 PRIMARY KEY ( I mmat r i cul at i on)) ;

    Cette instruction SQL cre la table VOITUREsuivante :

    Immatriculation Marque Couleur Prix

    Texte Texte Texte Nombre

    On aperoit qu'on a inclut une contrainte sur l'attribut Prix, savoir qu'un prix ne peut pas trengatif. On a galement indiqu que le numro d'immatriculationest la cl primaire de la relationVOITURE.

    CREATE TABLE PERSONNE(

    Numr oSS INTEGER NOT NULL UNIQUE,NomVARCHAR ) ,( 30

    Pr nomVARCHAR20) ,( AdresseVARCHAR(80)) ;

    Cette instruction SQL cre la table PERSONNEsuivante :

    NumroSS Nom Prnom Adresse

    Nombre Texte Texte Texte

    Ici, on a dclar la cl primaire NumroSS, d'une autre manire que prcdemment : dans larelation VOITURE, la cl primaire avait t dclare grce la contrainte de relation PRIMARYKEY alors qu'ici, nous l'avons dclare grce aux contraintes sur attribut NOT NULL etUNIQUE.

  • 7/25/2019 BDD_Chap7

    5/39

    Base de donnes 40

    CREATE TABLE ACHAT(

    numI mmat r i cul at i onVARCHAR( 8 ) ,numPer sonn INTEGER,edat eAchat DATE,

    CONSTRAINT C3PRIMARY KEY ( numI mmat r i cul at i on, numPer sonne) ,

    CONSTRAINT C4FOREIGN KEY ( numI mmat r i cul at i on)REFERENCES VOI TURE( I mmatr i cul at i on) ,

    CONSTRAINT C5 FOREIGN KEY ( numPersonne)

    REFERENCES Per sonne( Numr oSS)) ;

    Cette instruction SQL cre la tableACHATsuivante :

    numImmatriculation numPersonne dateAchatTexte Nombre Date

    Dans cette instruction, nous avons dclar dans la contrainte C3, la cl primaire (cl compose denumImmatriculationet numPersonne) et, dans les contraintes C4et C5, les dpendances avec lestables VOITUREet PERSONNEvia les cls trangres.

    c. Dfinit ion d'une table par requte

    Il est possible de crer une table par rcupration des tuples d'une autre table. On peut, parexemple, crer une table appele ma_table par rcupration de la structure et du contenu deautre_table:

    CREATE TABLE ma_t abl eas SELECT * FROM aut r e_t abl e;

    On peut galement crer une table appele ma_tablepar rcupration d'une partie seulement de lastructure et du contenu de ACHAT. On renomme dans l'exemple ci-dessous les colonnesnumImmatriculationet nomPersonneen numet nom:

    CREATE TABLE ma_t abl e(

    numinteger,nomvarchar(20)

    )as SELECT numI mmat r i cul at i on, nomPersonne FROM ACHAT;

    2. Modification d'une table

    La modification d'une table se fait grce au mot-cl ALTER TABLE.

    Les principales modifications sur la structure d'une table sont :- l'ajout dun attribut- la modification d'un attribut- la suppression d'un attribut

    Cependant, la modification de schma est une opration dlicate qui peut mettre en pril l'intgrit dela base de donnes. Aussi toutes les oprations de suppression ou de modification de relation, d'attribut

    ou de contrainte doivent tre faites avec prcaution. Pour viter les erreurs, la plupart des systmes

  • 7/25/2019 BDD_Chap7

    6/39

    Base de donnes 41

    restreignent ou interdisent certaines de ces oprations. La syntaxe suivante d'ORACLE donne unaperu de ces oprations.

    Syntaxe de modification d'une table en SQL

    ALTER TABLE nom_t abl e[ADD

    ( at t r i but 1 t ype1[ DEFAULT val eur _par_df aut ] [ cont r ai nt es sur at t r i but 1] ,

    . . . ,att r i but N t ypeN

    [ DEFAULT val eur _par_df aut ] [ cont r ai nt es sur at t r i but N] ) ;]

    | [ADD ( cont rai nt e sur rel at i on) ; ]

    | [MODIFY

    ( at t r i but 1 t ype1[ DEFAULT val eur _par_df aut ] [ cont r ai nt es sur at t r i but 1] ,

    . . . ,att r i but N t ypeN[ DEFAULT val eur _par_df aut ] [ cont r ai nt es sur at t r i but N] ) ;

    ]

    | [ DROP CONSTRAINT nom_de_cont r ai nt e; ]

    | DROP COLUMN nom_de_col onne;

    Notation (les lments entre [ ] sont optionnels) :- Le symbole "|" signifie "ou" ; ainsi dans l'instruction ALTER TABLE, ADDporte soit sur une

    contrainte d'attribut soit sur une contrainte de relation.- Le mot-cl ADDpermet donc d'ajouter soit un attribut et ventuellement les contraintes associes

    cet attribut, soit une contrainte sur la relation.-

    Le mot-cl MODIFYpermet de modifier la dfinition d'un attribut.- Le mot-cl DROP CONSTRAINTpermet de supprimer une contrainte sur relation.- Le mot-cl DROP COLUMNpermet de supprimer une colonne (et donc un champ).

    a. Rgles

    Dans une table ayant dj des tuples, l'ajout d'un attribut implique la mise NULLde toute lacolonne correspondant cet attribut. Ceci implique que la clause NOT NULLne doit pas trespcifie pour cet attribut dans sa dfinition.

    La suppressiond'un attribut doit obir aux quelques rgles suivantes :- On ne peut supprimer un attribut-cl ou faisant partie de la cl.- La suppression d'une cl trangre mono-attribut (une rfrence la cl d'une autre table)

    entrane automatiquement la suppression de la contrainte rfrentielle correspondante(puisque cette contrainte est dfinie en mme temps que l'attribut).

    - La suppression d'une cl trangre multi-attribut doit tre prcde de la suppression de lacontrainte rfrentielle correspondante (puisque cette dernire est dclare part). Sans cettesuppression de la contrainte, toute mise jour ultrieure de ces attributs peut entraner uneanomalie dans le contrle de l'intgrit rfrentielle.

    La modificationd'un attribut doit respecter les rgles suivantes :- Si le nom d'une cl change, il faut propager cette modification sur toutes les tables qui

    rfrencent cette cl.- Toute modification d'une contrainte sur attribut doit respecter les rgles de cohrence des

    contraintes 1 9spcifies dans la leon relative la cration de table.

    http://dpt-info.univ-littoral.fr/euromaster/bd/index.php?language=fr&chapter=4&section=1&page=7http://dpt-info.univ-littoral.fr/euromaster/bd/index.php?language=fr&chapter=4&section=1&page=7http://dpt-info.univ-littoral.fr/euromaster/bd/index.php?language=fr&chapter=4&section=1&page=7http://dpt-info.univ-littoral.fr/euromaster/bd/index.php?language=fr&chapter=4&section=1&page=7http://dpt-info.univ-littoral.fr/euromaster/bd/index.php?language=fr&chapter=4&section=1&page=7
  • 7/25/2019 BDD_Chap7

    7/39

    Base de donnes 42

    La suppression de contrainteest une relaxation de contrainte qui rend les futures requtes pluspermissives qu'elles ne l'taient avant. Cette suppression ne met pas particulirement en prill'intgrit de la base.- Toute suppression de contrainte doit conserver les rgles sur contraintes 1 9 spcifies

    dans la leon relative la cration de table.

    La suppression de contrainte ncessite que cette contrainte possde un nom.

    b. Exemple

    On dsire ajouter les attributs Type et Puissance la table VOITURE. Voici l'instruction SQLpermettant d'ajouter ces attributs.

    ALTER TABLE VOI TUREADD( t ypeVARCHAR( 20) , pui ssance INTEGER) ;

    Cette instruction SQL modifie la table VOITUREen consquence :

    Immatriculation Marque Couleur Prix Type Puissance

    Texte Texte Texte Nombre Texte Nombre

    On souhaite dsormais modifier la contrainte portant sur l'attribut Puissance. En effet, nousaimerions contraindre cette valeur pour qu'elle soit positive. Voici l'instruction SQL rsultante :

    ALTER TABLE VOI TUREADD ( CONSTRAI NT C8 ( CHECK ( Pui ssance>=0) ) ) ;

    3. Suppression d'une table

    La suppression d'une table se fait grce au mot-cl DROP TABLE.

    Syntaxe de suppression d'une table en SQL

    DROP TABLE nom_t abl e[ CASCADE CONSTRAINTS] ;

    Notation (les lments entre [ ] sont optionnels) :Le mot-cl CASCADE CONSTRAINTSdans la clause DROP TABLEpermet de supprimer toutesles rfrences cette table dans les autres tables.

    a. Rgles

    L'opration de suppression de table peut se faire moyennant certaines prcautions :- Avant de supprimer une table, il faut supprimer toutes les rfrences cette table dans les

    autres tables (ou utiliser leCASCADE CONSTRAINTS).- Avant de supprimer une table, il faut avoir redfini ou supprim toutes les vues impliquant

    cette table (nous reviendrons un peu plus loin sur la dfinition des vues).

    La suppression d'une table implique de redfinir ou supprimer toutes les requtes impliquant latable supprime.

    b. Exemple

    On dsire supprimer la table VOITURE. Voici l'instruction SQL permettant d'effectuer cetterequte :

    DROP TABLE VOI TURE CASCADE CONSTRAINTS;

    http://dpt-info.univ-littoral.fr/euromaster/bd/index.php?language=fr&chapter=4&section=1&page=8http://dpt-info.univ-littoral.fr/euromaster/bd/index.php?language=fr&chapter=4&section=1&page=8http://dpt-info.univ-littoral.fr/euromaster/bd/index.php?language=fr&chapter=4&section=1&page=8http://dpt-info.univ-littoral.fr/euromaster/bd/index.php?language=fr&chapter=4&section=1&page=8
  • 7/25/2019 BDD_Chap7

    8/39

    Base de donnes 43

    Remarque : on insre la clause CASCADE CONSTRAINTSafin de supprimer les rfrences la table VOITUREdans la tableACHAT.

    4. Renommage dune table

    Le renommage d'une table se fait grce au mot-cl RENAME.

    Syntaxe de renommage d'une table en SQL

    RENAME nom_t abl eTO nouvel l e_t abl e;

    5. Consultation dune table

    La consultation d'une table se fait grce au mot-cl DESC[RIBE].

    Syntaxe de consultation d'une table en SQL

    DESC[RIBE] nom_t abl e;

    V. Le Langage de Manipulation de Donnes (LMD)

    Dfinition :Le Langage de Manipulation de Donnespermet de :- afficher ;- insrer ;- mettre jour ;- supprimer des donnes dans les tables.

    Le LMD est donc compos de 4 primitives :- SELECTpour l'affichage des donnes des tables.- INSERTpour l'insertion de donnes dans les tables.- UPDATEpour la mise jour des donnes.- DELETEpour la suppression des donnes.

    1. SELECT

    L'affichage des donnes d'une ou plusieurs tables se fait grce au mot-cl SELECT.

    Syntaxe de la primitive SELECT en SQL

    SELECT * | [ DISTINCT | ALL] FROM

    [WHERE ][ GROUP BY [ HAVING ] ][ ORDER BY ] ;

    Notation (les lments entre [ ] sont optionnels) :- Le symbole "|" signifie "ou" ; ainsi on peut faire suivre le mot-cl SELECTpar une * OU par

    prcd le cas chant par DISTINCTou ALL.

    La clause SELECTdcrit la relation rsultat, dsigne :- soit une liste d'attributs ;- soit une expression obtenue l'aide des fonctions statistiques SUM (somme), AVG (moyenne),

    COUNT(compte), MINet MAX;- soit une expression.

  • 7/25/2019 BDD_Chap7

    9/39

    Base de donnes 44

    Les mots-cls DISTINCTet ALLpermettent respectivement d'liminer ou de conserver les doublonsaprs une projection mise en uvre par l'ordre SELECTsuivi d'une liste d'attributs.

    La clause FROMdsigne les relations concernes par la requte. Chaque nom de relation peut tresuivi d'un alias (variables synonymes pour chaque relation). Cet alias permet parfois des conomiesd'critures, mais il permet surtout de lever des ambiguts sur les noms d'attributs (plusieurs relationsqui possdent le mme nom d'attribut). Des exemples de dfinition d'alias sont proposs dans la partie

    prsentant des exercices corrigs.

    La clause WHERE, optionnelle, spcifie les critres de slection. La condition logique de niveau tupleest une expression logique spcifiant les prdicats de restriction ou de jointure satisfaire par larponse. On peut galement insrer dans la clause WHERE, une nouvelle instruction SELECT(requte imbrique) ce qui permet de travailler sur un ensemble de tuples restreints par cette slection.

    Lorsque ces critres portent sur des fonctions de groupe, on utilise la clause HAVING.

    La clause GROUP BY partitionne la relation en groupes. La liste des attributs spcifis dans cetteclause indique le critre de groupement.

    La clause ORDER BY permet de trier les rsultats obtenus selon un tri ascendant (ASC) oudescendant (DESC). On veillera choisir des colonnes de tri prsent dans les attributs du SELECT.

    a. La clause SELECT et la clause FROM

    La clause SELECTet la clause FROMsont lies. En effet, lors de chaque opration de slection,le mot-cl FROMpermet d'identifier la ou les tables ncessaires la construction du rsultat de larequte.

    SELECT *FROM VOI TURE;

    Cette instruction SQL permet d'afficher tous les tuples de la table VOITURE:

    Immatriculation Marque Couleur Puissance Prix

    4578QS59 Renault Noire 7 20 000

    1952LM62 Rover Bleue 5 28 0003664PN75 Citron Rouge 6 30 0003671KH60 Peugeot Verte 6 10 0004691TR95 Renault Jaune 7 35 000

    Remarque : le symbole * dans la clause SELECT signifie qu'on dsire rcuprer TOUS leschamps de la table.

    SELECT Mar queFROM VOI TURE;

    Cette instruction SQL permet d'afficher le contenu du champ Marque des tuples de la tableVOITURE:

    Marque

    RenaultRover

    CitronPeugeotRenault

    Remarque : la requte ne porte que sur un seul champ, cela quivaut une projection de la table

    VOITUREsur ce champ.On peut ajouter autant dattributs que lon dsire afficher.

    SELECT DISTINCT Mar queFROM VOI TURE;

  • 7/25/2019 BDD_Chap7

    10/39

    Base de donnes 45

    Cette instruction SQL permet d'afficher le contenu du champ Marque des tuples de la tableVOITURE, sans rptition deMarque, c'est--dire sans doublon deMarque:

    Marque

    RenaultRover

    CitronPeugeot

    b. Les prdicats

    Une condition est appele prdicaten SQL. Un prdicat permet de comparer 2 expressions devaleurs :- la premire expression contenant des spcifications de colonnes est appele terme;-

    la seconde expression contenant seulement des spcifications de constantes est appeleconstante.

    Il existe une grande diversit de prdicats en SQL, on trouve en effet :

    1. un prdicat de comparaison permettant de comparer un terme une constante l'aide des

    oprateurs suivants :- = : gal- ou != : diffrent- > : plus grand que- >= : plus grand ou gal- < : plus petit que-

  • 7/25/2019 BDD_Chap7

    11/39

    Base de donnes 46

    OR Vrai Faux Inconnu

    Vrai Vrai Vrai VraiFaux Vrai Faux Faux

    Inconnu Vrai Faux Inconnu

    NOT Vrai Faux Inconnu

    Faux Vrai Inconnu

    SELECT * FROM VOI TUREWHERE Pui ssance = 20 000;

    Cette instruction SQL permet daffiche les tuples de la table VOITURE dont la Puissance estinfrieure ou gale 6 chevaux et dont leprixest suprieur ou gal 20 000 :

    Immatriculation Marque Couleur Puissance Prix

    1952LM62 Rover Bleue 5 28 0003664PN75 Citron Rouge 6 30 000

    AND: permet de vrifier TOUTESles conditions simultanment.

    SELECT * FROM VOI TUREWHERE Pui ssance = 20 000;

    Cette instruction SQL permet daffiche les tuples de la table VOITURE dont la Puissance estinfrieure ou gale 6 chevaux ou dont leprixest suprieur ou gal 20 000 :

    Immatriculation Marque Couleur Puissance Prix

    4578QS59 Renault Noire 7 20 0001952LM62 Rover Bleue 5 28 0003664PN75 Citron Rouge 6 30 000

    3671KH60 Peugeot Verte 6 10 0004691TR95 Renault Jaune 7 35 000

    OR: permet de vrifier AU MOINS UNEdes conditions.

    SELECT * FROM VOI TUREWHERENOT ( Pui ssance = 6) ;

    Cette instruction SQL permet daffiche les tuples de la table VOITUREdont la Puissancenestgale 6 chevaux :

    Immatriculation Marque Couleur Puissance Prix

    4578QS59 Renault Noire 7 20 000

    1952LM62 Rover Bleue 5 28 0004691TR95 Renault Jaune 7 35 000

    NOT: permet de donner la ngation de la condition.

    Remarque :Les oprateurs logiques peuvent tre combins entre eux. Cependant, il faut veiller respecter unordre de priorit. Ainsi, on trouve, du plus prioritaire au moins prioritaire :- NOT- AND- ORL'emploi de parenthses est possible pour changer l'ordre dvaluation ou rendre la lecture plusfacile.

  • 7/25/2019 BDD_Chap7

    12/39

    Base de donnes 47

    Prdicats divers :

    SELECT * FROM VOI TUREWHERE Pr i x BETWEEN 25 000 AND 40 000;

    Cette instruction SQL permet dafficher les tuples de la table VOITUREdont le Prixest comprisentre 25 000 et 40 000 :

    Immatriculation Marque Couleur Puissance Prix

    1952LM62 Rover Bleue 5 28 0003664PN75 Citron Rouge 6 30 0004691TR95 Renault Jaune 7 35 000

    BETWEEN minAND max : permet de rcuprer les donnes dont les valeurs sont comprisesentre minet max(bornes incluses).

    SELECT FROM VOI * TUREWHERE Mar que LIKE ' Ren%' AND Coul eur IN ( ' Noi re' , ' Bl eue' , ' J aune' ) AND Pr i x IS NOT NULL;

    Cette instruction SQL permet dafficher tous les tuples de la table VOITURE dont le Marquecommence par Ren, dont la couleur est soit noire, bleue ou jaune, et dont le prix nest pasinconnu (donc connu) :

    Immatriculation Marque Couleur Puissance Prix

    4578QS59 Renault Noire 7 20 0004691TR95 Renault Jaune 7 35 000

    d. Les oprateurs arithmtiques

    Les oprateurs arithmtiques ('+', '', '', '/') peuvent tre utiliss dans les clauses SELECT,WHEREet HAVING.

    Ces oprateurs sont valables pour les types NUMBER et DATE. Si une des oprandes estNULL, le rsultat est NULL. Ces oprateurs peuvent tre combins entre eux mais respectent unepriorit d'valuation :

    - '' et '/'

    - '+' et ''

    Cet ordre peut, bien entendu, tre modifi l'aide de parenthses.

    e. Les fonct ions statist iques

    Les fonctions statistiques (MAX, MIN, SUM, AVG, COUNT, STDDEV, VARIANCE) peuventtre utilises dans les clauses SELECT, WHERE et HAVING. Les fonctions statistiques sontappliques l'ensemble d'une colonne(ou d'un groupe) et fournissent une valeur unique.

    La fonction MAX et la fonction MINLes fonctions MAXet MINrenvoient respectivement le maximum et le minimum d'un champ.Ces fonctions sont utilisables pour les types CHAR, VARCHAR2, DATEet NUMBER.

    SELECTMAX( Pr i x) FROM VOI TURE;

    Cette requte permet d'afficher leprixmaximal parmi les tuples de la table VOITURE.

    MAX(Prix)

    35 000

  • 7/25/2019 BDD_Chap7

    13/39

    Base de donnes 48

    La fonction COUNTLa fonction COUNT comptabilise le nombre de lignes pour lesquelles l'expression est nonNULL. Une * est souvent utilise avec COUNTpour indiquer le nombre de lignes. Si on ne veutpas compter plusieurs fois les valeurs identiques d'une mme colonne, il faut utiliser le mot-clDISTINCTsuivi du nom de la colonne (sauf s'il s'agit d'un attribut cl de la relation).

    SELECT COUNT( DISTINCT Mar que) FROM VOI TUREWHERE Pui ssance > 6;

    Cette requte permet d'afficher le nombre de tuples vrifiant la condition "Puissance suprieure 6 chevaux" de la table VOITURE, en ne comptant qu'une seule fois la marquemme si elle vrifiede nouveau la condition (3 tuples compts, on ne compte qu'une fois la Renault).

    COUNT(Marque)

    1

    SELECT COUNT( * ) FROM VOI TUREWHERE Pui ssance > 6;

    Cette requte permet d'afficher le nombre de tuples vrifiant la condition "Puissance suprieure 6 chevaux" de la table VOITURE, en comptant toutes les lignes (4 tuples compts).

    COUNT(Marque)

    2

    La fonction SUMLa fonction SUM effectue, pour un ensemble de tuples, la somme des valeurs d'un attribut.Cette fonction est uniquement utilisable pour le type NUMBER.

    SELECT SUM( Pr i x) FROM VOI TUREWHERE Pui ssance = 6;

    Cette requte permet de calculer la somme des prix des VOITURES ayant une Puissance de 6chevaux.

    SUM(Prix)

    45 000

    La fonction AVGLa fonction AVGcalcule, pour un ensemble de tuples, la moyenne arithmtique des valeurs d'unattribut. Cette fonction est uniquement utilisable pour le type NUMBER. Elle vrifie la formulesuivante : AVG= Somme des valeurs non NULL/ nombre de valeurs non NULL.

    SELECTAVG( Pr i x) FROM VOI TUREWHERE Pui ssance = 6;

    Cette requte permet de calculer le prix moyen des VOITURES ayant une Puissance de 6chevaux.

    AVG(Prix)

    20 000

    La fonction VARIANCELa fonction VARIANCE calcule, pour un ensemble de tuples, la variance des valeurs d'unattribut. Cette fonction est uniquement utilisable pour le type NUMBER. Elle vrifie la formulesuivante : VARIANCE= Somme des carrs de la diffrence entre attribut de valeur non NULLetla moyenne arithtique / nombre dattributs de valeur non NULL.

  • 7/25/2019 BDD_Chap7

    14/39

    Base de donnes 49

    SELECTVARIANCE( Pr i x) FROM VOI TUREWHERE Pui ssance = 6;

    Cette requte permet de calculer la variance des prix des VOITURESayant une Puissancede 6chevaux.

    VARIANCE(Prix)

    100 000 000

    La fonction STDDEVLa fonction STDDEVcalcule, pour un ensemble de tuples, lcart type des valeurs d'un attribut.Cette fonction est uniquement utilisable pour le type NUMBER. Elle vrifie la formule suivante :STDDEV= racine carre de la variance.

    SELECT STDDEV( Pr i x) FROM VOI TUREWHERE Pui ssance = 6;

    Cette requte permet de calculer lcart type des prix des VOITURESayant une Puissancede 6

    chevaux.

    STDDEV(Prix)

    10 000

    f. La clause GROUP BY

    La clause GROUP BY permet de partitionner la relation rsultat selon les valeurs d'un ou deplusieurs attributs. Les seuls noms de colonnes (en dehors des fonctions statistiques) qui peuventapparatre dans le SELECTsont celles qui figurent dans le GROUP BY.

    SELECT SUM( Pr i x) , Pui ssanceFROM VOI TUREGROUP BY Pui ssance;

    Cette commande permet de crer des partitions selon la Puissancedans la table VOITURE. Onaura donc, pour notre exemple, 3 partitions correspondant aux puissances 5, 6 et 7 chevaux. Lasomme des Prixs'affichera pour chacune de ces partitions.

    Puissance SUM(Prix)

    5 28 0006 40 0007 55 000

    g. La clause HAVING

    La clause HAVINGdfinit les conditions que les groupes doivent respecter pour tre retenus, elleslectionne les partitions dsires. Elle ne peut comprendre que des conditions dont le premierterme est une fonction statistique. La clause HAVINGest aux groupes (GROUP BY) ce que laclause WHEREest aux lignes (SELECT).

    SELECTMAX( Pr i x) , Pui ssanceFROM VOI TUREGROUP BY Pui ssanceHAVING COUNT( *) >1;

  • 7/25/2019 BDD_Chap7

    15/39

    Base de donnes 50

    Cette commande permet de crer des partitions selon la Puissance dans la table VOITURE.Elle calculera le prix maximum sur ces partitions. La clause HAVING limite l'affichage auxpartitions contenant au moins 2 lments (tuples) : COUNT(*)>1 . On aura donc, pour notreexemple, 2 partitions correspondant aux puissances 6 et 7 chevaux (la partition relative laPuissance de 5 chevaux n'a pas t retenue car elle ne contient pas assez d'lments pour satisfairela condition nonce dans la clause HAVING).

    Puissance MAX(Prix)

    6 30 0007 35 000

    h. La clause ORDER BY

    La clause ORDER BYpermet de trier les tuples du rsultat final. La clause ORDER BYpermetd'ordonner la relation rsultat sur un ou plusieurs attributs, l'ordre pouvant tre croissant (grce aumot-cl ASC) ou dcroissant (grce au mot-cl DESC), ASCtant l'ordre par dfaut.

    Remarque : Dans une requte SQL, la clause ORDER BY se situe juste aprs une clauseWHEREou aprs une clauseGROUP BY.

    SELECT * FROM VOI TUREORDER BY Pui ssance [ ASC] ;

    Ces 2 requtes (avec ASCou sans ASC) sont identiques et permettent d'afficher l'ensemble destuples de la table VOITUREtris sur l'attribut Puissanceselon un ordre croissant.

    Immatriculation Marque Couleur Puissance Prix

    1952LM62 Rover Bleue 5 28 0003664PN75 Citron Rouge 6 30 0003671KH60 Peugeot Verte 6 10 0004578QS59 Renault Noire 7 20 0004691TR95 Renault Jaune 7 35 000

    La clause ORDER BY permet galement un tri sur plusieurs attributs : le tri sera effectuprioritairement sur le premier attribut, puis sur le second et ainsi de suite.

    SELECT * FROM VOI TUREORDER BY Pui ssance DESC, Coul eur ;

    Cette requte permet d'afficher l'ensemble des tuples de la table VOITURE tris sur l'attributPuissance selon un ordre dcroissant puis sur l'attribut Couleur (ordre alphabtique) selon unordre croissant .

    Immatriculation Marque Couleur Puissance Prix

    4691TR95 Renault Jaune 7 35 000

    4578QS59 Renault Noire 7 20 0003664PN75 Citron Rouge 6 30 0003671KH60 Peugeot Verte 6 10 0001952LM62 Rover Bleue 5 28 000

    i. Les oprateurs relationnels

    Les oprateurs relationnels en SQL sont bass sur les oprateurs relationnels vus dans lechapitre Modle Relationnel. En SQL, les principaux oprateurs sont UNION,INTERSECTION, MINUS (diffrence). Les deux relations R1 et R2 sur lesquelles sontappliqus les oprateurs UNION, INTERSECTION et MINUS doivent absolument avoiravoir le mme schma de table (nombre quivalent d'attributs et attributs identiques deux deux).

  • 7/25/2019 BDD_Chap7

    16/39

    Base de donnes 51

    SELECT * FROM VOI TUREWHERE Pui ssance = 5UNION

    SELECT *FROM VOI TUREWHERE Pui ssance = 7;

    Cette requte permet d'afficher l'ensemble des tuples de la table VOITUREdont la Puissanceestgale 5 ou 7 chevaux.

    Immatriculation Marque Couleur Puissance Prix

    1952LM62 Rover Bleue 5 28 0004578QS59 Renault Noire 7 20 0004691TR95 Renault Jaune 7 35 000

    j. La jointure

    Le procd de la jointure en SQL est celui nonc dans le chapitre Algbre Relationnelle. Lajointure est formule dans la clause WHERE

    Syntaxe de la primitive SELECT en SQL

    SELECT FROM WHERE ;

    Cas de l'quijointure

    SELECT I mmat r i cul at i on, numPer sonne, dat aAchat , Marque, Coul eur ,Pui ssance, Pr i x

    FROM VOI TURE, ACHATWHERE I mmat r i cul at i on = numI mmat r i cul at i on;

    Cette requte permet de faire la jointure entre la table VOITUREet la tableACHAT; cette jointureporte sur le numro d'immatriculation. Cette requte renverra donc tous les tuples de la tableVOITURE et de la table ACHAT qui ont mme numro d'immatriculation (on na pas affichnumImmatriculation).

    ImmatriculationnumPersonne dateAchat Marque CouleurPuissance Prix

    4578QS59 1591259 12/12/2001 Renault Noire 7 20 000 1952LM62 2630662 08/11/1998 Rover Bleue 5 28 000 4691TR95 1120606 05/09/1997 Renault Jaune 7 35 000

    Pour les autres types de jointure (non quijointure, autojointure, jointure externe), le principe estidentique, seule l'expression de jointure diffre.

    Cas de la jointure naturelle

    SELECT FROM r el at i on1NATURAL JOIN rel at i on2;

    Cas de la thta-jointure

    SELECT FROM r el at i on1 JOIN r el at i on2 ON

    r el at i on1. at t r but 1 = r el at i on2. at t ri but 2;

  • 7/25/2019 BDD_Chap7

    17/39

    Base de donnes 52

    Cas de la clause AS (c'est--dire deux relations identiques qui ont le mme attribut)

    SELECT FROM r el at i on R1, r el at i on R2WHERE R1. at t r i but = R2. at t r i but ;

    k. La requte imbrique et les quantificateurs

    En SQL, il est possible d'imbriquer plusieurs requtes. L'imbrication se fait dans la clauseWHERE.

    SELECT *FROM I TUREVO

    WHERE Pri x > ( SELECTAVG( Pr i x)FROM VOI TURE) ;

    Cette requte permet d'afficher tous les tuples de la table VOITURE dont le prix est suprieur lamoyenne des prix de tous les tuples de cette mme table :

    Immatriculation Marque Couleur Puissance Prix

    1952LM62 Rover Bleue 5 28 0003664PN75 Citron Rouge 6 30 0004691TR95 Renault Jaune 7 35 000

    Remarque : Toute requte de jointure peut se mettre sous forme de requte imbrique. Maisl'inverse n'est pas vrai comme l'illustre l'exemple propos ci-dessus.

    Dans une requte imbrique, il est possible dajouter un quantificateur. Il permet de faire unecomparaison entre une ligne et toutes les lignes dune table retourne par un select imbriqu. Le

    ALLcorrespond et le SOME(ou ANY) .

    SELECT *FROM COMMANDEdat eCommande > (WHERE ALL SELECT dat eLi vrai son

    FROM LI VRAI SON) ;

    Cette requte permet d'afficher tous les tuples de la table COMMANDEdont la date de commandeest passe aprs la dernire livraison.

    SELECT *FROM MMANDECO

    WHERE dat eCommande < SOME( SELECT dat eLi vrai sonFROM LI VRAI SON) ;

    Cette requte permet d'afficher tous les tuples de la table COMMANDEdont la date de commandeest passe avant la dernire livraison.

    l. Les alias

    Les alias concourent amliorer la lisibilit et la concision d'une requte.Il existe deux typesd'alias : les alias de tables et les alias de champs. Ils peuvent galement s'appliquer une fonctiond'agrgation retournant des donnes sous forme de colonnes.

    SELECT Al i as_tabl e. nom_champAS Al i as_champFROM nom_t abl eAS Al i as_tabl e;

  • 7/25/2019 BDD_Chap7

    18/39

    Base de donnes 53

    La clause AS,affectant un alias une table ou une colonne, peut treremplace par un simpleespace blanc.

    SELECT Al i as_tabl e. nom_champ Al i as_champFROM nom_t abl e Al i as_tabl e;

    Les alias de champs peuvent tre des chanes de caractres composes de mots et d'espaces.Dans ce cas, il faut placer l'alias entre simple guillemet.

    SELECT Al i as_tabl e. nom_champAS Un al i as de champ FROM nom_t abl eAS Al i as_tabl e;

    Lors de l'affichage des lignes rsultantes, les alias de champs se substitueront aux noms decolonnes. De cette manire, il devient possible d'attribuer des noms de colonnes plus explicitespour les utilisateurs de la base de donnes.

    Les alias sont particulirement utiles dans le cadre des jointures et des requtes imbriques.Dans les deux cas, il devient possible de faire appel des champs de noms identiques en les

    distinguant par des prfixes qui sont les alias de table.

    Cas de la jointure

    SELECT v. I mmat r i vul at i on, v. Mar que, v. Coul eur , v. Pui ssance, v. Pr i x,a. numPersonne, a. dat eAchat

    FROM Voi t ur e v, Achat aWHERE v. I mmatr i cul ati on = a. numI mmatr i cul ati on;

    Cas de la jointure rflexive

    SELECT v. * , a. *

    FROM Voi t ur eAS v, AchatAS aWHERE v. I mmatr i cul ati on = a. numI mmatr i cul ati on;

    Cas de la requte imbrique

    SELECT v. * , a. *FROM Voi t ur eAS v, AchatAS aWHERE v. I mmat r i cul at i on = a. numI mmat r i cul at i onAND v. Pr i x>( SELECTAVG( Pr i x)

    FROM VOI TURE) ;

    2. INSERT

    L'opration d'insertion se fait grce au mot-cl INSERT. Elle permet d'ajouter un ou plusieurs tuples une relation.

    Syntaxe de la primitive INSERT en SQL

    INSERT INTO [ att r i but 1, att r i but 2, ]VALUES ( val 1, val 2, )

    | cl ause SELECT;

  • 7/25/2019 BDD_Chap7

    19/39

    Base de donnes 54

    Exemples :

    INSERT INTO VOI TUREVALUES ( 2759QF78 , BMW , Gr i se , 8, 45 000) ;

    Cette commande permet d'insrer le tuple ('2759QF78', 'BMW', 'Grise', 8, 45 000) dans la tableVOITURE:

    Immatriculation Marque Couleur Puissance Prix

    4578QS59 Renault Noire 7 20 0001952LM62 Rover Bleue 5 28 0003664PN75 Citron Rouge 6 30 0003671KH60 Peugeot Verte 6 10 0004691TR95 Renault Jaune 7 35 0002759QF78 BMW Grise 8 45 000

    Les domaines des valeurs insres doivent correspondre aux types dclars.

    INSERT INTO VOI TURE (I mmat r i cul at i on, Coul eur , Pri x)VALUES ( 1379FG09 , Rouge , 29 500) ;

    Cette commande permet d'insrer un nouveau tuple ayant les valeurs '1379FG09' pourl'Immatriculation, une couleur'Rouge', et un Prixde 29 500 dans la table VOITURE.

    Immatriculation Marque Couleur Puissance Prix

    4578QS59 Renault Noire 7 20 0001952LM62 Rover Bleue 5 28 0003664PN75 Citron Rouge 6 30 0003671KH60 Peugeot Verte 6 10 0004691TR95 Renault Jaune 7 35 0002759QF78 BMW Grise 8 45 000

    1379FG09 NULL Rouge NULL 29 500

    Les champs autres champs de ce tuple prendront la valeur NULL(ils ne devront pas avoir t dclarsNOT NULL).

    INSERT INTO VOI TURE_ACHETEES ( I mmat r i cul at i on)SELECT numI mmatr i cul at i onFROM ACHAT;

    Cette commande permet de crer des tuples dans la table VOITURE_ACHETEES(qui aura t crepralablement) initialiss avec les numros d'immatriculationprsents dans la tableACHAT. Les autresattributs tant initialiss NULL.

    Immatriculation4578QS591952LM624691TR95

    3. UPDATE

    La commande UPDATEpermet de mettre jour un ou plusieurs tuples d'une relation.

  • 7/25/2019 BDD_Chap7

    20/39

    Base de donnes 55

    Syntaxe de la primitive UPDATE en SQL

    UPDATE SET = , = ,

    [WHERE ] ;

    La clause WHEREest optionnelle ; cependant sans le WHERE, la mise jour affectera TOUS lestuples de la relation.

    Exemples :

    UPDATE VOI TURESET Pr i x = Pri x x 1. 10;

    Cette commande permet d'augmenter le Prixde vente de 10% (on multiplie par le coefficient 1.10) detous les tuples de la table VOITURE :

    Immatriculation Marque Couleur Puissance Prix

    4578QS59 Renault Noire 7 22 0001952LM62 Rover Bleue 5 30 8003664PN75 Citron Rouge 6 33 0003671KH60 Peugeot Verte 6 11 0004691TR95 Renault Jaune 7 38 5002759QF78 BMW Grise 8 49 5001379FG09 NULL Rouge NULL 32 450

    Ceci permet de modifier rapidement une colonne pour la globalit dune table.

    UPDATE VOI TURESET Pri x = Pri x x 1. 10WHERE Marque = Renaul t ;

    Cette commande permet d'augmenter le Prixde vente de 10% uniquement sur les voitures deMarqueRenault dans la table VOITURE.

    Immatriculation Marque Couleur Puissance Prix

    4578QS59 Renault Noire 7 22 0001952LM62 Rover Bleue 5 28 0003664PN75 Citron Rouge 6 30 0003671KH60 Peugeot Verte 6 10 0004691TR95 Renault Jaune 7 38 5002759QF78 BMW Grise 8 45 0001379FG09 NULL Rouge NULL 29 500

    Ceci permet de modifier rapidement une colonne pour une partie de la table.

    UPDATE VOI TURESET Pri x = Pri x x 1. 10WHERE Marque = Renaul t AND Pri x > SELECT AVG( Pr i x) FROM VOI TURE) ;

    Cette commande permet d'augmenter le Prixde vente de 10% uniquement sur les voitures deMarqueRenault dont le prix est suprieur au prix moyen de toutes les voitures de la table VOITURE.

  • 7/25/2019 BDD_Chap7

    21/39

    Base de donnes 56

    Immatriculation Marque Couleur Puissance Prix

    4578QS59 Renault Noire 7 20 0001952LM62 Rover Bleue 5 28 0003664PN75 Citron Rouge 6 30 0003671KH60 Peugeot Verte 6 10 0004691TR95 Renault Jaune 7 38 500

    2759QF78 BMW Grise 8 45 0001379FG09 NULL Rouge NULL 29 500

    4. DELETE

    La suppression de tuples se fait grce la commande DELETE. La suppression peut concerner tousles tuples d'une relation ou un sous-ensemble de tuples qui vrifie une condition de slection. Il fautnoter que DELETE opre sur le contenu d'une relation, c'est--dire que le schma d'une relation

    persiste aprs suppression de tous les tuples de la relation.

    Syntaxe de la primitive DELETE en SQL

    DELETE FROM [WHERE ] ;

    La clause WHEREest optionnelle ; cependant sans le WHERE, la mise jour affectera TOUS lestuples de la relation.

    Exemples :

    DELETE FROM VOI TURE;

    Cette commande permet de supprimer tous les tuples de la table VOITURE. Le schma de la tablepersiste cependant.

    Immatriculation Marque Couleur Puissance Prix

    Ceci permet de supprimer rapidement tous les tuples dune table.

    DELETE FROM VOI TUREWHERE Marque = Renaul t ;

    Cette commande permet de supprimer toutes les voitures deMarqueRenault de la table VOITURE.

    Immatriculation Marque Couleur Puissance Prix

    1952LM62 Rover Bleue 5 28 0003664PN75 Citron Rouge 6 30 0003671KH60 Peugeot Verte 6 10 0002759QF78 BMW Grise 8 45 0001379FG09 NULL Rouge NULL 29 500

    Ceci permet de modifier rapidement une partie des tuples de la table.

    DELETE FROM VOI TUREWHERE Marque = Renaul t

    AND Pri x > SELECT AVG( Pr i x) FROM VOI TURE) ;

    Cette commande permet de supprimer toutes les voitures deMarqueRenault dont leprixest suprieurau prix moyen de toutes les voitures de la table VOITURE.

  • 7/25/2019 BDD_Chap7

    22/39

    Base de donnes 57

    Immatriculation Marque Couleur Puissance Prix

    4578QS59 Renault Noire 7 22 0001952LM62 Rover Bleue 5 28 0003664PN75 Citron Rouge 6 30 0003671KH60 Peugeot Verte 6 10 0002759QF78 BMW Grise 8 45 000

    1379FG09 NULL Rouge NULL 29 500

    VI.Le Langage de Contrle de Donnes (LCD)

    Dfinition :Les instructions de contrle des donnes donnent l'administrateur de base de donnes le pouvoir decontrler la scurit de la base. Le LCD est compos de 4 commandes SQL :- GRANT- REVOKE- COMMIT- ROLLBACK

    GRANT et REVOKE sont utilises pour exercer un contrle sur l'accs des donnes. COMMIT etROLLBACKsont utilises pour prserver l'intgrit des donnes.Pour utiliser une base de donnes, l'utilisateur doit passer par une procdure de connexion. Lors de cetteprocdure, il doit saisir un login (par exemple PDupont) et un mot de passe (par exemple xyz2V12). Celogin permet d'identifier chaque utilisateur et sert de repre pour lui accorder (ou lui enlever) des droits demanipulation de la base.

    1. La commande GRANT

    La commande GRANTpermet d'autoriser un accs aux donnes de la base soit total, soit des degrslimits. Ainsi, il est possible, par exemple, d'autoriser la consultation de certaines tables sans

    possibilit de les modifier.

    a. La syntaxe de la commande GRANT

    Syntaxe de la commande GRANT en SQL

    GRANT ALL PRIVILEGES | accs_spci f i queON nom_t abl e | nom_vueTO PUBLICnom_autor i s |[WITH GRANT OPTION];

    Avec la convention suivante :- Il est possible de donner tous les types de droits d'accs (consultation, modification,

    suppression,) avec ALL PRIVILEGES ou d'accorder des privilges spcifiques

    (accs_spcifique).- nom_autoris (ou login) : nom donn par l'utilisateur lors de sa connexion la base de

    donnes (cr par l'administrateur)- PUBLIC: tout le monde reoit le privilge accord (accs_spcifique) ou tous les privilges

    (ALL PRIVILEGES).- WITH GRANT OPTION: celui qui reoit le privilge peut lui-mme l'accorder un autre

    (opration dangereuse, viter).

    Concernant les types de droits d'accs, si des tables de la base sont identifies l'aide du nom ducrateur de la base, cet utilisateur peut (si on lui a accord le privilge requis) autoriser l'accs ses tables pour d'autres utilisateurs.

  • 7/25/2019 BDD_Chap7

    23/39

    Base de donnes 58

    GRANT ALL PRIVILEGESON VOI TURETO Mar t i nWITH GRANT OPTION;

    Cette instruction SQL permet l'administrateur de la base de donner Martintous les droits sur latable VOITURE, il lui accorde galement l'autorisation de transfrer ces privilges.

    b. Les droits d'accs

    La gestion des droits d'accs aux tables est dcentralise : il n'existe pas d'administrateur globalattribuant des droits. Seul le propritaire (crateur) d'une table peut attribuer des droits sur celle-ci. Les principaux droits d'accs spcifiques sont :- slection (SELECT)- insertion (INSERT)- suppression (DELETE)- mise jour (UPDATE)- indexation (INDEX)

    -

    rfrencer la table dans une contrainte (REFERENCES)Il peut ensuite passer ses droits slectivement d'autres utilisateurs ou tout le monde(PUBLIC). Un droit peut tre pass avec le droit de le transmettre (WITH GRANT OPTION)ou non. L'ensemble des droits d'accs (ALL PRIVILEGES) inclut les droits d'administration(changement de schma et destruction de la relation).

    GRANT SELECT, UPDATE

    ON VOI TURE, ACHATTO Smi t h;

    Cette commande permet de passer des droits de consultation et de mise jour de la tableVOITUREet de la tableACHAT l'utilisateur Smith.

    GRANT ALL PRIVILEGES ( I mmat r i cul at i on, Pr i x)ON VOI TURETO Smi t h, Vandenbr ouck, Duboi s;

    Cette commande permet de passer l'ensemble des droits d'accs aux utilisateurs Smith,Vandenbrouck et Dubois uniquement sur les colonnes Immatriculation et Prix de la tableVOITURE.

    GRANT INSERTON PERSONNETO PUBLIC;

    Cette commande attribue le droit d'insrer de nouveaux enregistrements dans la table PERSONNE tous ceux qui, dans la socit, disposent d'une identification pour se connecter sur la BD.

    2. La commande REVOKE

    La commande REVOKEpermet de retirer l'accs, c'est la commande inverse de GRANT.

  • 7/25/2019 BDD_Chap7

    24/39

    Base de donnes 59

    Syntaxe de la commande REVOKE en SQL

    REVOKE ALL PRIVILEGES | accs_spci f i queON nom_t abl e | nom_vueFROM nom_ut i l i sat eur | PUBLIC;

    Exemples :

    REVOKE SELECT, UPDATE

    ON VOI TURE, ACHATFROM Smi t h;

    Cette commande supprime les droits de consultation et de mise jour de la table VOITUREet de latableACHATqui avait t accords l'utilisateur Smith.

    REVOKE ALL PRIVILEGES

    ON VOI TUREFROM Mar t i n;

    Cette commande retire tous les privilges accords sur la table VOITUREMartin.

    3. Le contrle d'intgrit

    Les commandes COMMIT et ROLLBACK constituent des contrles (cf. le chapitre sur lestransactions) ncessaires la prservation de l'intgrit de la base.

    Des systmes multi-utilisateurs disponibles dans le commerce emploient des contrles supplmentairescomme par exemple la commande LOCK pour empcher les valeurs de changer pendant qu'unutilisateur examine ou travaille sur ces valeurs (nous tudierons plus en dtails ces notions dans lechapitre sur les transactions).

    4. La commande COMMIT

    La commande COMMIT permet l'utilisateur de fixer le moment o les modifications en coursaffecteront la base de donnes. Dans ce cadre, on utilise le concept de transaction.

    La transaction est une suite d'oprations telle que chaque opration de cette suite est ncessaire pouratteindre un rsultat unitaire.

    C'est la raison pour laquelle SQL propose l'utilisateur de n'enregistrer les modifications dans la basequ'au moment o la transaction est acheve grce la commande COMMIT.

    Une transaction (ou une partie de transaction) qui n'a pas encore t enregistre dfinitivement n'estvisible que pour l'utilisateur qui l'introduit. Elle n'affecte pas la base tant que l'instruction n'est pas

    excute.Avant l'excution de l'instruction COMMIT, il est possible de restaurer la base par ROLLBACK,c'est--dire d'liminer les modifications rcentes. Aprs l'enregistrement dfinitif d'une transaction parCOMMIT, il n'est plus possible de restaurer l'tat antrieur par ROLLBACK. S'il apparat aprs coupqu'une transaction doive tre modifie ou corrige, on ne pourra effecteur cette modification qu'aumoyen d'une autre instruction SQL comme UPDATEou DELETE.

    5. La commande ROLLBACK

    La commande ROLLBACK permet l'utilisateur de ne pas valider les dernires modifications encours dans la base de donnes.

    Par exemple, si au cours du droulement d'une transaction, l'utilisateur fait une erreur ou si, pour une

    certaine raison, une transaction ne peut pas tre acheve, l'utilisateur peut supprimer les modifications

  • 7/25/2019 BDD_Chap7

    25/39

    Base de donnes 60

    afin d'viter des incohrences dans la base grce la commande ROLLBACK. Cette commandelimine tous les changements depuis la dernire validation.

    Dans le cas d'une dfaillance du systme, l'intgrit de la base peut tre prserve par une optionROLLBACK automatique qui limine les transactions inacheves et empche donc qu'elles soientintroduites dans la base.

    6. La commande SAVEPOINT

    Une transaction tant une squence de squence de commandes SQL considre comme unitaire,indivisible, il peut tre ncessaire de pouvoir revenir en arrire, nimporte quel endroit dans latransaction courante.

    Pour cela, il suffit de raliser des points de sauvegarde grce la commande SAVEPOINT lintrieur dune transaction pour situer un point ventuel de retour vers ltat de la base de donnes.Le retour en arrire seffectue grce la commande ROLLBACK WORK TO SAVEPOINT.

    7. Terminaison d'une transaction

    VII. Les vues

    Dfinition :Une vueest une relation virtuelle au sens o ses instances n'existent pas physiquement mais sont calcules chaque invocation de la vue. Une vue est dfinie par une requte qui utilise des relations ou des vuesexistantes.

    Syntaxe de la commande CREATE VIEW en SQL

    CREATE VIEW nom_de_l a_vueAS ;

    Exemples :

    CREATE VIEW VOI TURES_CHERESAS SELECT *

    FROM VOI TUREWHERE Pr i x > 15 000;

    La vue VOITURES_CHERESa le mme schma que la relation VOITURE.

  • 7/25/2019 BDD_Chap7

    26/39

    Base de donnes 61

    SELECT *FROM VOI TURES_CHERES;

    On peut accder grce cette vue toutes les voitures dont le Prixest suprieur 15 000 .

    CREATE VIEW VOI TURES_PUI SSANTES ( i mmat _voi t ure, marquee_voi t ure)AS SELECT I mmat r i ul at i on, Mar quec FROM VOI TURE

    WHERE Pui ssance > 6;

    La vue Voitures-puissantescomporte les attributs Immatriculationet Marquerenomms en immat_voitureet marque_voiture. Elle permet d'accder toutes les voitures dont lapuissanceest suprieure 6 chevaux.

    En interrogation, une vue est utilise comme toute autre relation. La seule diffrence rside dans le fait queses tuples ne sont pas stocks mais ils sont le rsultat de l'valuation de la requte de dfinition.

    En mise jour, toute modification des relations ayant servi la dfinition de la vue est rpercute sur lavue (lors d'une nouvelle valuation de la requte de dfinition de la vue). Par contre, la mise jour d'unebase de donnes " travers" une vue n'a pas trouv de solution gnrale : le problme vient du fait qu'il estparfois impossible de rpercuter la mise jour de la vue sur les relations sur lesquelles elle est dfinie.Cependant, quand des contraintes logiques ne viennent pas l'empcher la mise jour au travers des vues estpossible.

    A titre d'exemple, si une vue comporte une colonne obtenue par une fonction d'agrgation, la mise jour decette colonne supposerait que l'on soit capable de mettre jour les tuples concerns par la fonctiond'agrgation, tant donne la valeur introduite, ce qui est logiquement impossible.

    Il est, de ce fait, ncessaire de consulter la documentation du systme dont on dispose pour connatre lestypes de mises jour autoriss en utilisant une vue.

    Enfin la suppressiond'une vue est faite explicitement par DROP VIEW.

    VIII. Les squences

    Dfinition :Dfinir une squencequivaut dfinir une suite de nombres entiers. L'volution de cette suite est rgie parun certain nombre de paramtres. L'utilisation d'une squence permet donc d'avoir disposition une suite devaleurs. Ceci peut permettre de :- gnrer des cls uniques dans des tables- avoir un compteur titre informatif, que l'on incrmente quand on veut- etc...

    1. Cration du squence

    Syntaxe de la commande CREATE SEQUENCE en SQL

    CREATE SEQUENCE nom_de_l a_sequence[START WITH val eur_ i ni t i al e][INCREMENT BY ]i ncr ment

    [NOMAXVALUE NOMINVALUE | MAXVALUE maxi mum | MINVALUE mi ni mum]| [NOCYCLE | CYCLE][CACHE nombre_de_val eurs];

    Notation (les lments entre [ ] sont optionnels) :- STARTWITHpermet de fixer la valeur initiale de la squence.- INCREMENTBYpermet de fixer le pas dincrmentation. Si celui-ci est positif, la squence est

    croissante, sinon elle dcrot.

  • 7/25/2019 BDD_Chap7

    27/39

    Base de donnes 62

    - NOMAXVALUE et NOMMINVALUE permet de ne pas fixer de limite dans la squence. Silon dsire fixer un plafond ne pas dpasser (pour une squence ascendante), on utiliseMAXVALUE. Si lon dsire fixer un plancher (pour une squence descendante), on utiliseMINVALUE.

    - Loption CYCLE permet une fois la limite du compteur atteint, de reprendre le comptage lavaleur MINVALUE (pour une squence ascendante) ou MAXVALUE (pour une suite

    descendante). Si lon dsire arrter la squence une fois la limite du compteur atteint, il suffitdutiliser loption NOCYCLE.- Loption CACHE permet de mettre nombre_de_valeurs valeurs dans la mmoire cache afin

    doptimiser lutilisation des squences et avoir un effet significatif sur les performances, surtoutlorsque nombre_de_valeursest lev.

    CREATE SEQUENCE SEQUENCE_VOI TURESTART WITH 5INCREMENT BY 3;

    Cette commande SQL permet de crer une squenceSEQUENCE_VOITURE commenant la valeur5 avec un pas dincrmentation de 3. La squence obtenue est alors : 5, 8, 11, 14, 17, 20,

    CREATE SEQUENCE SEQUENCE_VOI TURESTART WITH 5INCREMENT BY 3MAXVALUE 30;

    Cette commande SQL permet de crer une squence SEQUENCE_VOITURE commenant la valeur5 avec un pas dincrmentation de 3, avec pour valeur maximale 30. La squence obtenue est alors : 5,8, 11, 14, 17, 20, 23, 26, 29.

    CREATE SEQUENCE SEQUENCE_VOI TURESTART WITH 5INCREMENT BY 3

    [NOMAXVALUE NOMINVALUE];

    Cette commande SQL (avec ou sans loption NOMAXVALUENOMINVALUE) permet de crer unesquenceSEQUENCE_VOITUREcommenant la valeur 5 avec un pas dincrmentation de 3 sanslimite. La squence obtenue est alors : 5, 8, 11, 14, 17, 20,

    CREATE SEQUENCE SEQUENCE_VOI TURESTART WITH 1MAXVALUE 10MINVALUE - 10CYCLE;

    Cette commande SQL permet de crer une squenceSEQUENCE_VOITUREcommenant la valeur1 avec un pas dincrmentation de 1, avec pour valeur maximale 10 et pour valeur minimale -10. Lasquence est cyclique, si bien que lon a la squence : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -10, -9, -8, -7, -6,

    CREATE SEQUENCE SEQUENCE_VOI TURECACHE 100;

    Cette commande SQL permet de crer une squence SEQUENCE_VOITURE en stockant les 100premires valeurs dans la mmoire cache. Par dfaut, la valeur est 20.

  • 7/25/2019 BDD_Chap7

    28/39

    Base de donnes 63

    2. Interroger la squence

    L'interrogation d'une squence se fait par l'utilisation des "pseudo-colonnes" CURRVAL etNEXTVAL. On parle de pseudo-colonne car cela se manipule un peu comme une colonne de table,mais ce n'est pas une colonne de table.- La pseudo-colonne CURRVALretourne la valeur courante de la squence.- La pseudo-colonne NEXTVALincrmente la squence et retourne la nouvelle valeur.

    SELECT SEQUENCE_VOI TURE. NEXTVALFROM DUAL;SELECT SEQUENCE_VOI TURE. CURRVALFROM DUAL;

    Lors de la premire utilisation dun squence, il faut utiliser NEXTVAL pour linitialiser. Ensuite,CURRVALpermet dobtenir la valeur courante de la squence.

    3. Modif ier une squence

    Syntaxe de la commande ALTER SEQUENCE en SQL

    ALTER SEQUENCE nom_de_l a_sequence[INCREMENT BY i ncr ment][NOMAXVALUE NOMINVALUE | MAXVALUE maxi mum | MINVALUE mi ni mum]|

    [NOCYCLE | CYCLE][CACHE nombre_de_val eurs];

    Exemple :

    ALTER SEQUENCE SEQUENCE_VOI TUREINCREMENT BY 3;

    Cette commande SQL permet de modifier le pas dincrmentation (valeur : 3) de la squenceSEQUENCE_VOITURE.

    4. Cration dune colonne de table auto-incrmente (pour une cl primaire)

    Le principe est le suivant :- crer une squence qui permettra de gnrer des valeurs entires uniques- crer un TRIGGERqui se dclenchera chaque INSERT, pour alimenter le champ voulu avec

    une valeur unique.

    CREATE TRIGGER RI GGER_CL I TURET E_PRI MAI RE_VOBEFORE INSERT ON VOI TURE FOR EACH ROWBEGIN

    SELECT SEQUENCE_VOI TURE. NEXTVAL INTO : VOI TURE. cl e_pr i mai r e FROM DUAL;

    END;

    Cet exemple ne gre pas le contrle d'unicit de la valeur que l'on va insrer, mais si le champ n'estaliment QUE par l'utilisation de la squence qui lui est ddie, et si cette squence n'est pas

    paramtre pour reboucler, il n'y a pas de raison qu'une erreur de cl en double surgisse...

  • 7/25/2019 BDD_Chap7

    29/39

    Base de donnes 64

    IX.BLOCS PL/SQL

    1. L'intro de l'int ro

    PL/SQL est un langage qui intgre SQL et permet de programmer de manire procdurale.Globalement, avec PL/SQL on aura notre disposition un vrai langage de programmation moinsintuitif mais aussi plus puissant que le SQL. Les 2 langages sont minemment complmentaires.

    Les principaux avantages / inconvnientssont les suivants :- ne dispense pas de connatre le SQL ;- permet le traitement par bloc de SQL et donc optimise le trafic rseau ;- l'utilisation de variable de stockage et de type simple et structur dynamique (%TYPE,

    %ROWTYPE, ) ;- des traitements plus complexes, notamment pour la gestion des cas particuliers et des erreurs

    (traitement des exceptions) ;- un paramtrage et la cration d'ordres SQL dynamiques.

    Le PL/SQL peut tre utilis sous 3 formes :- un bloc de code, excut comme une commande SQL, via un interprteur standard- un fichier de commande PL/SQL- un programme stock (procdure, fonction, package ou trigger)

    2. Ordres SQL supports dans PL/SQL

    Les instructions du langage de manipulation de donnes (LMD) et certaines instructions de gestion detransaction, savoir :- INSERT, UPDATE, DELETE, SELECT;- COMMIT, ROLLBACK, SAVEPOINT.

    3. Blocs et sections PL/SQL

    Les blocs de code s'appellent galement des blocs anonymes. Ils commenceront simplement par un'BEGIN'ou un 'DECLARE'. Ils sont composs de 1 3 sections :

    Type de section Obligatoire ? Mots cls

    section dclarative non DECLARE section excutable oui BEGIN END;

    section de traitement des exceptions non EXCEPTION

    La section 'EXCEPTION', quand elle est prsente, est incluse dans la section et NON PAS la suitede celle ci.

    BEGIN

    NULL;

    END;

    Le bloc prcdent est le plus petit bloc PL/SQL au monde. Le bloc ne peut pas tre vide et doitcontenir au moins une instruction

    Syntaxe de bloc en PL/SQL (avec des exceptions)

    DECLARE -- mes dclarations de variables --

    BEGIN -- dbut de la section excutable --

    -- mes ordres SQL et PL/SQL --

    EXCEPTION

    -- mon traitement des exceptions --

    END; -- la fin du bloc excutable --

  • 7/25/2019 BDD_Chap7

    30/39

    Base de donnes 65

    Afin de pouvoir utiliser une exception, il faut tout dabord dclarer une variable dexception dans lapartie DECLARE(ex : DECLARE erreur EXCEPTION;).

    Ensuite, dans la partie entre le BEGIN et le END, pour appeler une exception et stopper le blocPL/SQL, on utilise la commande RAISE nom_exception(ex : RAISE erreur;). Cette commandestoppe le bloc PL/SQL et va dans la partie EXCEPTION.

    Dans cette partie, pour afficher un message derreur, on utilise la commande suivante :WHEN nom_exception THENRAISE_APPLICATION_ERROR ( numero_erreur , message ); numero_erreur: reprsente le numro de lerreur utilisateur. Ce numro doit tre compris entre

    20000 et 20999. message: chane de caractres dune longueur maximale de 2048 octets qui contient le message

    associ lerreur.

    Les exceptions prdfinies sont : NO_DATA_FOUND: cas o lon na aucune donne la sortie dun SELECT. TO_MANY_ROWS: cas o lon a trop de donnes la sortie dun SELECT. VALUE_ERROR: cas o lon a une erreur de valeur. ZERO_DIVIDE: cas dune division par zro.

    INVALIDE_NUMBER: cas dun nombre invalide.

    4. Procdure PL/SQL

    Une procdureest simplement un programme PL/SQL nomm, compil et stock dans la base.

    Syntaxe de procdure en PL/SQL (avec des exceptions)

    CREATE [OR REPLACE] PROCEDURE nom_de_procdure ( par1 t ype1, par 2 t ype2, ) IS

    BEGIN

    -- mes ordres SQL et PL/SQL --

    EXCEPTION

    -- mon traitement des exceptions --END;

    Ce code est une commande SQL, qui cre la procdure PL/SQL, et donc compile et stocke dans la basele bloc PL/SQL compris entre le BEGIN et le END, en le rfrenant par nom_de_procdure. Et

    pour excuter cette procdure de manire autonome, on utilise la commande : EXECUTEnom_de_procdure. Les paramtres dentre doivent tre dclars (nomet type).

    CREATE OR REPLACE PROCEDURE Cl i ent ( nomVARCHAR2, vi l l eVARCHAR2) IS

    BEGIN

    INSERT INTO CLI ENTS ( numcl i ent , nomcl i ent , vi l l ecl i ent )VALUES ( SEQUENCE_NUM_CLI ENT. NEXTVAL, nom, vi l l e) ;

    COMMIT;END;

    Cette commande permet de crer une procdure nomme Client, dont les paramtres dentre sont deschanes de caractres nom et ville. La procdure permet dinsrer un nouveau tuple dans la tableCLIENTS de valeurs SEQUENCE_NUM_CLIENT.NEXTVAL (pour crer automatiquement unenouvelle valeur de cl primaire), nomet ville.

    5. Fonct ions PL/SQL

    Une fonctionest une procdure retournant une valeur.

  • 7/25/2019 BDD_Chap7

    31/39

    Base de donnes 66

    CREATE [OR REPLACE] FUNCTION nom_de_f onct i on ( par 1 t ype1, par 2 t ype2, )RETURN type_de_sortie IS variable_de_sortie type_de_sortie

    IS

    BEGIN

    -- mes ordres SQL et PL/SQL --

    EXCEPTION

    -- mon traitement des exceptions --END;

    Ce code est une commande SQL, qui cre la fonction PL/SQL, et donc compile et stocke dans la basele bloc PL/SQL compris entre le BEGIN et le END, en le rfrenant par nom_de_fonction. Lavaleur retourne en sortie correspond la variable_de_sortie dont le type est type_de_sortie. Les

    paramtres dentre doivent tre dclars (nomet type).

    CREATE OR REPLACE FUNCTION sol de ( numer o NUMBER)RETURN REAL IS l e_sol deREALBEGIN

    SELECT sol deINTO l e_sol deFROM cl i ents

    WHERE numclient = numero;RETURN l e_sol de;

    END;

    Cette commande permet de crer une fonction nomme solde, dont le paramtre dentre est le numrode client. La fonction permet de retourner en sortie, dans la variable relle le_solde, le solde du comptedu client identifi par numero. Pour appeler cette fonction et utiliser son rsultat au sein dun ordreSQL, il suffit dexcuter la commande suivante : SELECT sol de( 1000) FROM DUAL.

    6. Trigger

    Les dclencheurs (Triggers) sont des procdures stockes appartenant une table prcise et

    s'excutant lorsqu'une action spcifique se produit sur la table concerne. Le dclenchement d'une telleprocdure s'effectue subsquemment uneinstruction de manipulation de donnes (DML)commeINSERT, DELETE ou UPDATE. Il existe donc trois types de dclencheurs : sur insertion, sur mise

    jour et sur suppression.

    Une table peut comporter plusieurs dclencheurs d'un type donn, condition que chacun possdeun nom diffrent. Cependant, un dclencheur donn ne peut tre assign qu' une seule et unique tabletout en s'appliquant la fois, l'insertion, la mise jour et la suppression d'enregistrements sur la tableen question. Une table ne peut possder qu'un seul dclencheur INSTEAD OF d'un type donn.

    Les dclencheurs se produisent soit aprs (AFTER), soit avant (BEFORE) soit la place(INSTEAD OF) d'une action DML :- Un dclencheur sur INSERTs'excute chaque opration d'insertion lance par l'utilisateur ou

    par un programme. Lors d'une insertion, l'enregistrement est insr la fois dans la table cible

    est dans une table temporaire dnomme inserted. Une telle table peut permettre de vrifier lacohrence des enregistrements.

    - Un dclencheur sur DELETEs'excute chaque opration de suppression lance par l'utilisateurou un programme. Lors d'une suppression, l'enregistrement est supprim physiquement de latable cible et l'insre dans une table temporaire dnomme deleted . Cela peut permettre dercuprer l'enregistrement supprim.

    - Un dclencheur sur UPDATEs'excute chaque opration de mise jour lance par l'utilisateurou par un programme. Lors d'une mise jour, l'ancien enregistrement est supprim et insrdans la table temporaire deleted, tandis que le nouveau est insr la fois dans la table cibleet dans la table inserted.

  • 7/25/2019 BDD_Chap7

    32/39

    Base de donnes 67

    La suppression des dclencheurs s'effectue par l'intermdiaire de l'instruction DROP.

    DROP TRIGGER nom_t r i gger1 [ , , nom_t r i ggerN ] ;

    La modification des dclencheurs s'effectue par l'intermdiaire de l'instruction ALTER. La syntaxe

    complte de la commande ALTER TRIGGERest en fait identique celle de CREATE TRIGGER.

    ALTER TRIGGER nom_t r i ggerON nom_t abl eFOR INSERT | UPDATE | DELETE

    AS i nst r uct i on_SQL;

    Tous les dclencheurs (ALL) ou certains peuvent tre activs (ENABLE) ou dsactivs (DISABLE)au moyen de l'instruction ALTER TABLE.

    ALTER TABLE nom_t abl e { ENABLE | DISABLE } TRIGGER

    { ALL | nom_t r i gger1 [ , , nom_t r i ggerN] };

    Syntaxe de cration de trigger en PL/SQL

    CREATE [OR REPLACE] TRIGGER nom_t r i ggerAFTER | BEFORE | INSTEAD OF

    { [ INSERT[ OR DELETE

    [ OR UPDATE OF nom_col onne1, , nom_col onneN]]

    ]}nom_t abl eON

    FOR EACH ROW[WHEN ( condi t i on) ]

    I nst r ucti on_PL/ SQL | i nst r ucti on_pr odcur e;

    Notation (les lments entre [ ] sont optionnels) :- La commande OR REPLACErecre le dclencheur s'il existe dj.- La clause BEFOREindique que le dclencheur doit tre lanc avant l'excution de l'vnement.- La clause AFTERindique que le dclencheur doit tre lanc aprs l'excution de l'vnement.- Les instructions INSERTet DELETEindique au dclencheur de s'excuter lors respectivement

    d'une insertion ou d'une suppression dans la table.- La clause UPDATE OF indique que le dclencheur doit tre lanc lors de chaque mise jour

    d'une des colonnes spcifies. Si elle est omise, n'importe quelle colonne de la table modifieprovoque le dclenchement du Trigger.

    -

    La clause ONdsigne le nom de la table associ son schma pour lequel le dclencheur a tspcifiquement cr.

    - La clause FOR EACH ROWdsigne le dclencheur pour tre un dclencheur de ligne. Oraclelance un dclencheur de ligne une fois pour chaque ligne qui est affecte par l'instruction dedclenchement. Si la clause est omise, le dclencheur est un dclencheur d'instruction. Oraclelance un dclencheur de d'instruction une fois seulement lorsque l'instruction dclenchante estmise si la contrainte du dclencheur optionnelle est rencontre.

    CREATE TABLE TABLE_1 ( numeroNUMBER, chai neCHAR(20) ); CREATE TABLE DELETE_LOG ( t abl eCHAR( 20) , act i onCHAR( 50) , j our CHAR( 20) ) ;

    CREATE OR REPLACE TRIGGER decl encheur _suppr essi onAFTER DELETE ON TABLE_1

  • 7/25/2019 BDD_Chap7

    33/39

    Base de donnes 68

    FOR EACH ROWDECLARE act i on_ut i l i sat eur VARCHAR2( 50) ;BEGINSELECT user INTO act i on_ut i l i sat eur FROM DUAL;INSERT INTO DELETE_LOGVALUES ( ' tabl e_1' , act i on_ut i l i sateur , TO_CHAR( SYSDATE,

    ' DD/ MON/ YYYY- HH24: MI : SS' ) ) ;END;

    Cette commande SQl'intrieur deDELET

    L permet de crer deux tables puis cre un dclencheur qui insre un champ log E_LOG, pour chaque ligne supprime dans la tableTABLE_1.

    CREATE TABLE TABLE_1 ( numeroNUMBER, chai neCHAR(20) ) ;CREATE TABLE TABLE_2 ( chai neCHAR( 20) , numeroNUMBER) ) ;

    CREATE TRIGGER decl encheur _i nser t i onAFTER INSERT ON TABLE_1

    FOR EACH ROWWHEN ( NEW. numer o

  • 7/25/2019 BDD_Chap7

    34/39

    Base de donnes 69

    X. CURSEURS

    Les curseurs sont des pointeurs sur une zone mmoire pour les donnes extraites de la base. Il existe descurseurs implicites et explicites. Oracle ouvre toujours un curseur implicite pour traiter une instructionSQL, celui-ci ne se rapporte qu la dernire instruction SQL excute et il se nomme SQL . Le curseurcontient des attributs (%NOTFOUND, %FOUND, %ROWCOUNT) qui fournissent des informations surlexcution des instructions INSERT, UPDATE, DELETE, SELECT INTO. Un curseur implicite pour

    une instruction SELECT INTOne peut grer quune seule ligne. Le curseur explicite quant lui place lersultat dune requte multi-lignes dans un tampon mmoire et libre les lignes les unes aprs les autres lorsdu traitement.

    Le curseur se dfinit dans la partie dclarative du bloc PL/SQL (la requte nest pas excute ce moment-l). Dans cette dclaration, il est possible de donner une clause FOR UPDATE OFnom_colonne(s)quipermet de verrouiller les lignes slectionnes (aucun autre utilisateur ne peut mettre jour tant que le verrounest pas retir). La commande OPENnom_curseurexcute la requte et place le curseur en mmoire, ellene retourne aucun rsultat. Linstruction FETCHnom_curseurINTOvariableextrait la ligne courante ducurseur, la place dans une variable et fait avancer le curseur la ligne suivante. Pour parcourir toutes leslignes du curseur, il faut utiliser une boucle LOOP. La clause CURRENT OFnom_curseurest utilisedans le WHEREdune commande UPDATEpour modifier la ligne courante (si un FOR UPDATEa tutilis pralablement). Larrt de la boucle est obtenu grce nom_curseur%NOTFOUND qui retourne

    false sil ne reste plus de lignes. Pour librer lespace mmoire, il faut fermer explicitement le curseur enutilisant CLOSEnom_curseur.

    Un curseur peut accepter des paramtres en entre, ils servent passer des informations au curseur et sontgnralement utiliss dans un WHEREpour limiter la requte. Les paramtres ont un type associ qui nepeut pas avoir dindication de longueur. Ils sont passs lors de la commande OPEN.

    Syntaxe de la commande DECLARE CURSOR en SQL

    DECLARE nom1 t abl e1. at t r i but 1%TYPE;;omN t abl eN. at t r i but N%TYPE;n

    CURSOR nom_du_cur seur [ ( par amt r e1 t ype1 [ , , par amt r eN t ypeN] ) ][ RETURN t ype_du_r et our ]

    IS SELECT att r i but ( s )FROM t abl e( s)WHERE condi t i on( s) ;BEGINi nstr ucti on_cur seur s;

    END;

    Il est galement possible de passer des paramtres un curseur. Suite au DECLARE, on trouve ladclaration des variables utiles au curseur en les dfinissant par nom table.attribut%TYPE.

    DECLARE empl oye EMP. Ena %TYPE;me sal ai r e EMP. Sal %TYPE;CURSOR cur seur ( nomVARCHAR2, sal NUMBER)IS SELECT e. Empno, e. Ename, e. J ob, r . Sal

    FROM EMPAS e, REMNUERATI ONAS r

    WHERE e. Ename = nomAND r . Sal = sal ;BEGINOPEN cur seur ( DUPONT , 3000) ;LOOPFETCH curseur INTO @empl oye, @sal ai r e;EXIT WHEN curseur %NOTFOUND;

    END LOOP;CLOSE cur seur ;

    END;

    La commande SQL cre un curseurdont les paramtres dentre sont le nomet le salairedun employ. Lastructure de slection permet de rcuprer la liste des employs (numro, nom, mtier) et de leur salaire.Dans la structure BEGINEND, on retrouve lopration douverture du curseur suivi de la commandeFETCHINTO qui permet dextraire les diffrentes lignes des tuples renvoy par la structure deslection afin de les sauvegarder dans les variables employe et salaire dfinies dans la dclaration du

  • 7/25/2019 BDD_Chap7

    35/39

    Base de donnes 70

    curseur. L'attribut Oracle %NOTFOUND retourne FALSEsi la dernire instruction FETCHrenvoie unenregistrement ou TRUEen cas d'chec. Suite la fin de son utilisation, le curseur peut tre ferm afin dene plus consommer de ressources.

    XI.FONCTIONS SQL1. Fonctions arithmtiques

    - ABS(nb): Renvoie la valeur absolue de nb.- CEIL(nb): Renvoie le plus petit entier suprieur ou gal nb.- COS(n): Renvoie le cosinus de n, ntant un angle exprim en radians.- COSH(n): Renvoie le cosinus hyperbolique de n.- EXP(n): Renvoie e puissance n.- FLOOR(nb): Renvoie le plus grand entier infrieur ou gal nb.- LN(n): Renvoie le logarithme nprien de nqui doit tre un entier strictement positif.- LOG(m,n): Renvoie le logarithme en base mde n. mdoit tre un entier strictement suprieur 1,

    et nun entier strictement positif.- MOD(m,n) : Renvoie le reste de la division entire de m par n, si n vaut 0 alors renvoie m.

    Attention, utilise avec au moins un de ses arguments ngatifs, cette fonction donne des rsultatsqui peuvent tre diffrents d'un modulo classique. Cette fonction ne donne pas toujours un rsultatdont le signe du diviseur.

    - POWER(m,n): Renvoie mpuissance n, metnpeuvent tre des nombres quelconques entiers ourels mais si mest ngatif n doit tre un entier.

    - ROUND(n[,m]) : Si m est positif, renvoie n arrondi (et non pas tronqu) m chiffres aprs lavirgule. Si mest ngatif, renvoie narrondi mchiffres avant la virgule. mdoit tre un entier et ilvaut 0 par dfaut.

    - SIGN(nb): Renvoie -1 si nbest ngatif, 0 si nbest nul, 1 si nbest positif.- SIN(n): Renvoie le sinus de n, ntant un angle exprim en radians.- SINH(n): Renvoie le sinus hyperbolique den.- SQRT(nb): Renvoie la racine carre de nbqui doit tre un entier positif ou nul.- TAN(n) : Renvoie la tangente de n, ntant un angle exprim en radians.

    -

    TANH(n): Renvoie la tangente hyperbolique de n.- TRUNC(n[,m]) : Si mest positif, renvoie narrondi tronqu mchiffres aprs la virgule. Si mest

    ngatif, renvoientronqu mchiffres avant la virgule. mdoit tre un entier et il vaut 0 par dfaut.

    SELECT nom, ROUND( sal ai re/ 22. 2)FROM EMP;

    Cette instruction SQL permet dafficher le nom et le salaire journalier, arrondi lentier le plusproche, de chaque employ de la tableEMP.

    2. Expressions et fonctions sur les chanes de caractres

    -

    CONCAT(chane1,chane2) = chane1 || chane2 : Renvoie la chane obtenue en concatnantchane1 chane2. Cette fonction est quivalente l'oprateur de concatnation | |.

    - INITCAP(chane): Renvoie chaneen ayant mis la premire lettre de chaque mot en majuscule ettoutes les autres en minuscule. Les sparateurs de mots sont les espaces et les caractres nonalphanumriques.

    - LOWER(chane): Renvoie chaneen ayant mis toutes ses lettres en minuscules.- LPAD(chane,long,[char]) : Renvoie la chane obtenue en compltant, ou en tronquant, chane

    pour qu'elle ait comme longueur long en ajoutant ventuellement gauche le caractre (ou lachane de caractres) char. La valeur par dfaut de charest un espace.

    - LTRIM(chane[,ens]) : Renvoie la chane obtenue en parcourant partir de la gauche chaneeten supprimant tous les caractres qui sont dans ens. On s'arrte quand on trouve un caractre quin'est pas dans ens. La valeur de dfaut de ensest un espace.

    - REPLACE(chaine,avant,aprs): Renvoie chaine dans laquelle toutes les occurrences de lachane de caractres avantont t remplacs par la chane de caractres aprs.

  • 7/25/2019 BDD_Chap7

    36/39

    Base de donnes 71

    - RPAD(chane,n,[char]): Renvoie la chane obtenue en compltant, ou en tronquant, chanepourqu'elle ait comme longueur n en ajoutant ventuellement droite le caractre (ou la chane decaractres) char. La valeur par dfaut de charest un espace.

    - RTRIM(chane[,ens]): Renvoie la chane obtenue en parcourant partir de la droite chaneet ensupprimant tous les caractres qui sont dans ens. On s'arrte quand on trouve un caractre qui n'estpas dans ens. La valeur de dfaut de ensest un espace.

    -

    SOUNDEX(chane): Renvoie la chane de caractres constitue de la reprsentation phontiquedes mots de chane.- SUBSTR(chane,m[,n]) : Renvoie la partie de chane commenant au caractre m et ayant une

    longueur de n.- TRANSLATE(chane,avant,aprs): Renvoie une chane de caractres en remplaant chaque

    caractre de chaneprsent dans avantpar le caractre situ la mme position dans aprs. Lescaractres de chanenon prsents dans avantne sont pas modifis. avant peut contenir plus decaractres que aprs, dans ce cas les caractres de avant sans correspondant dans aprs serontsupprims de chane.

    - UPPER(chane): Renvoie chaneen ayant mis toutes ses lettres en majuscules.- number= INSTR(chane,sous-chane,debut,occ): Renvoie la position, not number, du premier

    caractre de chanecorrespondant l'occurrence occde sous-chaneen commenant la recherche la position dbut.

    -

    number= LENGTH(chane): Renvoie la longueur de chane, not number, exprime en nombrede caractres.

    SELECT UPPER nomFROM EMP;

    Cette instruction SQL permet dafficher le nomdes employs de la tableEMPen majuscule.

    3. Expressions et fonct ions sur les dates

    a. Oprateurs sur les dates

    -

    date+/ nombre: le rsultat est une date obtenue en ajoutant/soustrayant le nombre de joursnombre la date date.

    - date2 date1: le rsultat est le nombre de jours entre les deux dates.

    b. Fonctions sur les dates

    - ADD_MONTHS(date,n): Renvoie la date obtenue en ajoutant nmois date. npeut tre unentier quelconque. Si le mois obtenu a moins de jours que le jour de date, le jour obtenu est ledernier du mois.

    - LAST_DAY(date): Renvoie la date du dernier jour du mois de date.- MONTHS_BETWEEN(date2, date1): Renvoie le nombre de mois entre date2et date1, si

    date2est aprs date1le rsultat est positif, sinon le rsultat est ngatif. Si les jours date2etdate1sont les mmes, ou si ce sont les derniers jours du mois, le rsultat est un entier. La

    partie fractionnaire est calcule en considrant chaque jour comme 1/31me de mois- NEXT_DAY(date,nom_du_jour): Renvoie la date du prochain jour de la semaine dont le

    nom est nom_de_jour.- ROUND(date[,prcision]): Renvoie datearrondie l'unit spcifie dansprcision. L'unit

    de prcisionest indique en utilisant un des masques de mise en forme de la date. On peutainsi arrondir une date l'anne, au mois, la minute,... Par dfaut la prcision est le jour.

    - SYSDATE: Renvoie la date et l'heure courantes du systme d'exploitation hte.- TRUNC(date[,prcision]) : Renvoie date tronque l'unit spcifie dans prcision. Les

    paramtres sont analogues ceux de la fonction ROUND.

    SELECT NEXT_DAY( embauche, MONDAY ) FROM EMP;

  • 7/25/2019 BDD_Chap7

    37/39

    Base de donnes 72

    Cette instruction SQL permet dafficher la date du lundi suivant lembauche de chaque employde la tableEMP.

    SELECT ROUND( embauche, Y ) FROM EMP;

    Cette instruction SQL permet dafficher la date dembauche de chaque employ de la table EMParrondie lanne.

    SELECT ROUND( SYSDATE- embauche) FROM EMP;

    Cette instruction SQL permet dafficher le nombre de jours depuis lembauche de chaqueemploy de la tableEMP.

    4. Fonctions de conversion

    -

    ASCII(chane): Renvoie le nombre correspondant au code ascii du premier caractre de chaine.- CHR(nombre): Renvoie le caractre dont nombreest le code ascii.- TO_CHAR(nombre,format): Renvoie la chane de caractres en obtenue en convertissant nombre

    en fonction de format. Format est une chane de caractres pouvant contenir les caractressuivants :

    o 9: reprsente un chiffre (non reprsent si non significatif)o 0: reprsente un chiffre (reprsent mme si non significatif)o . : point dcimal apparento V: dfinit la position du point dcimal non apparento , : une virgule apparatra cet endroito $: un $prcdera le premier chiffre significatifo B: le nombre sera reprsent par des blancs s'il vaut 0o EEEE: le nombre sera reprsent avec un exposant (le spcifier avant MIou PR)

    o

    MI: le signe ngatif sera droiteo PR: un nombre ngatif sera entre

    - TO_CHAR(date,format) : Renvoie conversion d'une date en chane de caractres. Le formatindique quelle partie de la date doit apparatre, c'est une combinaison des codes suivants :

    o scc: sicle avec signeo cc: sicleo sy,yyy: anne (avec signe et virgule)o y,yyy: anne( avec virgule)o yyyy: anneo yyy: 3 derniers chiffres de l'anneo yy: 2 derniers chiffres de l'anneo y: dernier chiffre de l'anneo

    q: numro du trimestre dans l'anneo ww: numro de la semaine dans l'anneo w: numro de la semaine dans le moiso mm: numro du moiso ddd: numro du jour dans l'anneo dd: numro du jour dans le moiso d: numro du jour dans la semaineo hhou hh12: heure (sur 12 heures)o hh24: heure sur 24 heureso mi: minuteso ss: secondeso sssss: secondes aprs minuito j: jour du calendrier julien

  • 7/25/2019 BDD_Chap7

    38/39

    Base de donnes 73

    Les formats suivants permettent d'obtenir des dates en lettres (en anglais) :o syearou year: anne en toutes lettreso month: nom du moiso mon: nom du mois abrg sur 3 lettreso day: nom du jouro dy: nom du jour abrg sur 3 lettres

    o

    amou pm: indication am ou pmo bcou ad: indication avant ou aprs Jsus Christ

    Les suffixes suivants modifient la prsentation du nombre auquel ils sont accols :o th: ajout du suffixe ordinat st, nd, rd, tho sp: nombre en toutes lettres

    Tout caractre spcial insr dans le format sera reproduit tel quel dans la chane de caractresrsultat.

    - TO_DATE(chane,format): Permet de convertir une chanede caractres en donne de type date.Leformatest identique celui de la fonction TO_CHAR.

    - TO_NUMBER(chane): Convertit chaneen sa valeur numrique.

    Remarque : On peut galement insrer dans le format une chane de caractres quelconque, condition

    de la placer entre guillemets "".

    SELECT TO_CHAR( embauche, DD/ MM/ YY HH24: MI : SS ) FROM EMP;

    Cette instruction SQL permet dafficher les dates dembauche de chaque employ de la tableEMPsous le format jour/mois/anne heure:minute:seconde.

    SELECT nomFROM EMPWHERE SOUNDEX( nom) =SOUNDEX( DUPONT ) ;

    Cette instruction SQL permet dafficher la liste de tous les employs de la table EMPdont le nomressemble DUPONT.

    SELECT LTRIM( nom, LE ) FROM EMP;

    Cette instruction SQL permet dafficher la liste de tous les employs de la table EMP en ayantsupprim tous les L et les E en tte des noms.

    SELECT TRANSLATE( nom, AM , ** ) FROM EMP;

    Cette instruction SQL permet dafficher la liste de tous les employs de la table EMP en ayantremplac les A et les M par des * dans les noms.

    SELECT TO_CHAR( sal ai r e, 99900. 00 ) FROM EMP;

    Cette instruction SQL permet dafficher les salairesde chaque employ de la table EMPavec un$ en tte et au moins trois chiffres (dont deux dcimales).

  • 7/25/2019 BDD_Chap7

    39/39

    Base de donnes 74

    5. Autres fonct ions

    - GREATEST(expr1,expr2,) : Renvoie la plus grande des valeurs expr1, expr2,.... Toutes lesexpressions sont converties au format de expr1avant comparaison.

    - LEAST(expr1,expr2,) : Renvoie la plus petite des valeurs expr1, expr2,.... Toutes lesexpressions sont converties au format de expr1avant comparaison.

    - NVL(expr1,expr2) : Prend la valeur expr1, sauf si expr1 est NULL auquel cas NVL prend la

    valeur expr2.Une valeur NULL en SQL est une valeur non dfinie. Lorsque l'un des termes d'une expression ala valeur NULL, l'expression entire prend la valeur NULL. D'autre part, un prdicat comportantune comparaison avec une expression ayant la valeur NULL prendra toujours la valeur faux. Lafonction NVL permet de remplacer une valeur NULL par une valeur significative.

    - DECODE(crit,val_1,res_1[,val_2,res_2],def): Cette fonction permet de choisir une valeurparmi une liste d'expressions, en fonction de la valeur prise par une expression servant de critrede slection.Le rsultat rcupr est :

    o res_1si l'expression crita la valeur val_1o res_2si l'expression crita la valeur val_2o def(la valeur par dfaut) si l'expression critn'est gale aucune des expressions val_1,

    val_2,...,.

    Les expressions rsultats res_1, res_2, ..., def peuvent tre de types diffrents : caractre etnumrique, ou caractre et date (le rsultat est du type de la premire expression rencontr dans leDECODE). La fonction DECODEpermet galement de mlanger dans une colonne rsultat desinformations venant de plusieurs colonnes d'une mme table.

    SELECT nom, sal ai r e, comm, sal ai r e+NVL( comm, 0)FROM EMP;

    Cette instruction SQL permet dafficher le salaire, la commission et le total des gains de chaqueemploy de la tableEMP.

    SELECT nom, DECODE( f unct i on, ' PRESI DENT' , 1, ' DI RECTEUR' , 2, 3)

    FROM EMP;

    Cette instruction SQL permet dafficher la liste des employs de la tableEMPavec pour chacund'eux sa catgorie (prsident = 1, directeur = 2, autre = 3).

    SELECT DECODE( Detpno, 10, f onct i on, nom) FROM EMP;

    Cette instruction SQL permet dafficher la liste des employs de la table EMPen les identifiantpar leur fonction dans le dpartement 10 et par leur nom dans les autres dpartements.