Cours Langage SQL

36
SGBD Oracle Matière : Base de données II Institut Supérieur d’informatique et Multimédia Gabès Année Univ. 2007 / 2008

description

Cours Langage SQL

Transcript of Cours Langage SQL

SGBD Oracle Matire : Base de donnes II Institut Suprieur dinformatique et Multimdia Gabs Anne Univ. 2007 / 2008 Wided BOUCHELLIGUA 2007/2008 ISIMG- 2 -Base de donnes II Chapitre I Prsentation du SGBD Oracle Objectifs Dfinir les fonctionnalits dOracle Connatre larchitecture fonctionnelle dOracle Les objets manipuls dans Oracle Introduction Dbut des annes 70, le modle relationnel fait son apparition [E. F. Codd], IBM San Jose Concepts pour : la dfinition des donnes la manipulation des donnes concepts additionnels (optimisation, maintenance, dfinition des droits) Oracle developp par Oracle Corporations, cest un ensemble dapplications crit en C puis en java (80%) Principales tapes : 1970 : The relational model (CODD, ACM) 1974 : dbut des projets R (IBM) et INGRES (Berkeley) 1981 : commercialisation de SQL/DS et INGRES 1986 : normalisation de SQL1 1984 Oracle version PC (Dos, Windows 3.X, 95, 98, NT, 2000) LangagededveloppementsousOracle :Pro*(pro.C,pro.cobol,pro.fortran, pro.pascal) L4Gpl / SQL (SQL plus, Developper 2000, Designer 2000) UN SGBD Oracle est caractris par : Laportabilit : uneapplicationdveloppesousOraclepeuttresupportparune varit de plateformes matrielle (Oracle peut fonctionner sur toutes les gammes de machine) et logiciels (sur la majorit des SX) La compatibilit : Oracle est membre dans les compagnies de Normalisation AFNOR, ISO, IEEE Le langage SQL t normalis en 86. La connectablit : Oracle est ouvert sur plusieurs autres SGBD Les objets dune base de donne Oracle La notion de relation (table) : une structure de donne compos des lignes et des colonnes, elle peut reprsenter un objet du monde rel. Exemple :larelationNAGEURSestunsous-ensembleduproduitcartsiendes domainessuivants:(100,110,120),(Plouf,Coule,Brasse),(Jean, Paul), (Mauvaise, Bonne, Excellente). La notion de n-uplet : un n-uplet (lment) correspond une ligne d'une relation. Wided BOUCHELLIGUA 2007/2008 ISIMG- 3 -Base de donnes II Une autre reprsentation des relationsLanotiond'attribut :unattributestlenomdonnunecolonned'untableau reprsentant une relation. Exemple :les attributs de la relation PLAGES sont NP, NOMP, REGION, TYPE et POLLUTION. La notion de vue : cestunereprsentationlogiqueissuedelacombinaisondela dfinition dune ou de plusieurs tables ou vues. Elle obtient ses donnes partir des tables sur lesquels elle est base. Lanotiondeschma:leschmad'unerelationestunestructurelogiquede donne qui appartiennent un utilisateur de la base de donnes. R(A1, A2,, AN).Exemple :PLAGES (NP, NOMP, TYPE, REGION, POLLUTION). Dfinition : schma d'une base de donnes relationnellesLeschmad'unebasededonnesrelationnelleestl'ensembledes schmas des relations qui la composent. Lindex :cestunestructurecontenantladressephysiquedechaquelignedune table, permettant laccs direct linformation. Cluster :cestleregroupementdeplusieurstablesayantdecolonnescommunes. Son utilisation permet laccs rapide aux lignes issues dune jointure. Fonctionnalit dOracle Oracle possde les fonctionnalits dun SGBD Relationnel qui sont : a)DfinitionetManipulationdedonnes :Oracledisposedunlangagede dfinitiondedonnesLDDpermettantladfinitiondesobjetsdunbasede donnes (table, vue, index, trigger, cluster, etc.).Il dispose aussi dun langage deManipulationdedonnesLMDpermettantlaconsultationdedonne travers la commande SELECT, linsertion des donnes (commande Insert) et la suppression (commande DELETE) b)Cohrencedesdonnes :Oraclefonctionneavecleconceptdela transaction ; c--d une unit logique indivisible c)Confidentialit :Oracledisposedesmoyensdescuritdesdonnesen protgeant les donnes contre tout accs interdit. Oracle dispose dun langage de contrle de donnes LCD permettant dattribuer les droits daccs ou de les retirer. d)Intgritdesdonnes :Oracledisposedunmcanismepermettantla dfinition des contraintes sur les donnes de la base. CICl primaire : primary key Cl trangre : Foreign key De valeur : not-null Condition : check Unicit : unique e)Gestiondaccsconcurrent :Oraclegretoutaccssimultans,ilpermet lutilisation multi-utilisateurs et une base de donne repartie. Wided BOUCHELLIGUA 2007/2008 ISIMG- 4 -Base de donnes II Architecture fonctionnelle dOracle Le SGBD Oracle est compos de systemes suivants :

