+ All Categories
Home > Documents > Cours de SQL_Oracle.pdf

Cours de SQL_Oracle.pdf

Date post: 04-Oct-2015
Category:
Upload: moisendiaye245
View: 214 times
Download: 0 times
Share this document with a friend
Description:
Cours de SQL_Oracle
44
 20/2/2015 Cours de SQL/Oracle http://tcosnuau.free.fr/COURS/SQL/SQL ORA.HTM 1/44 Structured Query Language Par Th. COSNUAU  Introduction  Un modèle de données est un ensemble de concepts et de règles de composition de ces concepts permettant de décrire des données. Il existe principalement trois types de modèles : Le modèle hiérarchique Le modèle réseau Le modèle relationnel  Le modèle relationnel a été initié par CODD à IBM en 1970 mais fut surtout utilisé à partir des années 1980.  Le langage de manipulation de données relationnelles se compose d'un ensemble de commandes permettant d'interroger et de modifier une base de données. Ce " langage de requête structuré " (SQL = Structured Query Language) est une évolution (1981) du langage SEQUEL d'IBM. Il permet notamment d'exprimer de façon simple, des sélections, des projections et des jointures. On distingue trois sous ensembles : Le langage de description des données (LDD) Le langage de manipulation des données (LMD) La langage de spécification des contraintes d'intégrité (LSCI)
Transcript
  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 1/44

    StructuredQueryLanguage

    Par Th. COSNUAU

    Introduction

    Unmodlededonnesestunensembledeconceptsetderglesdecompositiondecesconceptspermettantdedcriredesdonnes.

    Ilexisteprincipalementtroistypesdemodles:

    Lemodlehirarchique

    Lemodlerseau

    Lemodlerelationnel

    LemodlerelationnelatinitiparCODDIBMen1970maisfutsurtoututilispartirdesannes1980.

    Lelangagedemanipulationdedonnesrelationnellessecomposed'unensembledecommandespermettantd'interrogeretdemodifierunebasededonnes.

    Ce " langage de requte structur " (SQL = Structured Query Language) est unevolution(1981)dulangageSEQUELd'IBM.

    Ilpermetnotammentd'exprimerdefaonsimple,desslections,desprojectionsetdesjointures.

    Ondistinguetroissousensembles:

    Lelangagededescriptiondesdonnes(LDD)

    Lelangagedemanipulationdesdonnes(LMD)

    Lalangagedespcificationdescontraintesd'intgrit(LSCI)

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 2/44

    LeSQLestunlangagedclaratifdontlasyntaxeesttrssimple(commebeaucoupdelangagesdecetype)cequipermetdeseconcentrersurleproblmersoudre.

    Tablesutilisesdanslesexemples

    LesexemplescitsdanscedocumentonttousttestssousORACLE,undessystmesdegestiondebasesdedonnesrelationnelslesplusrpandussurlemarch.

    Cesexemplessontbtissurunebasededonnescomposedesdeuxrelationssuivantes:

    EMP(NOM,NUM,FONCTION,N_SUP,EMBAUCHE,SALAIRE,COMM,N_DEPT)

    NOM NUM FONCTION N_SUP EMBAUCHE SALAIRE COMM N_DEPT

    MARTIN 16712 directeur 25717 23MAY90 40000 30

    DUPONT 17574 administratif 16712 03MAY95 9000 30

    DUPOND 26691 commercial 27047 04APR88 25000 2500 20

    LAMBERT 25012 administratif 27047 14APR91 12000 20

    JOUBERT 25717 prsident 10OCT82 50000 30

    LEBRETON 16034 commercial 27047 01JUN91 15000 0 20

    MARTIN 17147 commercial 27047 10DEC93 20000 500 20

    PAQUEL 27546 commercial 27047 03SEP83 22000 2000 20

    LEFEBVRE 25935 commercial 27047 11JAN84 23500 1500 20

    GARDARIN 15155 ingnieur 24533 22MAR85 24000 10

    SIMON 26834 ingnieur 24533 04OCT88 20000 10

    DELOBEL 16278 ingnieur 24533 16NOV94 21000 10

    ADIBA 25067 ingnieur 24533 05PCT87 30000 10

    CODD 24533 directeur 25717 12SEP75 55000 10

    LAMERE 27047 directeur 25717 07SEP89 45000 20

    BALIN 17232 administratif 24533 03OCT87 13500 10

    BARA 24831 administratif 16712 10SEP88 15000 30

    DEPT(N_DEPT,NOM,LIEU)

    N_DEPT NOM LIEU

    10 recherche Rennes

    20 vente Metz

    30 direction Gif

    40 fabrication Toulon

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 3/44

    La clause SELECT

    LacommandeSELECTconstitue,elleseule,lelangagepermettantd'interrogerunebasededonnes.Ellepermet:

    deslectionnercertainescolonnesd'unetable:c'estl'oprationdeprojectiondeslectionnercertaineslignesd'unetableenfonctiondeleurcontenu:c'estl'oprationderestrictiondecombinerdesinformationsvenantdeplusieurstables:cesontlesoprationsdejointure,union,intersection,diffrencerelationnelledecombinerentreellescesdiffrentesoprations.

    Uneinterrogation,onparlepluttderequte,estunecombinaisond'oprationsportantsurdestables(relations)etdontlersultatestluimmeunetabledontl'existenceestphmre(letempsdelarequte).

    Note:

    Onpeutintroduireuncommentairel'intrieurd'unecommandeSQLenl'encadrantpar/**/.

    Slectiondecolonnesouprojection

    LacommandeSELECTlaplussimplealasyntaxesuivante:

    SELECT*FROMnom_table;

    danslaquelle:

    nom_table:estlenomdelatablesurlaquelleportelaslection.

    *:signifiequetouteslescolonnesdelatablesontslectionnes.

    Pardfauttoutesleslignessontslectionnes.Onpeutlimiterlaslectioncertainescolonnes,enindiquantunelistedenomsdecolonneslaplacedel'astrisque.

    SELECTnom_col1,nom_col2,...FROMnom_table;

    Exemple:Donnerlenometlafonctiondechaqueemploy.

    SELECTnom,fonctionFROMemp

    LaclauseDISTINCTajoutederrirelacommandeSELECTpermetd'liminerlesduplications.

    Exemple:Quellessonttouteslesfonctionsdiffrentes.

    SELECTDISTINCTfonctionFROMemp

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 4/44

    Slectiondelignesourestriction

    LaclauseWHEREpermetdespcifierquellessontleslignesslectionner.Elleestsuivied'unprdicatquiseravalupourchaquelignedelatable.Leslignespourlesquellesleprdicatestvraiserontslectionnes.

    Lasyntaxeestlasuivante:

    SELECT*FROMnom_tableWHEREpredicat;

    Unprdicatn'estniplusnimoinsquelafaondontonexprimeuneproprit.Lesprdicats,qu'ilssoientsimplesoucomposs,sontconstituspartird'expressionsquel'oncompareentreelles.

    Expressionsimple

    Uneexpressionsimplepeuttre:

    unevariabledsigneparunnomdecolonne,uneconstante.

    Lesexpressionspeuventtredetroistypes:numrique,chanedecaractresoudate.Achacundecestypescorrespondunformatdeconstante:

    Constantenumrique

    nombrecontenantventuellementunsigne,unpointdcimaletunepuissancededix.Ex:10,2.5,1.2E10

    Constantechanedecaractres

    unechanedecaractresentreapostrophes.Ex:'MARTIN'(Attention,unelettreenmajusculesn'estpasconsidrecommegalelammelettreenminuscule).

    Constantedate

    Unechanedecaractresentreapostrophesauformatsuivant:jourmoisanneolejourestsurdeuxchiffres,lemoisestdsignparlestroispremireslettresdesonnomenanglais,l'anneestsurdeuxchiffres.Ex:'01FEB85'

    Onpeut,enSQL,exprimerdesexpressionspluscomplexesenutilisantdesoprateursetdesfonctionstudisdanslechapitreExpressionsetfonctions.

    Prdicatsimple

    Unprdicatsimpleestlersultatdelacomparaisondedeuxexpressionsaumoyend'unoprateurdecomparaisonquipeuttre:

    =gal!=diffrent

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 5/44

    >=suprieurougal

    Lestroistypesd'expressionspeuventtrecomparsaumoyendecesoprateurs:

    Pourlestypesdate,larelationd'ordreestl'ordrechronologique.Pourlestypescaractre,larelationd'ordreestl'ordrealphabtique.

    Ilfautajoutercesoprateursarithmtiquesclassiqueslesoprateurssuivants:

    expr1BETWEENexpr2ANDexpr3vraisiexpr1estcomprisentreexpr2etexpr3,bornesincluses

    expr1IN(expr2,expr3,...)vraisiexpr1estgalel'unedesexpressionsdelalisteentreparenthses

    exprLIKEchaineochaineestunechanedecaractrespouvantcontenirl'undescaractresjokers:

    _remplaceexactement1caractre%remplaceunechanedecaractresdelongueurquelconque,ycomprisdelongueurnulle.

    Exemple:Quelssontlesemploysdontlacommissionestsuprieureausalaire?

    SELECTnom,salaire,commFROMempWHEREcomm>salaire

    Exemple:Quelssontlesemploysgagnantentre20000et25000?

    SELECTnom,salaireFROMempWHEREsalaireBETWEEN20000AND25000

    Exemple:Quelssontlesemployscommerciauxouingnieurs?

    SELECTnum,nom,fonction,salaireFROMempWHEREfonctionIN('commercial','ingenieur')

    Exemple:QuelssontlesemploysdontlenomcommenceparM?

    SELECTnomFROMempWHEREnomLIKE'M%'

    Prdicatscomposs

    LesoprateurslogiquesAND(et)etOR(ouinclusif)peuventtreutilisspourcombinerentreeuxplusieursprdicats.L'oprateurNOTplacdevantunprdicateninverselesens.

    L'oprateurANDestprioritaireparrapportl'oprateurOR.Desparenthsespeuventtreutilisespourimposeruneprioritdansl'valuationduprdicat,ousimplementpourrendreplusclairel'expressionlogique.

    Exemple:Quelssontlesemploysdudpartement30ayantunsalairesuprieur25000?

    SELECTnomFROMempWHEREn_dept=30ANDsalaire>25000

    Exemple:Quelssontlesemploysdirecteurs,oucommerciauxettravaillantdansledpartement10?

    SELECTnom,fonction,salaire,n_deptFROMempWHEREfonction=

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 6/44

    'directeur'

    OR(fonction='commercial'ANDn_dept=10)

    Larequteprcdentedonneraitlemmersultatsanslesparenthses,rsultat

    diffrentdeceluiduSELECTsuivant.

    Exemple:Quelssontlesemploysdirecteursoucommerciaux,ettravaillantdansledpartement10?

    SELECTnum,nom,fonction,n_deptFROMempWHERE(fonction='directeur'ORfonction='commercial')ANDn_dept=10

    ValeursNULL

    PourSQL,unevaleurNULLestunevaleurnondfinie.Ilestpossibled'ajouteruneligneunetablesansspcifierdevaleurpourlescolonnesnonobligatoires:cescolonnesabsentesaurontlavaleurNULL.

    ParexemplelesemploysdontlarmunrationneprendpasencomptedecommissionaurontunevaleurNULL,c'estdireindfinie,commecommission.

    L'oprateurISNULLpermetdetesterlavaleurNULL:leprdicatexprISNULLestvraisil'expressionalavaleurNULL(c'estdiresielleestindfinie).

    Exemple:QuelssontlesemploysdontlacommissionalavaleurNULL?

    SELECTnomFROMempWHEREcommISNULL

    L'oprateurISNOTNULLpermetdeconstruireunprdicatvraisilavaleurn'estpasNULL(etdoncleprdicatexprISNOTNULLestvraisiexprestdfinie)

    Remarques

    LavaleurNULLestdiffrentedelavaleurzroqui,elle,quiestunevaleur

    biendfinie.

    Leprdicatexpr=NULLesttoujoursfaux,etnepermetdoncpasdetestersi

    l'expressionalavaleurNULL.

    UneexpressiondelaformeNULL+valdonneNULLcommersultatquelleque

    puissetrelavaleurdeval.

    Nomdecolonne

    Lescolonnesconstituantlersultatd'unSELECTpeuventtrerenommesdansleSELECT,ceciestutileenparticulierlorsquelacolonnersultatestuneexpression.Pourcela,ilsuffitdefairesuivrel'expressiondfinissantlacolonned'unnom,selonlesrglessuivantes:

    lenom(30caractresmaximum)estinsrderrirel'expressiondfinissant

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 7/44

    lacolonne,spardecettedernireparunespace.

    silenomcontientdessparateurs(espace,caractrespcial),ous'ilest

    identiqueunmotcldeSQL(ex:DATE),ildoittremisentreguillemets

    "".

    Cenomestceluisouslequellacolonneseraconnuedesinterfacesexternes.SousSQLPLUS,parexemple,ilconstitueraletitrepardfautdelacolonne,etserviraderfrencepourdfinirunformatpourlacolonne.

    Exemple:Salairedechaqueemploy.

    SELECTnom,salaire"SALAIREMENSUEL"FROMemp

    Remarque:Attention,cenomn'estpasconnul'intrieurduSELECT.

    Classerlersultatd'uneinterrogation

    Leslignesconstituantlersultatd'unSELECTsontobtenuesdansunordreindtermin.Onpeut,dansunSELECT,demanderquelersultatsoitclassdansunordreascendantoudescendant,enfonctionducontenud'uneouplusieurscolonnes(jusqu'16critresdeclassementpossibles).LescritresdeclassementsontspcifisdansuneclauseORDERBYdontlasyntaxeestlasuivante:

    ORDERBY{nom_col1|num_col1[DESC][,nom_col2|num_col2[DESC],...]}

    Leclassementsefaitd'abordselonlapremirecolonnespcifiedansl'ORDERBYpuisleslignesayantlammevaleurdanslapremirecolonnesontclassesselonladeuximecolonnedel'ORDERBY,etc...Pourchaquecolonne,leclassementpeuttreascendant(pardfaut)oudescendant(DESC).L'ORDERBYpeutfairerfrenceunecolonneparsonnomouparsapositiondans

    lalistedescolonnesprsentesderrireleSELECT(lapremirecolonneslectionnealenumro1,ladeuximealenumro2,...).

    Exemple:Donnertouslesemploysclasssparfonction,etpourchaquefonctionclasssparsalairedcroissant

    SELECTnom,fonction,salaireFROMempORDERBYfonction,salaireDESC

    Remarque:DansunclassementlesvaleursNULLsonttoujoursenttequelquesoitl'ordreduclassement(ascendantoudescendant).

    SyntaxeduSelect

    SELECT[DISTINCT|ALL]{*|{[schema.]{table|view|snapshot}.*|expr[c_alias][,{[schema.]{table|view|snapshot}.*|expr[c_alias]}]...}FROM[schema.]{table|view|snapshot}[t_alias][,[schema.]{table|view|snapshot}[t_alias]]...

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 8/44

    [WHEREcondition][[STARTWITHcondition]CONNECTBYcondition][GROUPBYexpr[,expr]...[HAVINGcondition]][{UNION|UNIONALL|INTERSECT|MINUS}SELECTcommand][ORDERBY{expr|position}[ASC|DESC][,{expr|position}[ASC|DESC]]...][FORUPDATE[OF[[schema.]{table|view}.]column[,[[schema.]{table|view}.]column]...][NOWAIT]]

    DISTINCT

    renvoietoutesleslignesslectionnesenenlevantlesdoublons.

    ALL

    renvoietoutesleslignesslectionnessansenleverlesdoublons.C'estlavaleurpardfaut.

    *

    renvoietouteslescolonnesdetouteslestables,lesvuesetlesclichsprcissdansleFROM.

    table.*,view.*,snapshot.*

    slectionnetouteslescolonnesdelatable,delavueouduclichprcis.

    expr

    slectionneuneexpressionhabituellementcalculesurlesvaleursdescolonnesappartenantl'unedestables,vues,ouclichsdelaclauseFROM.

    c_alias

    lachanedecaractresquisertd'enttelacolonne(pardfautexpr)

    schema

    estlenomduschmacontenantlestables,vuesouclichsslectionns.Leschmapardfautestceluidel'utilisateurquiexcutelarequte.

    table,view,snapshot

    estlenomdelatable,delavueouduclichcontenantlesdonnesslectionnes.

    t_alias

    synonymepourlatabledontlenomprcde,utiliserdanslerestedelarequte.

    WHERE

    restreintleslignesslectionnescellespourlesquelleslaconditionestvraie.Sicetteclauseestomise,toutesleslignesdestables,vuesouclichsprcissderrireleFROMsontrenvoyes.

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 9/44

    STARTWITH,CONNECTBY

    renvoieleslignesenparcourantunearborescence.

    GROUPBY

    groupeleslignesslectionnesensebasantsurlavaleurdeexprpourchaqueligneetrenvoieuneseulelignepargroupe.

    HAVING

    restreintlesgroupesdelignesrenvoysceuxpourlesquelslaconditionspcifieestvraie.Sanscetteclause,touslesgroupessontrenvoys.

    UNION,UNIONALL,INTERSECT,MINUS

    CombineleslignesretournespardeuxSELECTenutilisantuneoprationensembliste.

    ORDERBY

    ordonneleslignesslectionnes:expr

    enutilisantlavaleurdeexpr.CetteexpressionestbasesurdescolonnesprcisesderrireleSELECTousurdescolonnesappartenantdestables,vuesouclichsprsentsderrireleFROM.

    positiondonnelenumrodelacolonnedansl'ordreduSELECT.

    ASC,DESCmodeascendantoudescendant.LavaleurpardfautASC.

    FORUPDATE

    "locke"leslignesslectionnes.

    NOWAIT

    retournelecontrolel'utilisateursilacommandeSELECTessayedebloquerunetableutiliseparunautreutilisateur.

    Prrequis

    Pourpouvoirslectionnerdeslignesd'unobjet(table,vue,clich)ilfautsoittrepropritairedecetobjet,soitavoirleprivilgeSELECTsurcetobjet.

    LeprivilgeSELECTANYTABLEpermetdeslectionnerdeslignesden'importequelobjetappartenantn'importequelutilisateur.

    Les jointures

    Lajointureestuneoprationpermettantdecombinerdesinformationsvenantde

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 10/44

    plusieurstables.Lesexemplessuivantsselimiterontdeuxtables,maisonpeutjoindrejusqu'256tables.UnejointureseformulesimplementenspcifiantplusieurstablesderrireleFROMdelafaonsuivante:

    SELECT...FROMnom_table1,nom_table2...WHEREpredicat;

    Sionneprcisepasdeconditiondeslection,lersultatobtenuseraleproduitcartsiendestablesprsentesderrireleFROM(rsultatnonsouhaitengnral).

    Iln'existepasd'associationsimplicitesouexplicitesentrelestablesdansSQL.Lesassociationsentrelestablessontdfiniesdynamiquementlorsdesinterrogations,cequicontribuelagrandesouplessedulangagesqletrendpossibletouteassociationmmesiellen'apastprvuelorsdeladfinitionetduchargementdelabase.

    Equijointure

    Lerapprochementdechaquelignedelatableempaveclalignedelatabledeptayantmmenumrodedpartementpermetd'obtenirlalistedesemploysaveclalocalitdanslaquelleilstravaillent.Cerapprochemententredeuxcolonnesappartenantdeuxtablesdiffrentesmaisayantlemmesens(icilenumrodedpartement)etvenantvraisemblablementd'unerelation1nlorsdelaconception(ici1entitdpartementpournentitsemploys)estasseznaturel.C'estpourquoicetypedejointureportelenomdejointurenaturelleoud'quijointure.

    Exemple:Donnerpourchaqueemploysonnometsonlieudetravail.

    SELECTemp.nom,lieuFROMemp,deptWHEREemp.n_dept=dept.n_dept

    Lefaitquelacolonnecontenantlenumrodedpartementaitlemmenomdanslesdeuxtablesarenduncessaireleprfixageparlenomdetabledanslecritredejointure(clauseWHERE).Lenomdecolonnenomaluiaussibesoind'treprfixcarilappartientauxdeuxtables(nomdelapersonnedansl'uneetnomdudpartementdansl'autre).Parcontrelenomdecolonnelieun'apasbesoind'treprfixcariln'yapasd'ambigutsurlatablelaquellecettecolonneappartient.

    Jointured'unetableellemme

    Ilpeuttreutilederassemblerdesinformationsvenantd'uneligned'unetableavecdesinformationsvenantd'uneautrelignedelammetable.

    Exemple:Donnerpourchaqueemploylenomdesonsuprieurhirarchique.

    SELECTemp.nom,mgr.nomFROMemp,empmgrWHEREemp.n_sup=mgr.num

    Remarque:Danscecas,ilfautimprativementrenommeraumoinsl'unedesdeuxoccurencesdelatable(iciemp)enluidonnantunsynonyme,afindepouvoirprfixersansambiguitchaquenomdecolonne.

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 11/44

    Autresjointures

    Lecritred'galitestlecritredejointureleplusnaturel.Maisonpeututiliserd'autrestypesdecomparaisonscommecritresdejointures.

    Exemple:QuelssontlesemploysgagnantplusqueSIMON?

    SELECTemp.nom,emp.salaire,emp.fonctionFROMemp,empjWHEREemp.salaire>j.salaireANDJ.nom='SIMON'

    Jointureexterne

    Lorsqu'uneligned'unetablefigurantdansunejointuren'apasdecorrespondantdanslesautrestables,ellenesatisfaitpasaucritred'quijointureetdoncnefigurepasdanslersultatdelajointure.Uneoptionpermetdefairefigurerdanslersultatleslignessatisfaisantlaconditiond'quijointurepluscellesn'ayantpasdecorrespondant.Cetteoptions'obtientenaccolant(+)aunomdecolonnedelatabledanslaquellemanquentdeslments,danslaconditiond'quijointure.

    Exemple:Ledpartement40nefiguraitpasdanslersultatduSELECTprcdent.Parcontre,ilfigureradanslersultatduSELECTsuivant.

    SELECTemp.nom,lieuFROMemp,deptWHEREemp.n_dept(+)=dept.n_dept

    Le(+)peuts'interprtercommel'ajoutd'unelignefictivedonttouteslescolonnesontlavaleurNULL,etquiraliselacorrespondanceavecleslignesdel'autretablequin'ontpasdecorrespondantrel.Dansl'exemplecidessus,lavaleurdenomassocieaudpartement40estlavaleurNULL.

    Exemple:Retrouverlesdpartementsn'ayantaucunemploy.

    SELECTdept.n_dept,emp.nomFROMemp,deptWHEREdept.n_dept=emp.n_dept(+)ANDemp.nomISNULL

    Les oprateurs ensemblistes

    Lesoprateursensemblistespermettentde"joindre"destablesverticalementc'estdiredecombinerdansunrsultatuniquedeslignesprovenantdedeuxinterrogations.Leslignespeuventvenirdetablesdiffrentesmaisaprsprojectionondoitobtenirdestablesayantmmeschmaderelation.

    Lesoprateursensemblistessontlessuivants:

    l'union:UNION

    l'intersection:INTERSECT

    ladiffrencerelationnelle:MINUS

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 12/44

    Lasyntaxed'utilisationestlammepourcestroisoprateurs:

    SELECT...{UNION|INTERSECT|MINUS}SELECT...

    Dansunerequteutilisantdesoprateursensemblistes:

    TouslesSELECTdoiventavoirlemmenombredecolonnesslectionnes,etleurtypesdoiventtreununidentiques.Lesconversionsventuelles

    doiventtrefaitesl'intrieurduSELECTl'aidedesfonctionsdeconversion.

    Lesdoublessontlimins(DISTINCTimplicite).

    Lesnomsdecolonnes(titres)sontceuxdupremierSELECT.LalargeurdescolonnesestlaplusgrandeparmitouslesSELECT.Dansunerequteonnepeuttrouverqu'unseulORDERBY.S'ilestprsent,il

    doittremisdansledernierSELECTetilnepeutfairerfrencequ'auxnumrosdescolonnesetnonpasleursnoms(carlesnomspeuventtre

    diffrentsdanschacunedesinterrogations).

    OnpeutcombinerlersultatdeplusdedeuxSELECTaumoyendesoprateursUNION,INTERSECT,MINUS.

    SELECT...UNIONSELECT...MINUSSELECT...

    Danscecasl'expressionestvaluedegauchedroite,maisonpeutmodifierl'ordred'valuationenutilisantdesparenthses.

    SELECT...UNION(SELECT...MINUSSELECT...)

    Les sous-interrogations (Imbrications & Corrlations)

    UnecaractristiquepuissantedeSQLestlapossibilitqu'uncritrederechercheemploydansuneclauseWHERE(expressiondroited'unoprateurdecomparaison)soitluimmelersultatd'unSELECTc'estcequ'onappelleunesousinterrogation.

    Sousinterrogationramenantuneseulevaleur

    Exemple:QuelssontlesemploysayantlammefonctionqueCODD?

    SELECTnomFROMempWHEREfonction=(SELECTfonctionFROMempWHEREnom='CODD')

    Remarques

    unesousinterrogationquineramneaucunelignesetermineavecuncoded'erreur.unesousinterrogationramenantplusieurslignesprovoqueraaussi,dansce

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 13/44

    cas,uneerreur(pourtraitercorrectementcecas,voirparagraphecidessous)

    Sousinterrogationramenantplusieurslignes

    Unesousinterrogationpeutramenerplusieurslignesconditionquel'oprateurdecomparaisonadmettesadroiteunensembledevaleurs.Lesoprateurspermettantdecomparerunevaleurunensembledevaleurssont:

    l'oprateurIN

    lesoprateursobtenusenajoutantANYouALLlasuited'unoprateurde

    comparaisonclassique(=,!=,>,>=,ALL(SELECTsalaireFROMempWHEREn_dept=20)

    Sousinterrogationramenantplusieurscolonnes

    Ilestpossibledecomparerlersultatd'unSELECTramenantplusieurscolonnesunelistedecolonnes.Lalistedecolonnesfigureraentreparenthsesgauchedel'oprateurdecomparaison.

    Exemple:QuelssontlesemploysayantmmefonctionetmmesuprieurqueCODD?

    SELECTnom,fonction,n_supFROMempWHERE(fonction,n_sup)=(SELECTfonction,n_supFROMempWHEREnom='CODD')

    Sousinterrogationsynchroniseavecl'interrogationprincipale

    Danslesexemplesprcdents,lasousinterrogationtaitvalued'abord,puislersultatpouvaittreutilispourexcuterl'interrogationprincipale.SQLsaitgalementtraiterunesousinterrogationfaisantrfrenceunecolonnedelatabledel'interrogationprincipale.Letraitementdanscecasestpluscomplexecarilfautvaluerlasousinterrogationpourchaquelignedel'interrogationprincipale.

    Exemple:Quelssontlesemploysnetravaillantpasdanslemmedpartementqueleursuprieurhirarchique.

    SELECTnomFROMempeWHEREn_dept!=(SELECTn_deptFROMempWHEREe.n_sup=num)ANDn_supISNOTNULL

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 14/44

    Ilafalluicirenommerlatableempdel'interrogationprincipalepourpouvoirlarfrencerdanslasousinterrogation.n_supISNOTNULLestncessairecardanslecasdeJOUBERTlacolonnen_supestNULLetlasousrequteneramnealorsaucunevaleur.

    Sousinterrogationramenantaumoinsuneligne

    L'oprateurEXISTSpermetdeconstruireunprdicatvraisilasousinterrogationquisuitramneaumoinsuneligne.

    Exemple:Quelssontlesemploystravaillantdansundpartementquiaprocddesembauchesdepuisledbutdel'anne94.

    SELECT*FROMempeWHEREEXISTS(SELECT*FROMempWHEREembauche>='01jan94'ANDn_dept=e.n_dept)

    Remarque:Onpeutinverserlesensdel'oprateurEXISTSenlefaisantprcderdeNOT.

    Sousinterrogationsmultiples

    UnSELECTpeutcomporterplusieurssousinterrogations,soitimbriques,soitaummeniveaudansdiffrentsprdicatscombinspardesANDoudesOR.

    Exemple:Listedesemploysdudpartement10ayantmmefonctionquequelqu'undudpartementdeDUPONT.

    SELECTnom,fonctionFROMempWHEREn_dept=10ANDfonctionIN(SELECTfonctionFROMempWHEREn_dept=(SELECTn_deptFROMempWHEREnom='DUPONT'))

    Expressions et Fonctions simples

    Uneexpressionestunensembledevariables(contenud'unecolonne),deconstantesetdefonctionscombinesaumoyend'oprateurs.Lesfonctionsprennentunevaleurdpendantdeleursargumentsquipeuventtreeuxmmesdesexpressions.

    Lesexpressionspeuventfigurer:

    entantquecolonnersultatd'unSELECT,dansuneclauseWHERE,

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 15/44

    dansuneclauseORDERBY.

    Ilexistetroistypesd'expressionscorrespondantchacununtypededonnesdeSQL:arithmtique,chanedecaractre,date.Achaquetypecorrespondentdesoprateursetdesfonctionsspcifiques.

    SQLautoriselesmlangesdetypesdanslesexpressionseteffectueralesconversionsncessaires:dansuneexpressionmlangeantdatesetchanesdecaractres,leschanesdecaractresserontconvertiesendates,dansuneexpressionmlangeantnombresetchanesdecaractres,leschanesdecaractresserontconvertiesennombre.

    Expressionsetfonctionsarithmtiques

    Uneexpressionarithmtiquepeutcontenir:

    desnomsdecolonnesdesconstantesdesfonctionsarithmtiques

    combinsaumoyendesoprateursarithmtiques.

    Oprateursarithmtiques

    Lesoprateursarithmtiquesprsentsdanssqlsontlessuivants:

    +additionou+unairesoustractionouunaire*multiplication/division

    Remarque:ladivisionpar0provoqueunefinaveccoded'erreur.

    Prioritdesoprateurs

    Uneexpressionarithmtiquepeutcomporterplusieursoprateurs.Danscecas,lersultatdel'expressionpeutvarierselonl'ordredanslequelsonteffectueslesoprations.Lesoprateursdemultiplicationetdedivisionsontprioritairesparrapportauxoprateursd'additionetdesoustraction.Desparenthsespeuventtreutilisespourforcerl'valuationdel'expressiondansunordrediffrentdeceluidcoulantdelaprioritdesoprateurs.

    Exemple:Donnerpourchaquecommercialsonrevenu(salaire+commission).

    SELECTnom,salaire+commFROMempWHEREfonction='commercial'

    Exemple:Donnerlalistedescommerciauxclasseparcommissionsursalairedcroissant.

    SELECTnom,comm/salaire,comm,salaireFROMempWHEREfonction='commercial'ORDERBYcomm/salaireDESC

    Exemple:Donnerlalistedesemploysdontlacommissionestinfrieure5%dusalaire.

    SELECTnom,salaire,commFROMempWHEREcomm

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 16/44

    Fonctionsarithmtiques

    Dansceparagraphe,onttregroupeslesfonctionsayantunouplusieursnombrescommearguments,etrenvoyantunevaleurnumrique.[ROUND(n,m)]

    ABS(nb)

    Renvoielavaleurabsoluedenb.

    CEIL(nb)

    Renvoielepluspetitentiersuprieurougalnb.

    COS(n)

    Renvoielecosinusden,ntantunangleexprimenradians.

    COSH(n)

    Renvoielecosinushyperboliqueden.

    EXP(n)

    Renvoieepuissancen.

    FLOOR(nb)

    Renvoieleplusgrandentierinfrieurougalnb.

    LN(n)

    Renvoielelogarithmenpriendenquidoittreunentierstrictementpositif.

    LOG(m,n)

    Renvoielelogarithmeenbasemden.mdoittreunentierstrictementsuprieur1,etnunentierstrictementpositif.

    MOD(m,n)

    Renvoielerestedeladivisionentiredemparn,sinvaut0alorsrenvoiem.Attention,utiliseavecaumoinsundesesargumentsngatifs,cettefonctiondonnedesrsultatsquipeuventtrediffrentsd'unmoduloclassique.Cettefonctionnedonnepastoujoursunrsultatdontlesignedudiviseur.

    POWER(m,n)

    Renvoiempuissancen,metnpeuventtredesnombresquelconquesentiersourelsmaissimestngatifndoittreunentier.

    ROUND(n[,m])

    Simestpositif,renvoienarrondi(etnonpastronqu)mchiffresaprslavirgule.Simestngatif,renvoienarrondimchiffresavantla

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 17/44

    virgule.mdoittreunentieretilvaut0pardfaut.

    SIGN(nb)

    Renvoie1sinbestngatif,0sinbestnul,1sinbestpositif.

    SIN(n)

    Renvoielesinusden,ntantunangleexprimenradians.

    SINH(n)

    Renvoielesinushyperboliqueden.

    SQRT(nb)

    Renvoielaracinecarredenbquidoittreunentierpositifounul.

    TAN(n)

    Renvoielatangenteden,ntantunangleexprimenradians.

    TANH(n)

    Renvoielatangentehyperboliqueden.

    TRUNC(n[,m])

    Simestpositif,renvoienarronditronqumchiffresaprslavirgule.Simestngatif,renvoientronqumchiffresavantlavirgule.mdoittreunentieretilvaut0pardfaut.

    Exemple:Donnerpourchaqueemploysonsalairejournalier.

    SELECTnom,ROUND(salaire/22,2)FROMemp

    Expressionsetfonctionssurleschanesdecaractres

    Oprateursurleschanesdecaractres

    Ilexisteunseuloprateursurleschanesdecaractres:laconcatnation.Cetoprateursenoteaumoyendedeuxcaractres|(barreverticale)accols.Lersultatd'uneconcatnationestunechanedecaractresobtenueencrivantd'abordlachanegauchede||puiscelledroitede||.

    SELECTnom||'/'||fonctionFROMemp

    Fonctionssurleschanesdecaractres

    Leparagraphesuivantcontientlesfonctionstravaillantsurleschanesdecaractresetrenvoyantdeschanesdecaractres.

    CONCAT(chane1,chane2)

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 18/44

    Renvoielachaneobtenueenconcatnantchane1chane2.Cettefonctionestquivalentel'oprateurdeconcatnation||.

    INITCAP(chane)

    Renvoiechaneenayantmislapremirelettredechaquemotenmajusculeettouteslesautresenminuscule.Lessparateursdemotssontlesespacesetlescaractresnonalphanumriques.

    LOWER(chane)

    Renvoiechaneenayantmistoutesseslettresenminuscules.

    LPAD(chane,long,[char])

    Renvoielachaneobtenueencompltant,ouentronquant,chanepourqu'elleaitcommelongueurlongenajoutantventuellementgauchelecaractre(oulachanedecaractres)char.Lavaleurpardfautdecharestunespace.

    LTRIM(chane[,ens])

    Renvoielachaneobtenueenparcourantpartirdelagauchechaneetensupprimanttouslescaractresquisontdansens.Ons'arrtequandontrouveuncaractrequin'estpasdansens.Lavaleurdedefautdeensestunespace.

    REPLACE(chaine,avant,aprs

    Renvoiechainedanslaquelletouteslesoccurrencesdelachanedecaractresavantonttremplacsparlachanedecaractresaprs.

    RPAD(chane,n,[char])

    Renvoielachaneobtenueencompltant,ouentronquant,chanepourqu'elleaitcommelongueurlongenajoutantventuellementdroitelecaractre(oulachanedecaractres)char.Lavaleurpardfautdecharestunespace.

    RTRIM(chane[,ens])

    Renvoielachaneobtenueenparcourantpartirdeladroitechaneetensupprimanttouslescaractresquisontdansens.Ons'arrtequandontrouveuncaractrequin'estpasdansens.Lavaleurdedefautdeensestunespace.

    SOUNDEX(chane)

    Renvoielachanedecaratresconstituedelareprsentationphontiquedesmotsdechane.

    SUBSTR(chane,m[,n])

    Renvoielapartiedechanecommenantaucaractremetayantunelongueurden.

    TRANSLATE(chane,avant,aprs)

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 19/44

    Renvoieunechanedecaractresenremplaantchaquecaractredechaneprsentdansavantparlecaractresitulammepositiondansaprs.Lescaractresdechanenonprsentsdansavantnesontpasmodifis.avantpeutcontenirplusdecaractresqueaprs,danscecaslescaractresdeavantsanscorrespondantsdansaprsserontsupprimsdechane.

    UPPER(chane)

    Renvoiechaneenayantmistoutesseslettresenmajuscules.

    Leparagraphesuivantcontientlesfonctionstravaillantsurleschanesdecaractresetrenvoyantdesentiers.

    INSTR(chane,souschane,debut,occ)

    Renvoielapositiondupremiercaractredechanecorrespondantl'occurrenceoccdesouschaneencommenantlarecherchelapositiondbut.

    LENGTH(chane)

    Renvoielalongueurdechane,exprimeennombredecaractres.

    Expressionsetfonctionssurlesdates

    Oprateurssurlesdates

    Aumoyendesoprateursarithmtiques+etilestpossibledeconstruirelesexpressionssuivantes:

    date+/nombre:leresultatestunedateobtenueenajoutantlenombrede

    joursnombreladatedate.

    date2date1:leresultatestlenombredejoursentrelesdeuxdates.

    Fonctionssurlesdates

    ADD_MONTHS(date,n)

    Renvoieladateobtenueenajoutantnmoisdate.npeuttreunentierquelconque.Silemoisobtenuamoinsdejoursquelejourdedate,lejourobtenuestledernierdumois.

    LAST_DAY(date)

    Renvoieladatedudernierjourdumoisdedate.

    MONTHS_BETWEEN(date2,date1)

    Renvoielenombredemoisentredate2etdate1,sidate2estaprsdate1lersultatestpositif,sinonlersultatestngatif.Silesjoursdate2etdate1sontlesmmes,ousicesontlesderniersjoursdumois,lersultatestunentier.Lapartiefractionnaireestcalculeenconsidrantchaquejourcomme1/31medemois

    NEXT_DAY(date,nom_du_jour)

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 20/44

    Renvoieladateduprochainjourdelasemainedontlenomestnom_de_jour.

    ROUND(date[,prcision])

    Renvoiedatearrondiel'unitspcifiedansprcision.L'unitdeprcisionestindiqueenutilisantundesmasquesdemiseenformedeladate.Onpeutainsiarrondirunedatel'anne,aumois,laminute,...Pardfautlaprcisionestlejour.

    SYSDATE

    Renvoieladateetl'heurecourantesdusystmed'exploitationhote.

    TRUNC(date[,prcision])

    Renvoiedatetronquel'unitspcifiedansprcision.LesparamtressontanaloguesceuxdelafonctionROUND.

    Exemple:Donnerladatedulundisuivantl'embauchedechaqueemploy.

    SELECTNEXT_DAY(embauche,'MONDAY')FROMemp

    Exemple:Donnerladated'embauchedechaqueemployarrondiel'anne

    SELECTROUND(embauche,'Y')FROMemp

    Exemple:Donnerpourchaqueemploylenombredejoursdepuissonembauche.

    SELECTROUND(SYSDATEembauche)FROMemp

    Fonctionsdeconversion

    ASCII(chane)

    Renvoielenombrecorrespondantaucodeasciidupremiercaractredechaine.

    CHR(nombre)

    Renvoielecaractredontnombreestlecodeascii.

    TO_CHAR(nombre,format)

    Renvoielachanedecaratresenobtenueenconvertissantnombreenfonctiondeformat.Formatestunechanedecaractrespouvantcontenirlescaractressuivants:

    9reprsenteunchiffre(nonreprsentsinonsignificatif)

    0reprsenteunchiffre(reprsentmmesinonsignificatif)

    .pointdcimalapparent

    Vdfinitlapositiondupointdcimalnonapparent

    ,unevirguleapparatracetendroit

    $

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 21/44

    un$prcderalepremierchiffresignificatifB

    lenombreserareprsentpardesblancss'ilvaut0EEEE

    lenombreserareprsentavecunexposant(lespcifieravantMIouPR)MI

    lesignengatifseradroitePR

    unnombrengatifseraentre

    TO_CHAR(date,format)

    Renvoieconversiond'unedateenchanedecaractres.Leformatindiquequellepartiedeladatedoitapparatre,c'estunecombinaisondescodessuivants:

    sccsicleavecsigne

    ccsicle

    sy,yyyanne(avecsigneetvirgule)

    y,yyyanne(avecvirgule)

    yyyyanne

    yyy3dernierschiffresdel'anne

    yy2dernierschiffresdel'anne

    ydernierchiffredel'anne

    qnumrodutrimestredansl'anne

    wwnumrodelasemainedansl'anne

    wnumrodelasemainedanslemois

    mmnumrodumois

    dddnumrodujourdansl'anne

    ddnumrodujourdanslemois

    dnumrodujourdanslasemaine

    hhouhh12heure(sur12heures)

    hh24heuresur24heures

    miminutes

    sssecondes

    ssssssecondesaprsminuit

    jjourducalendrierjulien

    Lesformatssuivantspermettentd'obtenirdesdatesenlettres(enanglais):

    syearouyear

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 22/44

    anneentouteslettresmonth

    nomdumoismon

    nomdumoisabrgsur3lettresday

    nomdujourdy

    nomdujourabrgsur3lettresamoupm

    indicationamoupmbcouad

    indicationavantouaprsJsusChrist

    Lessuffixessuivantsmodifientlaprsentationdunombreauquelilssontaccols:

    thajoutdusuffixeordinatst,nd,rd,th

    spnombreentouteslettres

    Toutcaractrespcialinsrdansleformatserareproduittelqueldanslachanedecaractresrsultat.

    TO_DATE(chane,format)

    Permetdeconvertirunechanedecaractresendonnedetypedate.LeformatestidentiqueceluidelafonctionTO_CHAR.

    TO_NUMBER(chane)

    Convertitchaneensavaleurnumrique.

    Remarque:Onpeutgalementinsrerdansleformatunechanedecaractresquelconque,conditiondelaplacerentreguillemets"".

    Exemple:

    SELECTTO_CHAR(embauche,'DD/MM/YYHH24:MI:SS')FROMemp

    Exemple:DonnerlalistedetouslesemploysdontlenomressembleDUPONT.

    SELECTnomFROMempWHERESOUNDEX(nom)=SOUNDEX('DUPONT')

    Exemple:Donnerlalistedetouslesnomsdesemploysenayantsupprimtousles'L'etles'E'enttedesnoms.

    SELECTLTRIM(nom,'LE')FROMemp

    Exemple:DonnerlalistedetouslesnomsdesemploysenayantremplaclesAetlesMpardes*danslesnoms.

    SELECTTRANSLATE(nom,'AM','**')FROMemp

    Exemple:Affichertouslessalairesavecun$entteetaumoinstroischiffres

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 23/44

    (dontdeuxdcimales).

    SELECTTO_CHAR(salaire,'99900.00')FROMemp

    Autresfonctions

    GREATEST(expr1,expr2,...)

    Renvoielaplusgrandedesvaleursexpr1,expr2,....Touteslesexpressionssontconvertiesauformatdeexpr1avantcomparaison.

    LEAST

    Renvoielapluspetitedesvaleursexpr1,expr2,....Touteslesexpressionssontconvertiesauformatdeexpr1avantcomparaison.

    NVL(expr_1,expr_2)

    Prendlavaleurexpr_1,saufsiexpr_1estNULLauquelcasNVLprendlavaleurexpr_2.UnevaleurNULLenSQLestunevaleurnondfinie.Lorsquel'undestermesd'uneexpressionalavaleurNULL,l'expressionentireprendlavaleurNULL.D'autrepart,unprdicatcomportantunecomparaisonavecuneexpressionayantlavaleurNULLprendratoujourslavaleurfaux.LafonctionNVLpermetderemplacerunevaleurNULLparunevaleursignificative.

    DECODE(crit,val_1,res_1[,val_2,res_2...],def)

    Cettefonctionpermetdechoisirunevaleurparmiunelisted'expressions,enfonctiondelavaleurpriseparuneexpressionservantdecritredeslection.Lersultatrcuprest:

    res_1sil'expressioncritalavaleurval_1

    res_2sil'expressioncritalavaleurval_2

    def(lavaleurpardfaut)sil'expressioncritn'estgale

    aucunedesexpressionsval_1,val_2,...,.

    Lesexpressionsrsultatsres_1,res_2,...,defpeuventtredetypesdiffrents:caractreetnumrique,oucaractreetdate(lersultatestdutypedelapremireexpressionrencontrdansleDECODE).LafonctionDECODEpermetgalementdemlangerdansunecolonnersultatdesinformationsvenantdeplusieurscolonnesd'unemmetable.

    Exemple:Donnerpourchaqueemploysesrevenus(salaire+commission).

    SELECTnom,salaire,comm,salaire+NVL(comm,0)FROMemp

    Exemple:Donnerlalistedesemploysavecpourchacund'euxsacatgorie(prsident=1,directeur=2,autre=3)

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 24/44

    SELECTnom,DECODE(fonction,'president',1,'directeur',2,3)FROMemp

    Exemple:Donnerlalistedesemploysenlesidentifiantparleurfonctiondansledpartement10etparleurnomdanslesautresdpartements.

    SELECTDECODE(n_dept,10,fonction,nom)FROMemp

    Les fonctions de groupe

    Danslesexemplesprcdents,chaquelignersultatd'unSELECTtaitlersultatdecalculssurlesvaleursd'uneseulelignedelatableconsulte.Il

    existeunautretypedeSELECTquipermetd'effectuerdescalculssurl'ensembledesvaleursd'unecolonne.Cescalculssurl'ensembledesvaleursd'unecolonnesefontaumoyendel'unedesfonctionssuivantes:

    AVG([DISTINCT|ALL]expression)

    Renvoielamoyennedesvaleursd'expression.

    COUNT(*|[DISTINCT|ALL]expression)

    Renvoielenombredelignesdursultatdelarequte.Siexpressionestprsent,onnecomptequeleslignespourlesquellescetteexpressionn'estpasNULL.

    MAX([DISTINCT|ALL]expression)

    Renvoielapluspetitedesvaleursd'expression.

    MIN([DISTINCT|ALL]expression)

    Renvoielaplusgrandedesvaleursd'expression.

    STDDEV([DISTINCT|ALL]expression)

    Renvoiel'carttypedesvaleursd'expression.

    SUM([DISTINCT|ALL]expression)

    Renvoielasommedesvaleurs

    VARIANCE([DISTINCT|ALL]expression)

    Renvoielavariancedesvaleursd'expression.

    DISTINCT

    Indiquelafonctiondegroupedeneprendreencomptequedesvaleursdistinctes.

    ALL

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 25/44

    Indiquelafonctiondegroupedeprendreencomptetouteslesvaleurs,c'estlavaleurpardfaut.

    Exemple:Donnerletotaldessalairesdudpartement10.

    SELECTSUM(salaire)FROMempWHEREn_dept=10

    Exemple:Donnerlenom,lafonctionetlesalairedel'employ(oudesemploys)ayantlesalairelepluslev.

    SELECTnom,fonction,salaireFROMempWHEREsalaire=(SELECTMAX(salaire)FROMemp)

    Remarques

    CesSELECTsontdiffrentsdeceuxvusprcdemment.Ilest,parexemple,impossiblededemanderenrsultatlafoisunecolonneetunefonctionde

    groupe.

    unSELECTcomportantunefonctiondegroupepeuttreutilisdansunesousinterrogation.

    ValeursNULL

    AucunedesfonctionsdegroupenetientcomptedesvaleursNULLl'exceptiondecount(*).Ainsi,SUM(col)estlasommedesvaleursnonNULLdelacolonnecol.DemmeAVGestlasommedesvaleursnonNULLdiviseparlenombredevaleursnonNULL.

    Calculsurplusieursgroupes

    Ilestpossibledesubdiviserlatableengroupes,chaquegroupetantl'ensembledeslignesayantunevaleurcommune.C'estlaclauseGROUPBYquipermetdedcouperlatableenplusieursgroupes:

    GROUPBYexpr_1,expr_2,...

    Sionauneseuleexpression,cecidfinitlesgroupescommelesensemblesdelignespourlesquellescetteexpressionprendlammevaleur.Siplusieursexpressionssontprsenteslesgroupessontdfinisdelafaonsuivante:parmitoutesleslignespourlesquellesexpr_1prendlammevaleur,onregroupecelles

    ayantexpr_2identique,...UnSELECTdegroupeavecuneclauseGROUPBYdonneraunelignersultatpourchaquegroupe.

    Exemple:Totaldessalairespourchaquedpartement

    SELECTSUM(salaire),n_deptFROMempGROUPBYn_dept

    Remarque:Danslalistedescolonnesrsultatd'unSELECTcomportantunefonctiondegroupe,nepeuventfigurerquedescaractristiquesdegroupe,c'estdire:

    soitdesfonctionsdegroupe

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 26/44

    soitdesexpressionsfigurantdansleGROUPBY.

    Slectiondesgroupes

    Delammefaonqu'ilestpossibledeslectionnercertaineslignesaumoyende

    laclauseWHERE,ilestpossibledansunSELECTcomportantunefonctiondegroupedeslectionnerparlaclauseHAVING,quiseplaceaprslaclauseGROUPBY.

    LeprdicatdanslaclauseHAVINGsuitlesmmesrglesdesyntaxequ'unprdicatfigurantdansuneclauseWHERE.

    Cependant,ilnepeutporterquesurdescaractristiquesdugroupe:fonctiondegroupeouexpressionfigurantdanslaclauseGROUPBY,danscecaslaclauseHAVINGdoittreplaceaprslaclauseGROUPBY.

    Exemple:Donnerlalistedessalairesmoyensparfonctionpourlesgroupesayantplusdedeuxemploys.

    SELECTfonction,COUNT(*),AVG(salaire)FROMempGROUPBYfonctionHAVINGCOUNT(*)>2

    Remarque:UnSELECTdegroupepeutcontenirlafoisuneclauseWHEREetuneclauseHAVING.LaclauseWHEREserad'abordappliquepourslectionnerleslignes,puislesgroupesserontconstituspartirdeslignesslectionnes,etlesfonctionsdegroupeserontvalues.

    Exemple:Donnerlenombred'ingnieursoudecommerciauxdesdpartementsayantaumoinsdeuxemploysdecescatgories.

    SELECTn_dept,COUNT(*)FROMempWHEREfonctionin('ingenieur','commercial')GROUPBYn_deptHAVINGCOUNT(*)>=2

    UneclauseHAVINGpeutcomporterunesousinterrogation.

    Exemple:Quelestledpartementayantleplusd'employs?

    SELECTn_dept,COUNT(*)FROMempGROUPBYn_deptHAVINGCOUNT(*)=(SELECTMAX(COUNT(*))FROMempGROUPBYn_dept)

    Fonctiondegroupedeuxniveaux

    Ilestpossibled'appliqueraursultatd'unSELECTavecGROUPBYundeuximeniveaudefonctiondegroupe.

    Exemple:lafonctionMAXpeuttreappliqueauxnombresd'employsdechaquedpartementpourobtenirlenombred'employsdudpartementayantleplusd'employs.

    SELECTMAX(COUNT(*))FROMempGROUPBYn_dept

    Modification une base

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 27/44

    Dfinition

    Lelangagedemanipulationdedonnesestlelangagepermettantdemodifierlesinformationscontenuesdansunebasededonnes.L'unitmanipuleestlaligne.IlexistetroiscommandesSQLpermettantd'effectuerlestroistypesdemodificationsdesdonnes:ajout,modificationetsuppression.

    Ajoutdelignes

    Dfinition

    LacommandeINSERTpermetd'insrerunelignedansunetableenspcifiantlesvaleursinsrer.Lasyntaxeestlasuivante:

    INSERTINTOnom_table(nom_col1,nom_col2,...)VALUES(val1,val2...)

    Lalistedesnomsdecolonneestoptionnelle.Sielleestomise,lalistedescolonnesserapardfautlalistedel'ensembledescolonnesdelatabledansl'ordredelacrationdelatable.Siunelistedecolonnesestspcifie,lescolonnesnefigurantpasdanslalisteaurontlavaleurNULL.

    Ilestpossibled'insrerdansunetabledeslignesprovenantd'uneautretable.Lasyntaxeestlasuivante:

    INSERTINTOnom_table(nom_col1,nom_col2,...)SELECT...

    LeSELECTpeutcontenirn'importequelleclausesaufunORDERBYquiimpliqueraitunclassementdeslignescontrairel'espritdurelationnel.

    Exemple:Insrerdanslatablebonuslesnomsetsalairesdesdirecteurs.

    INSERTINTObonus

    SELECTnom,salaire

    FROMemp

    WHEREfonction='directeur'

    Syntaxe

    INSERTINTO[schema.]table|view

    [(column[,column]...)]

    VALUES(expr[,expr]...)|subquery

    schema

    estlenomduschmacontenantlatableoulavue.Leschmapardfautest

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 28/44

    celuidel'utilisateurquiexcutelarequte.

    table/view

    estlenomdelatabledanslaquelleleslignesserontinsrs.Sic'estunnomdevuequiestprcis,lesdonnesserontinsrsdanslatablebasesurlavue.

    column

    nomdescolonnes

    VALUESExpr/subquery

    Valeursdescolonnes

    Prrequis

    Pourpouvoirinsrerdeslignesdansunetableilfautsoittrepropritairedecetobjet,soitavoirleprivilgeINSERTsurcettetable.

    LeprivilgeINSERTANYTABLEpermetd'insrerdeslignesdansn'importequelletableappartenantn'importequelutilisateur.

    Modificationdelignes

    Dfinition

    LacommandeUPDATEpermetdemodifierlesvaleursd'uneouplusieurscolonnes,dansuneouplusieurslignesexistantesd'unetable.Lasyntaxeestlasuivante:

    UPDATEnom_tableSETnom_col1={expression1|(SELECT...)},nom_col2={expression2|(SELECT...)}WHEREpredicat

    Lesvaleursdescolonnesnom_col1,nom_col2,...sontmodifiesdanstoutesleslignessatisfaisantauprdicat.Enl'absenced'uneclauseWHERE,toutesleslignessontmisesjour.Lesexpressionsexpression1,expression2,...peuventfairerfrenceauxanciennesvaleursdelaligne.

    Exemple:Augmenterde10%lesingnieurs.

    UPDATEemp

    SETsalaire=salaire*1.1

    WHEREfonction='ingenieur'

    Syntaxe

    UPDATE[schema.]table|view[alias]

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 29/44

    SET(column[,column]...)=(subquery)|column=expr|(subquery)[,(column[,column]...)=(subquery)|column=expr|(subquery)]...[WHEREcondition]

    schema

    estlenomduschmacontenantlatableoulavuemodifier.Leschmapardfautestceluidel'utilisateurquiexcutelarequte.

    table,view

    estlenomdelatablemettrejour.Sic'estunnomdevue,latablemisejourestcellesurlaquellelavueestdfinie.

    alias

    estunaliasassignlatable.lesaliassontgnralementutilissdansdesUPDATEcontenantdesrequtes.

    column

    estlenomdelacolonnequiseramodifie.

    expr

    estlanouvellevaleurdelacolonne.

    subquery

    estunSELECTquirenvoielesnouvellesvaleursaffectesauxcolonnescorrespondantes.

    WHERE

    restreintleslignesmodifiescellespourlesquelleslaconditionestvraie.Sionometcetteclausetoutesleslignessontmodifies.

    Prrequis

    Pourpouvoirmodifierdeslignesappartenantunetable,ilfautsoittrepropritairedecetobjet,soitavoirleprivilgeUPDATEsurcettetable.

    leprivilgeUPDATEANYTABLEpermetdeslectionnerdeslignesden'importequelobjetappartenantn'importequelutilisateur.

    Suppressiondelignes

    Dfinition

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 30/44

    LacommandeDELETEpermetdesupprimerdeslignesd'unetable.Lasyntaxeestlasuivante:

    DELETEFROMnom_tableWHEREprdicat;

    Toutesleslignespourlesquellesprdicatestvaluvraisontsupprimes.Enl'absencedeclauseWHERE,toutesleslignesdelatablesontsupprimes.

    Syntaxe

    DELETE[FROM][schema.]table|view[alias]

    [WHEREcondition]

    schema

    estlenomduschmacontenantlatableoulavuedtruire.Leschmapardfautestceluidel'utilisateurquiexcutelarequte.

    table,view

    estlenomdelatableoudelavuecontenantleslignesquiserontdtruites.Sic'estunnomdevue,leslignesdtruitesappartiennentlatablesurlaquellelavueestbase.

    alias

    Estunaliasassignlatable.lesaliassontgnralementutilissdansdesDELETEcontenantdesrequtes.

    WHERE

    Dtruitseulementleslignessatisfaisantlacondition.Cetteconditionpeutrfrencerlatableetpeutcontenirdessousrequtes.Sicetteclauseestomisedtruittoutesleslignes.

    Prrequis

    Pourdtruiredeslignesappartenantunetable,ilfautsoittrepropritairedelatable,soitavoirleprivilgeDELETEsurcettetable.

    LeprivilgeDELETEANYTABLEpermetunutilisateurdedtruiredeslignessetrouvantdansn'importequelletable,oun'importequellevuebasesurunetable.

    Suppressiond'unetable

    Dfinition

    LacommandeDROPpermetdedtruireunetableettoutessesdonnes.

    Syntaxe

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 31/44

    DROPTABLE[schema.]table

    [CASCADECONSTRAINTS]

    schema

    estlenomduschmacontenantlatableoulavuedtruireLeschmapardfautestceluidel'utilisateurquiexcutelarequte.

    table

    estlenomdelatabledtruire.

    CASCADECONSTRAINTS

    Supprimetouteslescontraintesquisereferelatablesupprime.

    Prrequis

    Pourpouvoirdtruireunetableilfautsoittrepropritairedecettetable,soitavoirleprivilgeDROPANYTABLE.

    Gestiondestransactions

    Unetransactionestunensembledemodificationsdelabasequiformeuntoutindivisible.Ilfauteffectuercesmodificationsentirementoupasdutout,souspeinedelaisserlabasedansuntatincohrent.

    LesSystmesdeGestiondeBasesdeDonnespermettentauxutilisateursdegrerleurstransactions.Ilspeuventtoutmoment:

    ValiderlatransactionencoursparlacommandeCOMMIT.Lesmodifications

    deviennentdfinitivesetvisiblestouslesutilisateurs.

    AnnulerlatransactionencoursparlacommandeROLLBACK.Toutesles

    modificationsdepuisledbutdelatransactionsontalorsdfaites.

    Encoursdetransaction,seull'utilisateurayanteffectulesmodificationslesvoit.

    Cemcanismeestutilisparlessystmesdegestiondebasesdedonnespourassurerl'intgritdelabaseencasdefinanormaled'unetcheutilisateur:ilyaautomatiquementROLLBACKdestransactionsnontermines.

    ORACLEestunsystmetransactionnelquiassurelacohrencedesdonnesencasdemisejourdelabase,mmesiplusieursutilisateurslisentoumodifientlesmmesdonnessimultanment.

    ORACLEutiliseunmcanismedeverrouillagepourempcherdeuxutilisateursd'effectuerdestransactionsincompatiblesetrglerlesproblmespouvantsurvenir.

    ORACLEpermetleverrouillagedecertainesunits(tableouligne)automatiquementousurdemandedel'utilisateur.Lesverroussontlibrsenfindetransaction.

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 32/44

    Les tables

    Lelangagededfinitiondesdonnesestlelangagepermettantdecreroudemodifierleschmad'unerelationetdoncd'unetable.Ilpermetdecrer,demodifieretdesupprimernonseulementlestables,maisaussilesvues,lesindexetlesclusters.

    Crerunetable

    Latableestlastructuredebasecontenantlesdonnesdesutilisateurs.Quandoncreunetable,onpeutspcifierlesinformationssuivantes:

    ladfinitiondescolonnes,lescontraintesd'intgrit,LaTableSpacecontenantlatable,lescaractristiquesdestockage,leclustercontenantlatable,lesdonnesrsultantd'uneventuellerequte.

    Crationsimple

    Lacommandedecrationdetablelaplussimplenecomporteraquelenometletypedechaquecolonnedelatable.L'onpeutcrerunetableparlacommandeCREATETABLEenspcifiantlenometletypedechaquecolonne.Alacration,latableseravidemaisuncertainespaceluiseraallou.Lasyntaxeestlasuivante:

    CREATETABLEnom_table(nom_col1TYPE1,nom_col2TYPE2,...)

    L'optionNOTNULLassurequ'ORACLEinterditlorsd'unINSERToud'unUPDATEquecettecolonnecontiennelavaleurNULL,pardfautelleestautorise.

    CrationavecInsertiondedonnes

    Onpeutinsrerdesdonnesdansunetablelorsdesacrationparlacommandesuivante:

    CREATETABLEnom_table[(nom_col1,nom_col2, ...)]ASSELECT...

    Onpeutainsi,enunseulordreSQLcrerunetableetlarempliravecdesdonnes

    provenantdursultatd'unSELECT.

    Onn'apasbesoinalorsdespcifierdetypepourlescolonnes:lestypesdes

    donnessontceuxprovenantduSELECT.Sidesconversionsdetypesontfaire,onpeutdansleSELECTutiliserlesfonctionsTO_CHAR,TO_DATE,TO_NUMBER.

    Pardfautlesnomsdescolonnesdelanouvelletablesontlesnomsdescolonnes

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 33/44

    duSELECT.SidesexpressionsapparaissentdansleSELECT,lescolonnescorrespondantesdoiventimprativementtrerenommes.

    LeSELECTpeutcontenirdesfonctionsdegroupesmaispasd'ORDERBYcarleslignesd'unetablenepeuventpastreclasses.

    Onpeut,etmmeondoit,quandoncreunetabledfinirlescontraintesd'intgritquedevrontrespecterlesdonnesquel'onmettradanslatable(voirunpeuplusbas).

    Lestypesdedonnes

    NUMBER[(longueur,[prcision])

    Cetypededonnespermetdestockerdesdonnesnumriqueslafoisentiresetrellesdontlavaleurestcompriseentre10^130et10^125avecuneprcisionde38chiffres.

    longueurprciselenombremaximumdechiffressignificatifsstocks(pardfaut38),

    prcisiondonnelenombremaximumdechiffresaprslavirgule(pardfaut38),savaleurpeuttrecompriseentre84et127.Unevaleurngativesignifiequelenombreestarrondigauchedelavirgule.

    CHAR(longueur)

    Cetypededonnespermetdestockerdeschanesdecaractresdelongueurfixe.Longueurdoittreinfrieur255,savaleurpardfautest1.

    VARCHAR(longueur)

    Cetypededonnespermetdestockerdeschanesdecaractresdelongueurvariable.Longueurdoittreinfrieur2000,iln'yapasdevaleurpardfaut.

    DATE

    Cetypededonnespermetdestockerdesdonnesconstituesd'unedateetd'uneheure.

    RAW(longueur)

    Cetypededonnespermetdestockerdescaractresnonimprimables.

    LONG

    Cetypededonnespermetdesstockerdeschanesdecaractresdelongueurvariableetinfrieure2^311.Lescolonnesdecetypesontsoumisescertainesrestrictions

    unetablenepeutpascontenirplusd'unecolonnedecetypelescolonnesdecetypenepeuventpasapparatredansdescontraintesd'intgritlescolonnesdecetypenepeuventpastreindexes

    lescolonnesdecetypenepeuventpasapparatredansdesclauses

    :WHERE,GROUPBY,ORDERBYouCONNECTBYainsiquedansunDISTINCT.

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 34/44

    Contraintesd'intgrit

    Alacrationd'unetable,lescontraintesd'intgritsedclarentdelafaonsuivante:

    CREATETABLEnom_table(nom_col_1type_1,nom_col_2type_2,...nom_col_ntype_nCONSTRAINT[nom_contrainte_1]contrainte_1,CONSTRAINT[nom_contrainte_2]contrainte_2,...CONSTRAINT[nom_contrainte_m]contrainte_m);

    Oubiendelafaonsuivante:

    CREATETABLEnom_table(nom_col_1type_1CONSTRAINT[nom_contrainte_1_1]contrainte_1_1CONSTRAINT[nom_contrainte_1_2]contrainte_1_2 ...CONSTRAINT[nom_contrainte_1_m]contrainte_1_m,

    nom_col_2type_2CONSTRAINT[nom_contrainte_2_1]contrainte_2_1CONSTRAINT[nom_contrainte_2_2]contrainte_2_2 ...CONSTRAINT[nom_contrainte_2_p]contrainte_2_p,

    ...nom_col_ntype_nCONSTRAINT[nom_contrainte_n_1]contrainte_n_1CONSTRAINT[nom_contrainte_n_2]contrainte_n_2 ...CONSTRAINT[nom_contrainte_n_q]contrainte_n_q);

    Lescontraintesdiffrentesquel'onpeutdclarersontlessuivantes:

    NOTNULL

    LacolonnenepeutpascontenirdevaleursNULL.

    UNIQUE

    ChaquelignedelatabledoitavoirunevaleurdiffrenteouNULLpourcette(ouces)colonne.

    PRIMARYKEY

    Chaquelignedelatabledoitavoirunevaleurdiffrentepourcette(ouces)colonne.lesvaleursNULLsontrejetes.

    FOREIGNKEY

    Cettecolonnefaitrfrenceunecolonnecld'uneautretable.

    CHECK

    Permetdespcifierlesvaleursacceptablespourunecolonne.

    Modifierunetable

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 35/44

    Onpeutmodifierdynamiquementladfinitiond'unetablegrcealacommandeALTERTABLE.Deuxtypesdemodificationssontpossibles:ajoutd'unecolonneetmodificationd'unecolonneexistante.

    Iln'estpaspossibledesupprimerunecolonne.Parcontreunecolonnequin'estplusutilisepeuttremiselavaleurNULL,auquelcasellen'occupeplusd'espacedisque.Siondsirevraimentsupprimerunecolonne,ilfaut:

    secrerunenouvelletablesanslacolonneenquestiondtruirel'anciennetable,donnerlanouvelletablelenomdel'ancienne.

    Ajouterunecolonne

    Lacommandesuivantepermetd'ajouteruneouplusieurscolonnesunetableexistante:

    ALTERTABLEnom_tableADD(nom_col1TYPE1,nom_col2TYPE2,...)

    LestypespossiblessontlesmmesqueceuxdcritsaveclacommandeCREATETABLE.

    Silatablecontientdjdeslignes,lanouvellecolonneauradesvaleursNULLpourleslignesexistantes.

    Modifierunecolonne

    Ilestpossibledemodifierladfinitiond'unecolonne,conditionquelanouvelledfinitionsoitcompatibleaveclecontenudelacolonneetenrespectantlescontraintessuivantes:

    danstouslescasilestpossibled'augmenterlatailled'unecolonneilestpossibledediminuerlataille,oummedechangerletyped'unecolonnevide

    onpeutspcifierNOTNULLsilacolonnenecontientaucunevaleurNULL

    onpeutdanstouslescasspcifierNULLpourautoriserlesvaleursNULL.

    Supprimerunetable

    LacommandeDROPTABLEpermetdesupprimerunetable,sasyntaxeestlasuivante:

    DROPTABLEnom_table;

    Latablenom_tableestalorssupprime.Ladfinitiondelatableainsiquesoncontenusontdtruits,etl'espaceoccupparlatableestlibr.

    Renommerunetable

    Onalapossibilitdechangerlenomd'unetableparlacommandeRENAME,lasyntaxeestlasuivante:

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 36/44

    RENAMEancien_nomTOnouveau_nom;

    Les vues

    Lesvuespermettentd'assurerl'objectifd'indpendancelogique.Grceelles,chaqueutilisateurpourraavoirsavisionpropredesdonnes.

    Onavuquelersultatd'unSELECTestluimmeunetable.Unetelletable,quin'existepasdanslabasemaisestcredynamiquementlors

    del'excutionduSELECT,peuttrevuecommeunetablerelleparlesutilisateurs.Pourcela,ilsuffitdecataloguerleSELECTentantquevue.

    Lesutilisateurspourrontconsulterlabase,oumodifierlabase(aveccertainesrestrictions)traverslavue,c'estdiremanipulerlatablersultatdu

    SELECTcommesic'taitunetablerelle.

    Crerunevue

    LacommandeCREATEVIEWpermetdecrerunevueenspcifiantleSELECTconstituantladfinitiondelavue:

    CREATEVIEWnom_vue[(nom_col1,...)]ASSELECT...WITHCHECKOPTION;

    Laspcificationdesnomsdecolonnesdelavueestfacultative.Pardfaut,lesnomsdescolonnesdelavuesontlesmmesquelesnomsdescolonnesrsultatdu

    SELECT(sicertainescolonnesrsultatduSELECTsontdesexpressions,ilfautrenommercescolonnesdansleSELECT,ouspcifierlesnomsdecolonnedelavue).

    Unefoiscre,unevues'utilisecommeunetable.Iln'yapasdeduplicationdesinformationsmaisstockagedeladfinitiondelavue.

    Exemple:Crationd'unevueconstituantunerestrictiondelatableempauxemploysdudpartement10.

    CREATEVIEWemp10AS

    SELECT*

    FROMemp

    WHEREn_dept=10

    LeCHECKOPTIONpermetdevrifierquelamisejouroul'insertionfaitetraverslavueneproduisentquedeslignesquifontpartiedelaslectiondelavue.

    Ainsidonc,silavueemp10atcreavecCHECKOPTIONonnepourratraverscettevuenimodifier,niinsrerdesemploysnefaisantpaspartiedudpartement10.

    Ilestpossibled'effectuerdesINSERTetdesUPDATEtraversdesvues,sousdeux

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 37/44

    conditions:

    leSELECTdfinissantlavuenedoitpascomporterdejointure,lescolonnesrsultatduSELECTdoiventtredescolonnesrellesetnonpasdesexpressions.

    Exemple:Modificationdessalairesdudpartement10traverslavueemp10.

    UPDATEemp10

    SETsal=sal*1.1

    Toutesleslignesdelatableemp,tellesquelecontenudelacolonnen_deptestgal10serontmodifies.

    Supprimerunevue

    Unevuepeuttredtruiteparlacommande:

    DROPVIEWnom_vue;

    Renommerunevue

    Onpeutrenommerunevueparlacommande:

    RENAMEancien_nomTOnouveau_nom;

    Les index

    IntroductionGnralits

    Selonlemodlerelationnellesslectionspeuventtrefaitesenutilisantlecontenuden'importequellecolonneetleslignessontstockesdansn'importequelordre.

    ConsidronsleSELECTsuivant:

    SELECT*FROMempWHEREnom='MARTIN'

    Unmoyenderetrouverlaouleslignespourlesquelles,fontcolor=red>nomestgalMARTINestdebalayertoutelatable.

    Untelmoyend'accsconduitdestempsderponseprohibitifspourdestablesdpassantquelquescentainesdelignes.

    Unesolutionoffertepartouslessystmesdegestiondebasesdedonnesestlacrationd'index,quipermettradesatisfaireauxrequteslesplusfrquentesavecdestempsderponseacceptables.

    Unindexseramatrialisparlacrationdeblocsdisquecontenantdescouples(valeursd'index,numrodebloc)donnantlenumrodeblocdisquedanslequelsetrouventleslignescorrespondantchaquevaleurd'index.

    Structured'unindex

    Lesindexsontdesstructurespermettantderetrouverunelignedansunetable

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 38/44

    partirdelavaleurd'unecolonneoud'unensembledecolonnes.Unindexcontientlalistetriedesvaleursdescolonnesindexesaveclesadressesdeslignes(numrodeblocdanslapartitionetnumrodelignedanslebloc)correspondantes.

    Touslesindexoraclesontstockssousformed'arbresquilibrs(btree):unestructurearborescentepermetderetrouverrapidementdansl'indexlavaleurdeclcherche,etdoncl'adressedelalignecorrespondantedanslatable.

    Dansuntelarbre,touteslesfeuillessontlammeprofondeur,etdonclarechercheprendapproximativementlemmetempsquellequesoitlavaleurdelacl.

    Lorsqu'unblocd'indexestplein,ilestclatendeuxblocs.enconsquence,touslesblocsd'indexontuntauxderemplissagevariantde50%100%.Sansindexonbalaiesquentiellementtoutelatablequellequesoitlapositiondelmentrecherch.

    Utilisationdesindex

    L'adjonctiond'unindexunetableralentitlesmisesjour(insertion,suppression,modificationdelacl)maisacclrebeaucouplarecherched'unelignedanslatable.

    L'indexacclrelarecherched'unelignepartird'unevaleurdonnedecl,maisaussilarecherchedeslignesayantunevaleurd'indexsuprieureouinfrieureunevaleurdonne,carlesvaleursdeclssonttriesdansl'index.

    Exemple:Lesrequtessuivantesbnficierontd'unindexsurlechampn_dept.

    SELECT*FROMempWHEREnum=16034

    SELECT*FROMempWHEREnum>=27234

    SELECT*FROMempWHEREnumBETWEEN16034AND27234

    Unindexestutilisablemmesilecritrederechercheestconstituseulementdudbutdelacl.

    Exemple:Larequtesuivantebnficierad'unindexsurlacolonnenom.

    SELECT*

    FROMemp

    WHEREnomLIKE'M%'

    Parcontresiledbutdelacln'estpasconnu,l'indexestinutilisable.

    Exemple:Larequtesuivantenebnficierapasd'unindexsurlechampnom.

    SELECT*

    FROMemp

    WHEREenameLIKE'?????????'

    ValeursNULL

    Ellesnesontpasreprsentesdansl'index,ceciafindeminimiserlevolumencessairepourstockerl'index.Encontrepartie,l'indexneserad'aucuneutilit

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 39/44

    pourretrouverlesvaleursNULLlorsquelecritrederechercheestdutypeISNULL.

    Conversions

    L'indexn'estutilisablequesilecritredeslectionestlecontenudelacolonneindexe,sansaucunetransformation.Parexempleunindexsursalaireneserapasutilispourlarequtesuivante:

    SELECT*FROMemp

    WHEREsalaire*12>300000

    Attentionenparticulierauxconversionsdetypequipeuventempcherl'utilisationdel'index.

    SQLestunlangagetyp,chaquetypededonnes(numrique,caractre,date)ayantsespropresoprateurs,sespropresfonctionsetsaproprerelationd'ordre.Enconsquence,sidansuneexpression,figurentlafoisunnombreetunechanedecaractres,SQLconvertiralachanedecaractresennombre.Demmesidansuneexpression,figurentlafoisunechanedecaractresetunedate,SQLconvertiralachanedecaractresendate.

    Or,dansunprdicatdutype:

    WHEREfonction(col_indexe)=constante

    SQLnepeutpasutiliserl'index.

    Cecipeutseproduire,defaoninsidieuse,lorsqueSQLestobligd'ajouterunappelunefonctiondeconversioncaused'unediscordancedetype.

    Exemple:Leprdicatsuivantnebnficierapasd'unindexsurlechampembauche.

    SELECT*FROMemp

    WHEREembaucheLIKE'????'

    Eneffet,SQLestobligd'effectueruneconversion,etleprdicatquiseravaluest:

    WHERETO_CHAR(embauche)LIKE'????'

    Lecritrederechercheestunefonctiondeembauche,etnonlechampembaucheluimme,danscecasl'indexestinutilisable.

    Choixdesindex

    Indexerenpriorit:

    1. lesclsprimaires2. lescolonnesservantdecritredejointure3. lescolonnesservantsouventdecritrederecherche

    Nepasindexer:

    1. lescolonnescontenantpeudevaleursdistinctes(indexalorspeuefficace)2. lescolonnesfrquemmentmodifies

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 40/44

    Crerunindex

    Unindexpeuttrecrparlacommandesuivante:

    CREATE[UNIQUE]INDEXnom_indexONnom_table(nom_col1,nom_col2,...)[PCTFREEnombre][COMPRESS|NOCOMPRESS][ROWS=nombre_lignes];

    danslaquelle:

    L'optionUNIQUEindiquequel'oninterditquedeuxlignesaientlamme

    valeurdanslacolonneindexe.

    PCTFREEprciselepourcentagedeplacelaisselibredanslesblocsd'index

    lacrationdel'index.Cetteplacelibreviteraunerorganisationde

    l'indexdeslespremiresinsertionsdenouvellescls.Lavaleurpardfaut

    est20%.

    NOCOMPRESSindiquequel'onneveutpascomprimerlescls.

    nombre_lignesestuneestimationdunombredelignes,permettantd'optimiser

    l'algorithmedeclassement..

    Unindexpeuttrecrdynamiquementsurunetablecontenantdjdeslignes.Ilseraensuitetenujourautomatiquementlorsdesmodificationsdelatable.

    Unindexpeutportersurplusieurscolonnes,lacld'accsseraalorslaconcatnationdesdiffrentescolonnes.

    Onpeutcrerplusieursindexindpendantssurunemmetable.

    LesrequtesSQLsonttransparentesaufaitqu'ilexisteunindexounon.C'estl'optimiseurdusystmedegestiondebasesdedonnesqui,aumomentdel'excutiondechaquerequte,recherches'ilpeuts'aiderounond'unindex.

    Indexcomprimetnoncomprim

    Lesclsdanslesindexpeuventtrecomprimesounon.Lacompressionestunetechniquepermettantderduiredansdesproportionstrsimportantes(d'autantplusquelaclestlongue)levolumedel'index.

    Encontrepartie,ilfautparfoisuntraitementsupplmentairepourrecomposerlacllorsdesmisesjourdel'index.

    Pardfaut,lesindexsontcomprims,lesavantagesderductiondetaillel'emportantsurlesinconvnientsdanslaplupartdescas.

    sqlsaitexcutercertainesrequtesdirectementauniveaudel'indexsanspasserparlesegmentdedonnes,sil'indexestnoncomprimetsitousleschampsrsultatsdelarequtesontdansl'index.

    Exemple:L'indexcrepar:

    CREATEINDEXx

    ONemp(num,nom)

    nocompress

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 41/44

    permettraderpondrelaquestion:

    SELECTnom

    FROMemp

    WHEREnum

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 42/44

    acclrerlajointureselonlacldeclusterdestablesmisesencluster,acclrerlaslectiondeslignesd'unetableayantmmevaleurdecl,parlefaitqueceslignessontregroupesphysiquement,conomiserdelaplace,dufaitquechaquevaleurdelaclduclusterneserastockequ'uneseulefois.

    Leregroupementenclusteresttotalementtransparentl'utilisateur:destablesmisesenclustersonttoujoursvuescommedestablesindpendantes.

    Parexempleonpourraitmettreenclusterlestablesempetdeptselonn_dept.Cestablesseraientrorganisesdelafaonsuivante:unblocdeclusterseraitcrpourchaquenumrodedpartement,cebloccontenantlafoisleslignesdelatableempetdelatabledeptcorrespondantcenumrodedpartement.Lajointureentrelestablesempetdeptselonn_deptdeviendraitalorsbeaucoupplusrapide,puisqu'elleseraitdjralisedansl'organisationphysiquedestables.

    Pourquel'onpuissemettreunetableenclusterilfautquel'uneaumoinsdescolonnesfaisantpartieduclustersoitdfiniecommeobligatoire(NOTNULL).

    Onpeutindexerlescolonnesd'unetableencluster,ycomprislescolonnescorrespondantlaclouunepartiedelaclducluster.Laclellemmeestautomatiquementindexe,onpeutventuellementlarindexerpourcrerunindexuniqueservantcontrlersonunicit.

    Creruncluster

    AvantdepouvoirmettreenclusteruneouplusieurstablesilfautcrerleclusteraumoyendelacommandeCREATECLUSTERdontlasyntaxeestlasuivante:

    CREATECLUSTERnom_cluster(cle1type1,cle2type2,...)

    ol'ondonneunnomaucluster,etol'ondfinitlenometletypedescolonnesconstituantlaclducluster.

    CREATECLUSTERnom_cluster(cle1type1,cle2type2,...)[SIZEtaille_du_bloc][COMPRESS|NOCOMPRESS]

    [SPACEnom_de_space_definition]

    danslaquelle:

    SIZE

    estlatailled'unblocdecluster.Cettetaillepeutvarierde1/6deblocoracle1blocoracle(2koctetssurvax/vms),ceparamtredoittrechoisidefaonavoirunbonremplissagedesblocs.

    COMPRESS|NOCOMPRESS

    estrelatifl'indexquiseracresurlaclducluster

    SPACE

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 43/44

    spcifieleSPACEDEFINITIONquidfiniralesparamtresd'allocationd'espacepourlecluster.

    CREATECLUSTERDEM(DEPNONUMBER)SIZE512;

    Miseenclusterd'unetable

    Enprincipec'estdssacrationqu'ilfautspcifiersiunetableseraimplantedansuncluster.

    Lorsdelacrationdelatable

    L'optionclusterdel'ordreCREATETABLEpermetdespcifierquelatabledoittremiseencluster.Leclusterdoitdjexister.

    CREATETABLEnom_table

    (nom_col1TYPE1NOTNULL,(nom_col2TYPE2NOTNULL, ...)CLUSTERNOM_CLUSTER(nom_coli,nom_colj...)

    nom_coli,nom_coljsontdesnomsdecolonnesdelatable,ellesserontidentifiesuneuneauxcolonnesclsduclusterspcifieslacrationducluster.

    Tabledjexistante

    Enprincipecelan'estpaspossible,ilfautdoncprocderdelafaonsuivante:

    crerunenouvelletableavecl'optionclusteretycopierlecontenudelatableinitialesupprimerl'anciennetablerenommerventuellementlanouvelletable.

    Retraitd'unetabled'uncluster

    Pourretirerunetabled'unclusterilfaut:

    crerunenouvelletableendehorsduclusteretcopierlatableenclusterdanslanouvelletabledtruirel'anciennetablelanouvelletablepourraalorstrerenommepourprendrelenomdel'ancienne.

    cecinedtruitpaslatable,maislareconstruitendehorsducluster.

    Supprimeruncluster

    Unclusternecontenantaucunetablepeuttresupprimparlacommande:

    DROPCLUSTERnom_cluster;

    Remarque:Lesperformancesduclusternesontvalablesquesionn'apasdeblocschans(exdegrandetable).

  • 20/2/2015 CoursdeSQL/Oracle

    http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM 44/44

    1999/05ThC


Recommended