Outils de dveloppement Pro* Develpper 2000 Outils dadministration SQL DBA Outils de ModulisationDesigner 2000 Connexion SQLnet/ SQL star Noyau Oracle PL /SQL SQL PLUS BD Wided BOUCHELLIGUA 2007/2008 ISIMG- 5 -Base de donnes II Chapitre II Le Langage SQL 1. Historique du langageEn1970,SQL(StandardQueryLanguage,enfranaislangagederequtes structures)estnlasuitedestravauxmathmatiquesdeCodd(Directeurde rechercheducentreIBMSan-Jos),travauxquiontfond lesbasesde donnes relationnelles. Suite ces recherches plusieurs langages sont apparus : IBM Sequel (Structured English Query Language) en 1977IBM Sequel/2IBM System/R IBM DB2En 1982, SQL fut lanc commercialement par IBM. SQL a subit 3 normalisations : SQL1 en 1986 (version minimale) SQL1 en 1989 (+ intgrit) SQL2 en 1992 SQL3 en 1999 Aujourd'huiSQLconstituelepointd'entreobligatoiresuruneBasedeDonne relationnelle. 2. Principes du langage SQLestunlangagenonprocdural.Ilsediffred'unlangagedeprogrammation aveclefaitqu'iln'apasdestructuredecontrleetaussicarilmanipuledes ensembles. UnerequteenSQLaunformatrelativementsimple.Ilestconstituengrosde3 lments essentiels : Une premire partie SELECT qui permet de dterminer les attributs qui vont nous servir comme rsultats de la requte. Une partie FROM qui indique dans quelles tables on va chercher les informations. Une partie WHERE qui va permettre d'inclure des conditions. Wided BOUCHELLIGUA 2007/2008 ISIMG- 6 -Base de donnes II 3. Structure gnrale du langage LesinstructionsessentiellesSQLserpartissenten4famillesfonctionnellement distinctes et 4 formes d'utilisation : LMD (Langage de Manipulation de Donnes) permet la manipulation des tables et des vues. Pour manipuler la Base de Donne (BD) on a les commandes suivantes : Select : Pour la recherche de donnes Insert : Pour l'insertion de n-uplet dans une table Delete : Pour la suppression de n-uplet dans une table Update : Pour la modification de n-uplet dans une table LDD(LangagedeDfinitiondeDonne)permetlacrationetladfinitiondes tables,vues,index,attributsPourdfinirleschmadeBDonalescommandes suivantes : - Dclaration de tables - Dclaration des droits d'accs - Dclaration des vues - Dclaration de contraintes d'intgrits LCD(LangagedeContrledeDonnes)permetdedfinirdespermissionsau niveau des utilisateurs d'une base de donnes. Il existe aussi des commandes permettant l'intgration de SQL dans des langages de programmation (le langage C par exemple).4. Les Normes SQL En1986,lapremirenormeSQL(SQL-1)del'ISO(InternationalStandard Organisation) apparat.Ilexistedsormaisplusieurs dizaines deproduitsproposant SQL et tournant sur des machines allant des micros aux gros systmes. En1992,c'estautourdelanormeSQL2.Parmilesnouvellescomposantesde cette norme on y trouve : Une standardisation des codes rponses avec la variable SQLSTATE. Une extension des types de donnes TIMESTAMP, INTERVAL. La cration de domaines par l'utilisateur. Le supporte de l'intgrit rfrentielle. En1999,ilyal'apparitiondelanormeSQL3.Celle-ciestpluttorientObjetet relationnel. Wided BOUCHELLIGUA 2007/2008 ISIMG- 7 -Base de donnes II Partie 1 : Le langage de Dfinition des donnes LDD La cration de table 1. La syntaxe Pour crer une table on utilise la commande CREATE TABLE. Voici sa syntaxe : Create table < nom de table > ({< lment de table >}) ; Voici comment se compose la dfinition des lments de table : < lment de table > : = < dfinition attribut > / < contrainte de table > Voil donc comment s'crit la cration d'une table : Create table < nom de table > (< nom_attribut1 > < type attribut1 > < contrainte attribut1 >,< nom_attribut2 > < type attribut2 > < contrainte attribut >,) < contrainte de table > Il y a des rgles respecter : Chaque table de la base de donne possde un nom unique Une table est compose d'au moins un attribut Chaque attribut au sein d'une table possde un nom unique On peut mettre des contraintes sur les attributs lors de la cration de tableExemple: Create table Commande (numcom NUMBER (5), datecomm DATE); Ici,onremarqueraquel'oncrelatableCOMMANDEavec2attributs :numcomm pourlenumrodecommande(quiseraunevaleurnumrique5chiffres)et datecomm qui reprsente la date de la commande (ce sera du type DATE). 2. Dclaration d'un attribut Quand on dclare un attribut on doit lui affecter un nom ainsi qu'un type de donne et aussi il est possible de lui attribuer une valeur par dfaut et une contrainte. Voil la syntaxe de la dclaration d'un attribut : Wided BOUCHELLIGUA 2007/2008 ISIMG- 8 -Base de donnes II [default ] [contrainte_attribut] NB : Ce qui est entre crochet signifie que ce sont des dfinitions optionnelles. Les types de donnes Type de donne SyntaxeCommentaires AlphanumriqueCHAR(n) Chane de caractres de longueur fixe n AlphanumriqueVARCHAR2(n)Chane de n caractres maximums NumriqueNumber(n,[d]) Nombre de n chiffres avec en option le nombre de dcimales. NumriqueINTEGEREntier sign de 32 bits NumriqueSMALLINTEntier sign de 16 bits NumriqueFLOATNombre rel (avec virgule) TempsDATEDate au format : JJ/MM/AA TempsTIMEHeure au format : hh : mm :ss.ml TempsTIMESTAMPDate et heure La valeur par dfaut : default Le langage SQL permet de dfinir une valeur par dfaut lorsqu'un champ de la base n'est pas renseign grce la clause DEFAULT. Cela permet notamment de faciliter la cration de tables, ainsi que de garantir qu'un champ ne sera pas vide.La clause DEFAULT doit tre suivie par la valeur affecter. Cette valeur peut tre un des types suivants :constante numriqueconstante alphanumrique (chane de caractres)le mot cl USER (nom de l'utilisateur)le mot cl NULLle mot cl CURRENT_DATE (date de saisie)le mot cl CURRENT_TIME (heure de saisie)le mot cl CURRENT_TIMESTAMP (date et heure de saisie) Les contraintes d'attribut Ilestpossibled'exigerdescontraintessurlesattributsd'unetable.Voicila liste de ces contraintes : La valeur nulle impossible : NOT NULL L'unicit : UNIQUE. Il existe aussi PRIMARY KEY qui quivaut l'association deNOTNULL+UNIQUEmaisonnepeutmettrequ'uneclprimaire (PRIMARY KEY) par table. Wided BOUCHELLIGUA 2007/2008 ISIMG- 9 -Base de donnes II Lacontrainterfrentiellequiposelacontraintesurlefaitqu'unattributdoit exister dans une autre table. La syntaxe est donc : REFERENCES [ ] Lacontraintegnrale:sasyntaxeest:CHECK.Lacondition peuttresimple(exemple:CHECKBETWEEN1and10)oualorsonpeut tre une condition avec un ordre SELECT. Exemple : On veut crer la table des commandes comportant 3 attributs : le numro decommandequidoittreuniqueetnonnul(sinonunecommandenepeuttre identifie) la date de commande et le numro de fournisseur. Create table COMMANDE (numcom NUMBER (5) PRIMARY KEY, Datecom DATE, Numfou NUMBER(5) REFERENCES FOURNISSEUR) ; 3. Les contraintes de tables Lorsdeladclarationd'unetable,unefoisaprsavoirdfinilesattributsonpeut rajouter des contraintes spcifiques la table. Voici la liste de ces contraintes : L'unicit:sasyntaxeestUNIQUE/PRIMARYKEY(, ,) Les cls trangres (CONTRAINTES REFERENTIELLES) : FOREIGN KEY (< nom attribut rfrenant > )REFERENCES < nom de table rfrence > [ , , ][ partie trigger ] Dfinition de PARTIE TRIGGER Lesclstrangrespermettentdedfinirlescolonnesd'unetablegarantissantla validit d'une autre table. Ainsi, il existe des lments (appels triggers, en franais gchettes)permettantdegarantircescontraintesappelesintgritrfrentielle, c'est--dire notamment de garantir qu'un nuplet utilis partir d'une autre table existe rellement.CestriggerssontONDELETEetONUPDATE.OnadoncONDELETEquisert dans le cas o l'on voudrait supprimer une donne et ON UPDATE sert lorsque l'on met jour une donne. La syntaxe de partie trigger est donc : ON UPDATE ON DELETE Dfinition de ACTION L'action permet de savoir quelle va tre la rpercussion lors d'un effacement (delete) ou d'une mise jour (update) Parmi les actions l'on a : Wided BOUCHELLIGUA 2007/2008 ISIMG- 10 -Base de donnes II - CASCADE permet de rpercuter ON DELETE ou ON UPDATE en cascade sur les autres attributs- RESTRICT permet d'indiquer un message d'erreur- SET DEFAULT permet de mettre la valeur par dfaut - SET NULL permet de mettre la valeur NULL Contrainte gnrale : CHECK Exemple :Create table Ligne (numcomm NUMBER(5), numligne NUMBER(5), code_produit NUMBER(5) NOT NULL, qt NUMBER(6) NOT NULL PRIMARY KEY (numcomm, numligne) FOREIGN KEY (numcomm) REFERENCES COMMANDE ON DELETE CASCADE ON DATE CASCADE FOREIGN KEY (code_produit) REFERENCES PRODUIT (code_produit) 4. Dclaration de domaine Les domaines sont utiliss lors de la dfinition des attributs de table. Voici la syntaxe d'un domaine : Create Domain As [default ] [check ] Exemple : Create Domain acquisition As DATE Default CURRENT_DATE Ici CURRENT_DATE est une variable qui donne la date du jour. Wided BOUCHELLIGUA 2007/2008 ISIMG- 11 -Base de donnes II La dclaration de domaine sert dfinir un nouveau type de donne que l'on utilisera lors de la dclaration d'un attribut par exemple. 5. Dclaration des assertionsLes assertions sont des expressions devant tre satisfaites lors de la modification de donnespourquecelles-cipuissenttreralises.Ainsi,ellespermettentde garantir l'intgrit des donnes. Par contre la dclaration d'assertion n'est prise en compte par tous les SGBD. Les assertions permettent des contraintes multi-tables. La syntaxe pour dclarer une contrainte d'intgrit : Create assertion Check Voici un exemple pour mieux comprendre : Create assertion PU_PV Check (NOT EXISTS (Select * From LIGNE_CMD Where lcd_pu [ ] Values (< valeur attribut1>, < valeur attribut 2>, ) Exemple : On veut insrer un nouvel employ qui s'appelle Burton qui est Directeur, son responsable est l'employ n 15, etc.. Insert Into EMPLOYESValues (10, Burton, Directeur, 15, 01/13/88, 250000, NULL, 60 ) NB : ici on ne spcifie pas le nom des attributs car on veut tous les remplir. On met la valeurNULLauxchampsquin'ontpasdevaleursaufsionadfiniquel'attribut devait absolument avoir une valeur.Voici la syntaxe pour Insert avec la clause Select : Insert Into < Nom de table > [ ] Select < nom des attributs > From < nom de table2> Where < condition > Exemple :Onveutinsrerlenom,lafonction,lasalaireetlacommissiondes employs qui sont " directeur " ou que leur commission soit suprieure 25% de leur salaire dans la table PRIMES. Insert Into PRIMES (nomemp, fonction, sala, comm) Select nomemp, fonction, sala, comm From EMPLOYES Where fonction = " directeur " or comm > 0.25*sala 2. Mise jour de tuples Pour la mise jour des donnes, la modification on utilise la commande UPDATE. Wided BOUCHELLIGUA 2007/2008 ISIMG- 13 -Base de donnes II Voici sa syntaxe :Update < nom de table > Set {< nom attribut > = valeur } Where < condition de recherche > Exemple : On veut augmenter le salaire de Perrin de 10%. Update < EMPLOYES > Set { sala = 1.1*sala } Where nomemp = " Perrin " 3. Suppression de tuples Pour supprimer un tuple dans une table on utilise la commande DELETE. Voici sa syntaxe : Delete From < nom table > Where < condition de recherche > Exemple : On veut enlever l'employ Lewinski de la table des PRIMES. Delete From PRIMES Where nomemp = " Lewinski " Wided BOUCHELLIGUA 2007/2008 ISIMG- 14 -Base de donnes II Partie 2.2 La cration des vues1. Introduction Dans la pratique, chaque table reprsente une entit propre ( comme par exemple la tableEMPLOYESquireprsentelesemploys)etellecontientlesinformations dsires pour dfinir l'entit, on parle donc d'attribut de table. Donc toutes les lignes d'unetableontdesattributscommuns.Cesattributs,unefoisdfinis,sontfixesen principe.Ilarrivequ'onpuisseavoirbesoinderassemblerlesinformationsde plusieurstables.Pourcelaonauraitdoncbesoind'unoutilsupplmentaireles vues.Penons par exemple la base de donnes suivante pour : Etudiant (num_Et, nom, prenom, adr1 ) Enseignant (num_Ens, , adr2) Cours (num_Ens, num_Et, note_Et, date) 2. Dfinition On dfinit une vue par une table virtuelle, c'est--dire dont les donnes ne sont pas stockesdansunetable de labasededonnes,etdans laquelle il estpossiblede rassemblerdes informationsprovenantdeplusieurstables.Onparle de"vue"car il s'agitsimplementd'unereprsentationdesdonnesdanslebutd'uneexploitation visuelle. Le contenu de cette vue est dfini par une requte SQL. 3. Dclaration Voil la syntaxe pour dclarer une vue : CreateView[{}]As [With Check Option] La clause facultative with check option permet de dfinir, lors de la mise jour de donnesvialavue,quela(les)conditionsdelaclausewheredoittrevrifie.Si elle n'est pas prsente, aucune vrification ne sera faite.Aveccetteclause,onpeutinsrerdeslignes,mettrejourdescolonnes,par l'intermdiaire d'une vue, si les conditions duwhere sont respectes ( voir dans le G) Pour dtruire une vue : Drop view Wided BOUCHELLIGUA 2007/2008 ISIMG- 15 -Base de donnes II 4. Exemple Create view EMPLOYES10 As Select noemp, nomemp, fonction From EMPLOYES Where nodep = 10 Ici on cre une vue pour pouvoir faire des requtes uniquement sur les employs du dpartement10.Doncensuiteonpeuteffectuerdesrequtessurcettevue exactement de la mme manire qu'avec une table. 5. Avantages Grces aux vues on a de nombreux avantages : Perception plus proche des besoins des utilisateurs.D-normalisationdelastructuredelabasededonnessans introduire de la redondance.Meilleureindpendancelogiquedesprogrammesparrapportaux donnes.Limiter les accs aux donnes.Simplification des requtes utilisateurs.6. Interrogation travers des vues Pour interroger une vue on procde exactement de la mmemanire que pour une table.Voiciunexemplecompletmontrantlacrationd'unevue,unerequtesur cette vue et la requte sans la cration de la vue. On veut crer une table avec les gros buveurs (voir intro). Create View Bon_Etudiant As Select num_Et, nom, prnom, adr1 From Cours, Etudiant Where Etudiant.num_Et = Cours.Num_ET and note_Et > 14 Maintenant on veut le nom et prnom des bons tudiants qui habite Gabes. Select nom, prnom From Bon_Etudiant Where adresse like "Gabes"; Wided BOUCHELLIGUA 2007/2008 ISIMG- 16 -Base de donnes II Voici la requte utilise si l'on n'avait pas fait de vue: Select nom, prnom From ABUS, BUVEURS Where adr1 like "Gabes" and Etudiant.num_Et = Cours.Num_ET and note_Et > 14; 7. Mise jour travers des vues Toutes les vues ne peuvent pas toutes tre mise jour. Une vue estmettable jours'ilestpossibledereporterlesmisesjoursurlestablesdebasessans ambigut. En effet, prenons le cas o l'on met des valeurs moyennes dans la vue, alorsmettrejourladonnen'auraaucunsenscarleSGBDnesaurapasquoi modifier dans les tables. Dans la pratique, les SGBD autorisent la mise jour que surdesvuesmonotablesaveccldanslesattributs(leWHEREpeutrfrencer plusieurs tables). Sil'onveutvrifierquelesdonnesmisesjourdanslavuesontbienles propritsdemandesonrajoutelaclausewithcheckoption.Doncunefoiscette clause mise lors de la dclaration, on ne peut mettre jour les donnes seulement si elles correspondent aux proprits demandes. Wided BOUCHELLIGUA 2007/2008 ISIMG- 17 -Base de donnes II Partie 2 : Le langage de Manipulation des donnes LMD La base de donne Dans le but d'illustrer au mieux les diffrentes requtes prsentes nous allons tout d'abord dfinir diffrentes tables : Voici les 4 tables qui vont nous servir : DEPARTEMENT (nodep, nomdep, ville) EMPLOYES (noemp, nomemp, fonction, noresp, datemb, sala, comm, nodep ) PRIMES ( noemp, fonction, sala, comm ) GRADE (grade, salmin, salmax ) Nodep : numro de dpartement Nomdep : nom du dpartement Ville : ville o est situ le dpartementnoemp : numro de l'employ nomemp : nom de l'employ fonction : fonction de l'employ Noresp : numro de responsable de l'employ (qui est aussi un employ) Datemb : date d'embauche de l'employ Grade : libell du grade Sala : salaire de l'employ Salmin : salaire mini pour ce grade Comm : commission perue par l'employ Salmax : salaire maxi pour ce grade Chaqueattributd'unetable,aunecontrainted'intgrit.Cescontraintes permettentdemettredesconditionssurdonnes.Pourquelesdonnessaisies danslabasesoientconformeauxdonnesattendues.Cetaspectseradvelopp dans le chapitre 4. Comme exemple de contraintes on pourra exiger qu'une cl soit unique et que sa valeur de dois pas tre nulle. Pourleschampsdelabasequin'ontpastrenseigns,ilyaunevaleurpar NULLpardfaut.EneffetlavaleurNULLsignifiequ'iln'yapasdedonne,on nauraitpaspuremplacerparlavaleur0parexemple.Prenonslecasdes commissions. Si un employ n'a pas de commission (si il ne peut pas en bnficier) on lui met la valeur NULL car si on met 0 ce n'est pas pareil. Le 0 voudrait dire qu'il peut avoir une commission (un vendeur par exemple) mais comme il a mal travaill, sa commission est de 0. Wided BOUCHELLIGUA 2007/2008 ISIMG- 18 -Base de donnes II 2. Les requtes simples Unerequtesimple,ouautrementappeluneprojection,sertslectionnerun ensemble d'attribut dans une table. Sa syntaxe est :Select < liste des attributs (colonnes) > From < liste des tables > ; Par exemple : Select nodep, nomdep From DEPARTEMENT; Le rsultat de cette requte donne une liste de tous numro de dpartement (nodep) et les noms de dpartement (nomdep) de la table DEPARTEMENT. DEPARTEMENT nodepnomdepVille 30DveloppementMarseille 35DveloppementNice 45AnalyseToulon 50MaintenanceParis 60RechercheToulouse Le rsultat de la requte :nodepnomdep 30Dveloppement 35Dveloppement 45Analyse 50Maintenance 60Recherche Pour slectionner tous les attributs de la table on peut utiliser le caractre '*' : Exemple : Select * From DEPARTEMENT ; Wided BOUCHELLIGUA 2007/2008 ISIMG- 19 -Base de donnes II Pournepasavoirderedondance(dedoubles)danslaslectiononutilise l'expression 'distinct' Exemple :Select distinct nomdep From DEPARTEMENT ; Le rsultat de la requte est :nomdep Dpartement Analyse Maintenance Recherche 3. Requte avec la clause "WHERE" LaclauseWHEREpermetd'inclureuneconditionlaslection,onl'appelleaussi restriction. Sa syntaxe est :Select < liste des attributs (colonnes) > From < liste des tables > Where < expression logique > ; Exemple : On veut le numro d'employ, le nom ainsi que le numro de dpartement desemploysquiappartiennentaudpartementn30etdontleurfonctionest ouvrier. Pour cela on tape la requte suivante :Select noemp, nomemp, nodep From EMPLOYES Where nodep = 30 and fonction = "Ouvrier" ; Wided BOUCHELLIGUA 2007/2008 ISIMG- 20 -Base de donnes II EMPLOYES Noempnomempfonctionnoresp datembsalacommnodep 01LegrosProgrammeur0201/06/81150000400060 02PerrinIngnieur0811/08/8220000050030 03ManitouOuvrier0125/07/83140000785030 04JamesOuvrier0119/09/84140000100045 05SmithOuvrier0113/12/8514500050030 06LewitskiStagiaire0229/12/863000060060 07MartinOuvrier1207/01/86140000300050 On obtient donc la restriction suivante : noempnomempnodep 03Manitou30 05Smith30 Il existe diffrentes catgories d'oprateurs pour exprimer une expression logique : Connecteurs logiquesAND OR NOR (ngation du OR) Exemple:nodep=30ORfonction='Ouvrier'-->Ondoitsatisfaireaumoinsune condition il faut soit tre du dpartement 30 soit Ouvrier voire les deux.Oprateurs arithmtiques : + - * / ^ NB:Onpeututiliserdesoprateursarithmtiquesdanslersultatd'unerequte. Par exemple on peut afficher le salaire, la commission ainsi que la somme des deux des employs qui sont ouvrier.Voici l'illustration de lexemple :Select nomemp, sala, comm, sala+comm From EMPLOYES Wided BOUCHELLIGUA 2007/2008 ISIMG- 21 -Base de donnes II Where fonction = " Ouvrier "; Ce qui donne : nomempsalacommsala+comm Manitou1400007850147850 James1400001000141000 Smith145000500145500 Martin1400003000143000 Comparateurs de comparaison : = != ou (diffrent) < > = (suprieur ou gale) Comparateurs de chanes de caractres : Between . And Il permet de slectionner une valeur se trouvant dans unintervalle. Ce comparateur fonctionne aussi bien avec une chane de caractre qu'avec des nombres. Exemple : On veut les employs qui on un salaire compris entre 140000 et 200000. Select noemp, nomemp From EMPLOYES Where sala Between 140000 and 200000; On pourra noter qu'il peut tre remplacer par la combinaison de 2 oprateur Not between and Il permet de slectionner les valeurs qui ne font pas partie de l'intervalle. In Ce comparateur sert slectionner une valeur parmi une liste de valeur. Exemple :On veut le nom et numro des employs qui font partie du dpartement 30, 50 ou 45. Wided BOUCHELLIGUA 2007/2008 ISIMG- 22 -Base de donnes II Select noemp, nomemp From EMPLOYES Where nodep IN( 30, 50, 45 ); On notera aussi que cette requte aurait pu tre ralis avec plusieurs = (nodep = 30 and nodep = 50 and nodep = 45) Not in Pour slectionner les valeurs qui ne sont pas dans le liste. Like Il permet de comparer du texte. Pour cela on lui ajoute des caractres spciaux : - Le caractre '%' permet de remplacer une suite de caractre Exemple : nomemp LIKE M% Slectionne tous les nomemp commenant par un M - Le caractre '_' permet de remplacer un caractre dans une chaine de caractre. Exemple : nomemp LIKE M_rtin On obtient tous les noms du type Martin, Murtin, - Les caractres [-] permettent de slectionner dans un intervalle. Exemple:nomempLIKE[B-D]%Onslectionnelesnomempdontlapremire lettre du nom est entre le B et le D. Not like Idem que ci-dessus except qu'on slectionne les valeurs extrieures. -> Restriction sur les valeurs manquantes : IS NULL IS NOT NULL On les utilise pour slectionner les lignes o il y a une valeur manquante. Exemple:onveutconnatrelesemploysoleurnumroderesponsablen'apas t saisi Wided BOUCHELLIGUA 2007/2008 ISIMG- 23 -Base de donnes II Select * From EMPLOYES Where noresp IS NULL; Fonctions numriques prdfinies : ABS (c'est la valeur absolue) GREATEST (exemple : GREATEST(sala, comm) qui sert savoir laquelle des valeurs d'un ensemble est la plus grande. LEAST (pour connatre la valeur la plus basse, on l'utilise de la mme faon que GREATEST)4. Requte avec la clause "ORDER BY" Cetteclausesertclasserparordrecroissantoudcroissantlersultatd'une requte.Pardfautiltriparordrecroissant.Lesextensionsascetdescindiquent respectivement si le tri est croissant ou dcroissant. Exemple : On veut la liste des employs du dpartement 30 par ordre croissant de leur salaire. Select noemp, nomemp, fonction, sala From EMPLOYES Where nodep = 30 Order by sala asc ;( noter que le asc n'est pas obligatoire ici car il est mis par dfaut) EMPLOYES Noempnomempfonctionnorespdatembsalacommnodep 01LegrosProgrammeur0201/06/81150000400060 02PerrinIngnieur0811/08/8220000050030 03ManitouOuvrier0125/07/83140000785030 04JamesOuvrier0119/09/84140000100045 05SmithOuvrier0113/12/8514500050030 06LewitskiStagiaire0229/12/863000060060 07MartinOuvrier1207/01/86140000300050 Wided BOUCHELLIGUA 2007/2008 ISIMG- 24 -Base de donnes II Le rsultat :noempnomempfonctionsala 03ManitouOuvrier140000 05SmithOuvrier145000 02PerrinIngnieur200000 On pourra aussi trier avec plusieurs critres. Par exemple on veut slectionner les employsenlestriantparsalairedcroissantetparordrealphabtiquedesnoms. C'est dire que pour ceux qui auront le mme salaire ils seront classs dans l'ordre alphabtique. Select noemp, nomemp, fonction, sala From EMPLOYES Order by sala desc, nomemp asc ; Le rsultat :noempnomempfonctionsala 02PerrinIngnieur200000 01LegrosProgrammeur150000 05SmithOuvrier145000 04JamesOuvrier140000 03ManitouOuvrier140000 07MartinOuvrier140000 06LewitskiStagiaire30000 5. Requtes multi-relations Lesrequtesmulti-relationsreprsententenfaitlesjointures.Unejointuresert lierdeschampsdediffrentestables,mettreunerelationentreeux.Ilfautqueles champs que l'on souhaite lier soient du mme type (cf chapitre 2). Pour tenter d'tre plus clair regardons un cas de jointure sur un exemple : EMPLOYESNoempnomempfonctionnorespdatembsalacommnodep 01LegrosProgrammeur0201/06/81150000400060 02PerrinIngnieur0811/08/8220000050030 03ManitouOuvrier0125/07/83140000785030 04JamesOuvrier0119/09/84140000100045 05SmithOuvrier0113/12/8514500050030 Wided BOUCHELLIGUA 2007/2008 ISIMG- 25 -Base de donnes II 06LewitskiStagiaire0229/12/863000060060 07MartinOuvrier1207/01/86140000300050 DEPARTEMENT nodepnomdepVille 30DveloppementMarseille 35DveloppementNice 45AnalyseToulon 50MaintenanceParis 60RechercheToulouse Onvoudraitparexemplelenumroetnomdesemploystravaillantdansle dpartement 30 et 40, ainsi que le nom de ce dpartement. Donc onveut avoir pour unemploysonnumro,sonnometlenomdesondpartement.Danscecason voit bien que le nom des dpartements, ne sont pas dans la table des EMPLOYES et inversementlenumroetnomdesemploys,nesontpasdanscelledes DEPARTEMENT.Parconsquentona besoin des2tableset onabesoindeles" lier " pour qu' chaque fois qu'on va avoir un numro de dpartement l'on est le nom qui lui correspond. Voici la requte ncessaire : Select noemp, nomemp, nomdep From EMPLOYES, DEPARTEMENT Where EMPLOYES.nodep = DEPARTEMENT.nodep And EMPLOYES.nodep in (30, 40); On obtient donc le rsultat suivant : noempnomempnomdep 02PerrinDveloppement 03ManitouDveloppement 04JamesAnalyse 05SmithDveloppement NB : Si on avait voulu afficher aussi le nodep, il aurait fallu prciser dans quelle table onlechoisissait.Ilsuffisaitsimplementderajouterdanslaligneduselect:Select noemp, nomemp, nomdep, DEPARTEMENT.nodep Astuce:Onpourradonnerdesaliasauxnomsdetablespourviterdetaper chaque fois le nom de la table entirement dans la requte. Voil la requte prcdente mais avec des alias : Wided BOUCHELLIGUA 2007/2008 ISIMG- 26 -Base de donnes II Select noemp, nomemp, nomdep From EMPLOYES E, DEPARTEMENT D Where E.nodep = D.nodep And E.nodep in (30, 40);Cette astuce ne sert pas uniquement pour viter d'crire le nom des tables en entier, elle sert aussi dans le cas d'une auto-jointure (cf chapitre 2). Uneauto-jointure est une jointure d'une table sur elle mme. Pas de panique un exemple suit pour illustrer ce qu'est une auto-jointure : Exemple : On veut la liste des employs qui gagnent plus que leur responsable. Les employssontdanslatableEMPLOYESetlesresponsablessontaussides employsdoncilssontaussidanslammetable.Donciciuneauto-jointureest indispensable car l'on doit mettre en relation les employs avec leur responsable. On tape donc la requte suivante : Select E.noemp, E.sal, R.nomemp, R.sala FromEMPLOYESE,EMPLOYER(EpourlatabledesemploysetRpourles responsables) Where E.noresp = R.noemp (On lit chaque employ avec son responsable) AndE.sala>R.sala;(lesalairedel'employquiestsuprieurceluidu responsable) 6. Requtes avec fonction agrgats Lesfonctionsagrgatspermettentdefairedudnombrement,dterminerun maximum, un minimum, faire des moyennes Par exemple au lieu d'avoir en sortie la liste de tous les salaires on pourra avoir simplement la moyenne des salaires. Voici la liste de ces fonctions : COUNT permet de compter les nombres de valeurs d'un ensemble. SUM permet de faire la somme des valeurs d'un ensemble. AVG permet de calculer la moyenne des valeurs d'un ensemble. MAX permet de calculer la valeur maximale d'un ensemble. MIN permet de calculer la valeur minimale d'un ensemble. Exemple : On veut la moyenne des salaires des employs qui sont ouvriers. Select AVG (sala) From EMPLOYES Where fonction = "ouvrier " ; Wided BOUCHELLIGUA 2007/2008 ISIMG- 27 -Base de donnes II 7. La clause "GROUP BY" Cetteclausesertgrouper lesrsultats d'unerequte.Celapermetunemeilleure lisibilit.Parexempleonvoudraavoirlamoyennedessalairesdesemployspar dpartement. Pour cela on tape la requte suivante : Select nodep, AVG(sala) From EMPLOYES Group by nodep; Noempnomempfonctionnorespdatembsalacommnodep 01LegrosProgrammeur0201/06/81150000400060 02PerrinIngnieur0811/08/8220000050030 03ManitouOuvrier0125/07/83140000785030 04JamesOuvrier0119/09/84140000100045 05SmithOuvrier0113/12/8514500050030 06LewitskiStagiaire0229/12/863000060060 07MartinOuvrier1207/01/86140000300050 On a donc le rsultat suivant : nodepAVG (sala) 30160667 40140000 50140000 6090000 Onadoncdansunecolonnechaquedpartementetdansl'autrelamoyennedes salaires des employs de chaque dpartement. NB : Il est possible de faire des groupes dans les groupes. Pour mieux comprendre, faisons un exemple : Exemple : On veut faire la moyenne des salaires par dpartement et par fonction au sein de chaque dpartement et compter le nombre de personnes. Par exemple pour comparerlamoyennedessalairesdesouvrierspardpartementetdemmepour lesautresfonctions.FaisonslarequtepartidelammetableEMPLOYESque prcedemment : Select nodep, fonction, COUNT(*), AVG (sala) Wided BOUCHELLIGUA 2007/2008 ISIMG- 28 -Base de donnes II From EMPLOYES Group by nodep, fonction ; (on les groupe d'abord par nodep puis par fonction)On obtient donc : nodepfonctionCOUNT(*)AVG(sala) 30Ingnieur1200000 30Ouvrier2142500 40Ouvrier1140000 50Ouvrier1140000 60Programmeur1150000 60Stagiaire130000 Pourappliquerdesrestrictionssurces"sous-tables"onutiliselacommande Having qui est en gros l'quivalent du Where pour les groupes. Voici un exemple : On veut la liste des fonctions avec leur moyenne de salaire mais seulement si il y a plus d'une personne qui a cette fonction. Voil la requte : Select fonction, COUNT(*), AVG (sala) From EMPLOYES Group by fonction Having count(*) > 1 ; Voil le rsultat dans une table : fonctionCOUNT(*)AVG(sala) Ouvrier4141250 La fonction ouvrier est la seule o il y a plus d'un employ qui a cette fonction. Requtes imbriques On parle de requtes imbriques lorsqu'on a une requte dans la clause "where " ou " having " c'est dire lorsque l'on fait une requte l'intrieur d'une requte; on parleaussidesous-requtes.Donconutiliselersultatdelarequteimbrique pour raliser la requte. Pour mieux comprendre rien de mieux qu'un exemple : Exemple : On veut la liste de tous les employs ayant la mme fonction que " Martin ". Il parat donc vident que l'on ne peut avoir cette requte directement ! La requte imbrique vient nous sauver Wided BOUCHELLIGUA 2007/2008 ISIMG- 29 -Base de donnes II Select nomemp, fonction From EMPLOYES Where fonction = (Select fonctionFrom EMPLOYES Where nomemp = Martin "); On obtient donc : nomempfonction ManitouOuvrier JamesOuvier SmithOuvrier MartinOuvrier Exemple2:Onveutlenumroetnomdesdpartementsolesemploysontun salaire suprieur 140000. Au fait vous n'tes pas obligs de regarder le rponse de suite vous pouvez aussi chercher avant EMPLOYESNoempnomempfonctionnorespdatembsalacommnodep 01LegrosProgrammeur0201/06/81150000400060 02PerrinIngnieur0811/08/8220000050030 03ManitouOuvrier0125/07/83140000785030 04JamesOuvrier0119/09/84140000100045 05SmithOuvrier0113/12/8514500050030 06LewitskiStagiaire0229/12/863000060060 07MartinOuvrier1207/01/86140000300050 DEPARTEMENTnodepnomdepVille 30DveloppementMarseille 35DveloppementNice 45AnalyseToulon 50MaintenanceParis 60RechercheToulouse Select distinct nodep, distinct nomdep From DEPARTEMENT Where nodep in (Select nodepFrom EMPLOYES Where sala > 140000); Wided BOUCHELLIGUA 2007/2008 ISIMG- 30 -Base de donnes II D'olersultat :Onretientchaquedpartementounemploygagneplusde 140000 et ensuite on affiche le nom du dpartement et son numro. nodepnomdep 30Dveloppement 60Recherche Cas particuliers : les requtes imbriques et corrles : On les utilise lorsque l'on a besoin des informations de la requte principal e dans la sous requte. Comme cette notion semble difficile visualiser voil un exemple pour tenter de mieux l'expliquer : Exemple : On voudrait de numro de dpartement, le nom et le salaire d'un employ quitoucheplusque lamoyennedessalairesdesondpartement.C'estdire que pour un employ, on vamettre en relation grce son numro de dpartement les employsdesondpartement,puisonvacomparersonsalaireaveclamoyenne des salaires de son dpartement. Select nodep, nomemp, sala From EMPLOYE X Where sala > (Select AVG (sala) From EMPLOYE Where X.nodep = nodep ) ; Requtes quantifies Onpeututiliserdesrequtesquantifiesdanslecasol'onaunerequte imbrique.Unerequteimbrique,ousous-requte,renvoiedesvaleursetpour filtrer ces valeurs on utilisera des oprateurs ; on parlera alors de requte quantifie. ParmicesoprateursonaANY,ALLetEXIST.Ilestpossibleaussiderajouter cette liste l'oprateur IN mais comme on peut aussi l'utiliser dans des requtes sans requtes imbriques nous avons prfr le dfinir en tant que simple oprateur. Voici l'explicatif de ces oprateurs : ANY:Laconditionexpression>(ou(ou all (Select sala From EMPLOYES Where nodep = 30); Onobtientdonclatable :Lesalairelepluslevdudpartement30estceluide Perrin qui est de 200000. Donc seul Trousselier et Challal ont un salaire suprieur. salairefonctionnoempnodep 250000IngnieurTrousselier40 210000IngnieurChallal50 Exemple2:Onveutlesalaire,lafonction,lenometlendedpartementdes employs qui ont un salaire suprieur au moins une personne du dpartement 30. Select sala, fonction, nomemp, nodep From EMPLOYES Where sala > any (Select sala Wided BOUCHELLIGUA 2007/2008 ISIMG- 32 -Base de donnes II From EMPLOYES Where nodep = 30); On obtient donc : salafonctionnomempnodep 150000ProgrammeurLegros60 200000IngnieurPerrin30 145000OuvrierSmith30 250000IngnieurTrousselier40 210000IngnieurChallal50 Le salaire minimum dans le dpartement 30 est de 140000 donc tous les employs quiontunsalairestrictementsuprieur140000sontslectionnmmesiilsfont partis du dpartement 30. Exemple 3 : On voudrait la fonction, le n, le nom d'employ et le n de dpartement des employs qui sont responsables.On garde la mme table des employs que prcdemment. Select fonction, noemp, nomemp, nodep From EMPLOYES R Where EXISTS (Select * From EMPLOYES Where R.noemp = noresp ) ; Voil le rsultat : fonctionnoempnomempnodep Programmeur01Legros 60 Ingnieur02Perrin30 Ingnieur08Trousselier40 Oprations ensemblistes Les oprations ensemblistes s'utilisent pour crer une relation, une opration entre 2 requtes. On les utilise entre 2 clauses select. En gros avec les rsultats des deux requtes on les met en relations grce l'oprateur ensembliste. Comme oprateurs on a : Wided BOUCHELLIGUA 2007/2008 ISIMG- 33 -Base de donnes II UNIONsertrunirlesn-upletsslectionnsparlesrequtes.Pardfautcet oprateursupprimelesredondances(doubles).Pourpouvoirgarder les doubleson utilise UNION ALL. Exemple:onveutlesemploysquisontouvriersouceuxquiappartiennentau dpartement 30. Select noemp From EMPLOYES Where Fonction = " ouvrier "UNION Select noemp From EMPLOYES Where noemp = 30; NB: On pourra remarquer qu'ici l'UNION n'tait pas vraiment indispensable. INTERSECTpermetderenvoyertoutesleslignescommunesauxrequtes.Les deuxtablesqui reprsentent les oprandes directsdeINTERSECTdoiventavoir le mmenombredecolonnes,etlescolonnes correspondantesdoiventtredetypes donne compatibles. On l'utilise de la mme faon que UNION. EXEPT permet de renvoyer les lignes du haut de la requte qui ne sont pas dans le basdelarequte.Lesdeuxtablesquireprsententlesoprandesdirectsde EXCEPTdoiventavoirlemmenombredecolonnes,etlescolonnes correspondantesdoiventtredetypesdonnecorrespondantes.Onl'utilisedela mme faon que UNION. Exemple : On souhaite avoir la liste des employs qui sont ouvriers mais qui ne font pas partis du dpartement 30. Select noemp From EMPLOYES Where Fonction = " ouvrier "EXEPT Select noemp From EMPLOYES Where noemp = 30 ; Wided BOUCHELLIGUA 2007/2008 ISIMG- 34 -Base de donnes II Chapitre III Le Contrle de donnes sur Oracle I.Introduction Le SGBD Oracle sur le serveur (version serveur) -Oracle entreprise -Oracle workgroupserver Dansunsystmehtrogneoontrouveplusieurstypesdemachinelaversion Oracle entreprise serait plus adquate entreprise serait plus adquate pour grer ce systme diversifi. Sur les postes client on trouve linterface SQL / plus et le module de connexion SQL / net Sur le march ces outils se prsente avec Oracle client ; Aveccesoutilsclientonpeutseconnectersurlabasededonnestockesurle serveur et manipuler ses donnes moyennant les droits daccs. II.Opration de DBA DBA : Data Base Administration, Surleserveur,onvacrerlabasededonnescomportant :tables,vue,cluster, trigger,index,.Labasededonneappartientsoncrateurquidoittreune personneayantaumoinslesdroitsdeconnexionetdexploitationdesressources Oracle. Connect, ResourceCet utilisateur peut tre lui-mme un DBA. Loption Connect donne le droit de connexion et de consultation de la base. Wided BOUCHELLIGUA 2007/2008 ISIMG- 35 -Base de donnes II Loptionresource donne le droit decration, de modification et de suppression des objetsdela base.LoptionDBAdonneenplusdeuxautresoptions : lamisejour des vues (crer, supprimer, modifier). Le DBA par defaut System / manager User par defaut scott / tiger 1)Cration dun nouveau DBA grantdba to identified by 2)Cration des nouveaux utilisateurs Un DBA peut crer de nouveaux utilisateurs et il peut les retirer ou modifier leurs identits. Lors de la cration dun utilisateur on peut lui attribuer lune des option connect / resource par la commande : grant connect [resource] to identified by le DBA peut modifier lidentit dun utilisateur : grant connect to user name identified by pour retirer les droits un utilisateur on utilise la commande: revoke [option] from user name ; exempe revoke resource from scott; III.Oprations Client (utilisateur) Lecrateurde labasepeutattribuerdesdroitsdaccsetdesdroitsdemise jour sur sa base au profit des autres utilisateurs cre par le DBA. Pourattribuerdesprvilgessurlesobjetslocauxauxautresutilisateurson utilise : grant on to { , public} peut tre : -select : consultation des donnes de lobjet (table, vue, ) -insert crer des nouvelles donnes sur les tables -delete : suppression des donnes de la table -update : m. j. des donnes - alter : m. j. de la structure dune table -Index : crer de nouveaux index sur la table -All Exemple : Grant select, insert On Article to commerciale2 Wided BOUCHELLIGUA 2007/2008 ISIMG- 36 -Base de donnes II Unefoislutilisateurcommerciale2estconnectsurOracle(nom,pw)ilpeut consulter, insrer des nouveaux tuples de la table Article de lutilisateur commerciale. Commerciale 2 connect SQL > select * from commerciale.article SQL> insert into Commerciale.article value (, , ,) SQL> update Commerciale.article set pu = 6500 X opration impossible X Lepropritairedelabasepeutretirerlesprvilges,quilaattribuauxautres utilisateurs : revoke on from