Vous êtes sur la page 1sur 86

Introduction aux Bases de donnes Le langage SQL (Structured Query Language)

Tous les SGBD relationnels utilisent le langage SQL pour accder la base de donnes et la manipuler : - crer, supprimer, modifier des tables - insrer, supprimer, mettre our les donnes des tables !m" : c#a"ue SGBD utilise des e$tensions du langage "ui lui sont propres%

Quel"ues a&antages : - !e"u'tes simples dclarati&es (Q)*+, non ,*--./T0 - primiti&es crites en SQL 12 normalises, donc portables d3un SGBD un autre (si seule la norme est utilise0
27/08/2013

Le SGBD PostgresSQL
Documentation, par exemple : ttp:!!docs"postgres#l$r"org!%"&!

PostgresSQL est un SGBD Relationnel (les dernires versions possdent des fonctionnalits SGBD-Relationnel-Objet) PostgreSQL a une architecture Client/Serveur bas sur le modle : un processus par client PostgreSQL possde un dictionnaire de donnes o sont dcrites : - les tables, les colonnes, les index, les contraintes, - les types de donnes, les fonctions, les oprateurs, Les tables du dictionnaire commencent par pg_. Pour obtenir la liste complte des tables, voir le site : http://docs.postgresqlfr.org/8.0/catalogs.html

S4nta$e des commandes SQL


Les commandes SQL commencent par un mot cl ("ui sert nommer l5opration e$cuter% ,#a"ue commande SQL doit remplir deu$ e$igences : +ndi"uer les donnes sur les"uelles elle op6re ("ui est un ensemble de lignes stoc7es d3une ou plusieurs tables0 +ndi"uer l5opration e$cuter sur ces donnes Les commandes du langage SQL op6rent sur une BD relationnelle (un ensemble de tables0 SQL permet d3e$cuter une re"u'te et d3obtenir une rponse 12 interactif% -ais, il e$iste SQL intgr (dans un langage, SQL d4nami"ue, et utilisable sous forme de bibliot#6"ues de fonctions (*DB,, 8DB,0 : non normalis%

SQL (Structured Quer4 Langage0 : standards (SQL9:, SQL:;, SQL::0 (ou SQL<, SQL;, SQL=0 --2 traitement complet d 5une BD relationnelle --2 interactif ou par programmation --2 regroupe = langages : > DDL (Data Description Langage0 ou LDD : ? description des ob ets de la base (tables, 0 ,!.@T., @LT.!, D!*A > D'L (-anipulation0 ou L-D : ? +nterrogation : S.L.,T ? -anipulation : +/S.!T, )AD@T., D.L.T. > D(L (,ontrol0 ou L,D : contrBle d 5acc6s au$ donnes : G!@/T C !.D*E. > F ; instructions : ,*--+T (&alider0 et !*LLB@,E (dfaire0
5

*n utilise comme e$emple une BD! contenant ; tables .-A et D.AT et une table D)@L d3un seul attribut% .lle est &ide% )'P (empno, ename, *o+, mgr, iredate, sal, comm, deptno)
? ? empno, mgr, deptno : entier , ename, *o+ : c a-ne de caract.re / iredate : date sal, comm : real

D)P0 (deptno, dname, loc)


? ? deptno : entier dname, loc : c a-ne de caract.res

D12L ta+le 3ide 4 une colonne

0raitement d 5une re#u6te

@nal4se s4nta$i"ue : &rification de la disposition des mots dans la re"u'te (mots-cl et autres0

? *ptimisation : le SGBD gn6re des re"u'tes optimises partir de la re"u'te de base% +l se sert pour cela de la connaissance de la structure des donnes, des inde$ (s 5ils e$istent0 et l 5organisation p#4si"ue des donnes, et de statisti"ues d 5acc6s au$ donnes%

0raitement d 5une re#u6te (suite)

? .$cution : le SGBD gn6re des plans d 5e$cutions% +l en c#oit un et e$cute la re"u'te selon ce plan% ? 7ote : le SGBD tient compte du fait "ue d 5autres utilisateurs peu&ent 'tre en train d 5accder au$ m'mes donnes au m'me moment 12 mcanisme de contrBleur de concurrence%

Les t4pes de donnes Les t4pes numri"ues : integer, smallint, double, float,%%% e$emple : ;=, -<;;, =%G, -H%I,% % % Les t4pes alp#anumri"ues : c#ar, &arc#ar(n0, c#ar(n0, te$t e$emples : 5&5, 5la classe 5, 3T*T*3, %%% Le t4pe date (format modifiable0 e$emple : 5;JJ;-J;-;95 Le t4pe boolean : bool e$emples :5f5, 5t5 .t d5autres encore% % %

Les types de donnes : Oracle et PostgreSQL


Type numrique : INTEGER dans Oracle et PostgreSQL. Oracle: NUMBER(p,s) <-> PostgreSQL: NUMERIC(p,S) Type caractre : CHAR(n), pour les chanes de taille fixe, dans Oracle et PostgreSQL. Oracle: VARCHAR2(n) PostgreSQL et Oracle : VARCHAR(N) : chane de caractres de longueur variable

Type date : Le type DATE Oracle contient une date prcise la seconde prs. Le type DATE postgreSQL contient une date prcise au jour prs. Type date Oracle ~ Type TIMESTAMP de postgreSQL. Oprations autoriss sur les dates : soustraire ou d'ajouter des jours une date Ex: PostgreSQL : SELECT date '29-nov-2008' + 1; -> 2008-11-30 Pour soustraire ou ajouter des intervalles de temps un attribut de type TIMESTAMP, il faut utiliser une valeur de type INTERVAL. ex: SELECT timestamp '29-nov-2008' + interval '1 day'; -> 2008-11-30 00:00:00 Current_date (PostegreSQL) sysdate (Oracle)

SQL,D'L Interrogation : select

12

S)L)(0
- .st une commande "ui poss6de beaucoup d 5options (une centaine0 - Aermet d 5e$traire des informations partir d 5une ou plusieurs tables "ui respectent &entuellement certaines conditions .$emple S.L.,T empno K!*- emp L#ere deptno 1 <JM 12 Utiliser la table EMP pour extraire les noms des employs qui travaillent dans le dpartement numro 10.

27/08/2013

S4nta$e gnrale
S.L.,T nomNc O, nomNc O, nomNcP P Q > K!*- tab< O, tab; O, tabiP P RS.!. conditions *!D.! BT crit6res de tri G!*)A BT colonne de regroupement

27/08/2013

Extraction de toutes les lignes d une table Select


nom_commande

*
toutes les colonnes

from
mot-cl

nom_table ;
nom de la table

)8: <% e$traire toutes les infos sur les dpartements : Select ;% .$traire les +nfos sur les emplo4s : select > from empM

!rom deptM

)xtraction d 5une ou plusieurs colonnes (opration de pro*ection)


Select nomNcol O, nomNcol %%%P from nomNtable M

)8: <% Lister les noms des dpartements : Select dname !rom dept" ;% Lister les noms et salaires des emplo4s : select ename# sal !rom emp"
15

9enommer les colonnes ou les ta+les

EX: 1. Lister les noms des dpartements :

Select dname AS NOM D !A"# M N#$ %rom dept& '( le nom est compos )* mettre entre +,illemets-('
2. Lister les noms et salaires des emplo.s :

select ename AS NOM/ sal AS SALA0" %rom emp &

16

Extraction de toutes les lignes d une table liminer les doublons ventuels : DISTINCT

Select ODistinct:2LL; OnomNcol O, nomNcolP %%%P Q !ar d%a,t-: ALL

>

from nomNtable M

EX: Lister les di%%rents mtiers 12o3s4 sans do,3lons : ? Select distinct 2o3 %rom emp&

17

(ondition de rec erc e


5 Select % Krom R#ere Ucondition2 oV Ucondition2 est une suite de prdicats )n prdicat 1 comparaison de ; &aleurs .W: <% Les emplo4s du dpartement <J : Select !rom emp $%ere deptno & 10" ;% Les emplo4s dont le salaire est 2 =JJJ : Select !rom emp $%ere sal ' (000" =% Les infos sur la &ille de D@LL@S : Select !rom dept $%ere loc & )*+,,+S-" Les oprateurs sont : 1 , U2, U , 2 , U1 et 21 ,es oprateurs s3appli"uent au$ t4pes numri"ue, c#aXne de caract6res et dates%
18

(ondition de rec erc e


Les littrau$ alp#anumri"ues : entre apostrop#es (Y 0 et sont compars caract6re par caract6re (codage interne0 : Select Krom % R#ere O/*TP prdicat-< @/DQ*! O/*TPprdicat-; M )x : <% Les emplo4s dont le ob est @/@LTST ou "ui sont du dpartement <J : Select !rom emp $%ere .ob&)+/+,0S12 34 deptno & 10" ;% .mplo4s dont le mtier est Y,L.!E5 et dont le salaire est 2 <JJJ Select !rom emp $%ere .ob & )5,E46- +/* sal ' 1000"

16

<prateurs +oolens
5 = oprateurs boolens : /*T, @/D et *! *n peut les combiner dans une e$pression% *n a : Ariorit(/*T0 2 Ariorit(@/D0 2 Ariorit(*!0, sauf parent#sage%

27

<prateurs +oolens
Slection de lignes dont la 3aleur d 5une colonne est comprise dans une suite de 3aleurs:
Select Krom % R#ere nomNcol O/*TP +/ (&al<, &al;, , &alNn0M .W : <% Les emplo4s dont le c#ef a pour numro soit I:J;, soit I9=: : Select !rom emp $%ere m7r 8/ 9:;0<# :=(;>" ;% Les emplo4s "ui ne sont ni du dpartement ;J, ni du dpartement =J : Select !rom emp $%ere deptno /31 8/ 9<0# (0>"

21

<prateurs +oolens
Slection de lignes dont la 3aleur d 5une colonne est comprise entre deux 3aleurs: S4nta$e : Select > from emp L#ere nomNcol O/*TP B.TR../ &al< and &al;M .W% Les emplo4s dont le salaire est compris entre <ZJJ et ;ZJJ : Select !rom emp $%ere sal bet$een 1?00 and <?00" @ bornes incluses @

22

<prateurs arit mti#ues


F, -, >, [ : combins pour faire des e$pressions% .W : @ffic#er les emplo4s a&ec leur salaire total (a&ec la commission "uand elle e$iste0% Select ename# sal# comm# salAcomm $%ere comm is not null"

0ri des rsultats


Les rsultats d 5une slection peu&ent 'tre tris, sur une ou plusieurs colonnes, par ordre croissant (par dfaut0 ou dcroissant% S4nta$e : Select > from nomNtab L#ere %% *!D.! BT

nomNcol O@S,QD.S,P

28

<prateurs arit mti#ues .mplo4s dont le salaire est U <ZJJ, tris par ordre alp#abti"ue croissant : Select !rom emp $%ere sal B 1?00 34*E4 C0 ename" @ 3rdre croissant par d!aut @ /ote :SQL, AostgreSQL : il est possible d 5effectuer des tris sans mentionner les noms de colonnes mais leurs positions relati&es dans le S.L.,T : Liste des emplo4s tris par numros d 5emplo4 croissant (empno0, et sur le numro du c#ef (mgr0 dcroissant : Select empno, ename, ob, mgr from emp *!D.! BT <, G D.S,M
29

La =ointure
@ssociation de lignes de plusieurs tables en fonction d 5un crit6re (de ointure0%
Select > ?rom nom@ta+ Anom@alias; B ere Ccrit.re de *ointureDE

.W% @ffic#er les noms des emplo4s (table emp0 a&ec les noms de leur dpartement (table dept0 : Select ename# dname !rom emp# dept $%ere emp.deptno & dept.deptno M !m" : <% le nom de colonne tant identi"ue 12 on le prfi$e par le nom de la table% F" 2uto,*ointure (*ointure de lignes di$$rentes de la m6me ta+le)
25

La =ointure
Lister les emplo4s a&ec leur manager : le crit6re d 5auto- ointure est ralis en associant .-A/* et -G! ("ui est aussi un numro d 5emplo4, c--d du c#ef0: Aour effectuer l 5auto- ointure, il con&ient de citer ; fois la m'me table en utilisant un alias, car on traite ; tables identi"ues, les m'mes noms de colonnes apparaissent dans les deu$ tables% Select emp.empno, emp.ename, empbis.empno, empbis.ename From emp, emp empbis Where emp.mgr = empbis.empno;

26

Jointure externe Pour effectuer une jointure externe entre table, il faut utiliser la syntaxe conforme au standard SQL (disponible aussi Oracle), LEFT OUTER JOIN et RIGHT OUTER JOIN: Ex : SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.id=table2.id; Tous les n-uplets de table1 apparatront dans l'ensemble des n-uplets rsultats. Les n-uplets de table1 pour lesquelles il n'est pas possible de faire une jointure avec des n-uplets de la table2 auront NULL comme valeur pour les attributs de table2.

SELECT * FROM table1 RIGHT OUTER JOIN table2 ON table1.id=table2.id; Tous les n-uplets de table2 apparatront dans l'ensemble des n-uplets rsultats. Les n-uplets de table2 pour lesquelles il n'est pas possible de faire une jointure avec des n-uplets de la table1 auront NULL comme valeur pour les attributs de table1.

5 Sous,interrogation
5 Select Krom R#ere nomNcol Uoprateur2 (Select Krom R#ere0M .W: @ffic#er les emplo4s "ui sont dans le m'me dpartement "ue 3@LL./3 : d3abord rec#erc#e du dpartement de @LL./, puis connaissant son numro (=J0, on c#erc#e les emplo4s "ui 4 tra&aillent% Select Drom emp E%ere deptno & 9Select deptno !rom emp $%ere ename & )+,,E/->"

26

Sous,interrogation
Sous,interrogation rapportant plusieurs lignes : I7, 27G, 2LL Le rsultat d 5une sous-interrogation peut comporter plusieurs lignes% Dans ce cas les oprateurs 1, U, 2 ne con&iennent plus% L 5galit sera traite par l 5oprateur +/ (un Y1Y par rapport une suite de &aleurs0, et Les ingalits seront traites par l 5oprateur @/T et @LL% .$emple : Les emplo4s tra&aillant dans le m'me dpartement "ue l 5un des emplo4s dpendant du prsident% Select !rom emp E%ere deptno in 9select deptno !rom emp E%ere m7r & 9Select empno !rom emp E%ere .ob&) P4ES8*E/1 -> >"

87

Oprateur ANY : Le rsultat de la comparaison est VRAI, s il l est pour au moins un lment de l ensemble (de la sous-interrogation) EX: Afficher les employs ayant un salaire suprieur celui de l un des employs travaillant dans le dpartement 10 Select * from emp where sal > ANY (select sal from emp where deptno=10);

81

Oprateur ALL : Le rsultat de la comparaison est VRAI, s il l est pour tous les lments de l ensemble (sous-interrogation) EX: Afficher les employs ayant un salaire suprieur celui des employs travaillant dans le dpartement 20. Select * From emp where sal > ALL (select sal from emp where deptno=20);

82

)xtraction de lignes si le rsultat de la sous,interrogation comporte au moins une ligne A7<0; )8IS0
Select Krom % R#ere O/*TP .W+STS (Select Krom R#ere 0M )xH: lister les emplo4s s 5il 4 en un parmi eu$ "ui a une commission 2 <JJJM Select !rom emp $%ere EF8S1S 9select !rom emp $%ere comm ' 1000>"

)xF : lister les emplo4s s 5il n 54 a aucun parmi eu$ "ui a une commission 2 <JJJ Select !rom emp $%ere /31 EF8S1S 9select !rom emp $%ere comm ' 1000>"

88

Les traitements de groupe


Select O@DGQS)-Q-+/Q-@WQ,*)/TP ( OD+ST+/,TQ@LLP nomNcol 0

R#ere conditionM 12 Le rsultat sera affic# sur une seule ligne% .$: <% @ffic#er le total des salaires : Select sum9sal> !rom emp" ;% @ffic#er le total et la mo4enne des commissions : Select sum9comm># av79comm> !rom emp"

89

Les traitements de groupe


=% @ffic#er le nombre de commissions /)LL : Select count9comm> !rom emp" 9m#H : la &aleur /)LL n 5entre pas dans les diffrents calculs% .$ : la mo4enne de la colonne ,*-- est calcule en cumulant le nombre de commissions di&ise par le nombre de &aleurs non /)LL% 9m#F : +l est impossible d 5utiliser la fois une pro ection et une fonction de groupe : Select ename# sum9sal> !rom emp" S)92 9)=)0))" 9m#I : ,*)/T (>0 : nombre de lignes non /)LL%

85

Regroupement du rsultat d une slection GROUP BY Les lignes provenant d une slection peuvent tre regroupes en fonction d une valeur commune dans une ou plusieurs colonnes : Select [AVG| |COUNT] ([distint|all] from nom_table where <condition> GROUP BY [nom_col1 | nom_col2| .]; Rmq: Il n est pas ncessaire de raliser un tri avant le regroupement. Il est effectu automatiquement par GROUP BY. Ex: Calculer le total des salaires par dpartement : Select deptno, sum(sal) from emp group by deptno;

86

Sous,interrogation de groupe
Select . From nom_tab [alias] Where nom_col <operate r! "select #rom $here % Ex& '##icher les emplo()s a(ant le pl s *ran+ salaire par +)partement & Select ename, sal, deptno, from emp e1 Where sal = (Select max(sal) from emp where e1.deptno= emp.deptno); Rmq & po r le,er ambi* -t) s r le nom +e colonne "appartenant soit . l /interro*ation pple0 soit . la so s1interro*%0 on tilise n alias.

87

(ration d 5une ta+le 4 partir d 5une autre ta+le (<racle) ,!.@T. T@BL. nomNtab @S S.L.,T % K!*- % RS.!. %%M , *u bien ,!.@T. T@BL. nomNtab ( nomNcol /*T /)LL 0 @S S.L.,T %M

.$: ,reate table dept=J (name, #date, manager0 @S S.L.,T ename, #iredate, mgr Krom emp R#ere deptno 1 =JM !m" : Si aucune colonne n5est spcifie, les noms de colonnes sont ceu$ de la table d 5origine% - Si des colonnes sont spcifies, leur nombre doit 'tre le m'me "ue celui de l 5interrogation (apr6s @S S.L.,T 0 - Les t4pes des colonnes sont ceu$ des colonnes de la table d 5origine - ,ette commande correspond une cration et une insertion de &aleurs%

86

Slection de groupes de lignes en $onction d 5un crit.re Select O-+/ % ,*)/TP OdistinctQallP O(nomNcol0Q>P Krom nomNtab R#ere Ucondition2 G!*)A BT Onom-c<QnomNc;Q%P S@D+/G O/*TP prdicat< @/DQ*!P O/*TP prdicat; %%M !m"% La clause S@D+/G pour les groupes de lignes est similaire la clause RS.!. pour les lignes% .$: @ffic#er les dpartements dont le cumul des commissions est 2 J : Select deptno# sum9comm> !rom emp G43UP C0 deptno H+I8/G sum9comm> ' 0" - @ffic#er le dpartement a4ant le plus grand cumul de salaire : Select deptno# sum9sal> !rom emp G43UP C0 deptno H+I8/G sum9sal> ' 9Select M+F9SUM9sal>> !rom emp G43UP C0 deptno>" --oracle 97

27/08/2013

UNION

<prateurs sur plusieurs ta+les


<prateurs alg+ri#ues : union, inter ou intersect et minus

)xemple : ; tables de m'me structure et de contenus diffrents : depot< et deptot;: Structure : numprod, design, conditionnem, stoc7, ra4on, pu, t&a 17I<7 : lignes de une ou plusieurs tables (sans les doublons0 .$ : Lister les produits en stoc7s dans les ; dpBts : Select numpro# desi7n# pu# !rom depot1 U/83/ Select numpro# desi7n# pu# !rom depot<"
92

Oprateurs sur plusieurs tables


Oprateurs algbriques : union, inter ou intersect et minus
Exemple : 2 tables de mme structure et de contenus dffrents : depot1 et deptot2: Structure : numprod, design, conditionnem, stock, rayon, pu, tva DI ERENCE

Diffrence MINUS (oracle) ou EXCEPT (postgres) : lignes existant dans une table mais pas dans une autre Ex : Lister les produits en stocks dans le dpt1 uniquement : Select numpro, design, pu, from depot1 MINUS Select numpro, design, pu, from depot2;

98

INTERSECTION

Lignes communes plusieurs tables INTERSECT : les doublons sont limins.


Select . From . Where . INTERSECT Select . From . Where .;

Ex: Afficher les produits identiques qui sont en stock dans les 2 dpts : Select numpro, design, pu From depot1 INTERSECT Select numpro, design, pu from depot2; Rmq : Les noms de colonnes du rsultats sont les noms de colonnes du 1er SELECT.

99

SQL,D'L mise 4 *our : I7S)90, 1PD20), D)L)0)

95

*n tra&aille sur les tables .-A et D.AT% ,es commandes permettent d 5insrer des &aleurs dans des tables, de supprimer des &aleurs ou de mettre our des &aleurs%

Insertion : I7S)90
J insertion d 5une ligne dans une ta+le : +/S.!T +/T* nomNtab ( OnomNcol< O, nomNcol;P %%P 0 D@L).S ( &al< O,&al;P %0 M

96

Ex1: Insrer un nouveau dpartement : 50, EDUCATION, MIAMI : Insert INTO dept VALUES (50, EDUCATION , MIAMI ); Rmq : On n a pas citer les colonnes quand on insre des valeurs pour toutes les colonnes ! Ex2:Insrer un employ en ne connaissant que le numro, le nom, le job et le numro de dpartement : Insert into EMP (empno, ename, job, deptno) VALUES (7950, JOHN , TRAINER , 50); /* on doit citer les colonnes */
97

'ise 4 *our : 1PD20)


)pdate nomNtab S.T nomNcol1 e$p Onom-col1e$p%%%P R#ere conditionM

.$: !emplacer dans le dpartement =J, la localit Y,S+,@G*5 par YL*S @/G.L.S5 : )AD@T. dept S.T loc 1 YL*S @/G.L.S5 R#ere deptno1=JM @ugmenter la commission de <J\ pour tous les emplo4s : Update emp SET comm = comm * 1.1;

98

Suppression : D)L)0)
D.L.T. K!*- nomNtab OR#ere conditionPM .W<% Supprimer toutes les lignes de la table B*/)S : *elete !rom bonus" .W;% Supprimer les emplo4s a4ant une commission non /)LL : *elete !rom emp $%ere comm is not null" !m" : L 5utilisateur doit 'tre propritaire de la table ou a&oir les droit D.L.T. sur celle-ci% Si la clause RS.!. est absente, toutes les lignes seront supprimes%
96

9emar#ues
- L 5utilisateur "ui lance la commande doit 'tre propritaire de la table ou a&oir re]u le droit )AD@T. sur la table - Le &erbe S.T indi"ue les colonnes modifier% Seules les colonnes spcifies seront modifies% - Si la condition RS.!. est absente, toutes les lignes spcifies dans S.T seront modifies% - L 5effacement d 5une colonne est ralis en utilisant l 5option /)LL : S.T nomNcol 1 /)LLM

57

!alidation " #nnulation des transactions

51

1 2ali+ation +es mo+i#ications e##ect )es & C$%%IT [$or3 release]4 /5 work release par compatibilit) a,ec les ,ersions ant)rie res po r 6racle 5/ 1 'nn lation +es e##ets + / ne transaction & R$&&'#C( [$or3 release]4 /5 work release par compatibilit) a,ec les ,ersions ant)rie res po r 6racle 5/ Rmq & 7n *)n)ral0 a,ec S89 interacti#0 cha: e or+re est ne transaction "' tocommit . initialiser . 6;%. <onc les mo+i#ications ),ent elles se r)perc tent a tomati: ement "=ommit implicite po r l / tilisate r% 1 =6>>?@ et A699B'=C sont trDs tiles : an+ on tilise n lan*a*e proc)+ ral et/o ne inter#ace a,ec n lan*a*e +e pro*rammation.
52

Ex)ressions et onctions

58

)ne e$pression : combinaison de &ariables (contenu d 5une colonne0, de constantes et d 5autres e$pressions l 5aide des oprateurs : F, -, >, [ )ne fonction : routine a4ant des arguments et ramenant un rsultat (un argument peut 'tre une e$pression0 +l 4 a = t4pes d 5e$pressions : arit#mti"ues, c#aXnes de caract6res et date% @ c#a"ue t4pe 112 il 4 a des oprateurs spcifi"ues%

59

% .$emple de fonctions : /DL : /)LL D@L). (*racle0 permet de remplacer une &aleur /)LL par une &aleur significati&e% S4nta$e : /DL( e$p<, e$p;0 : ^ ren&oie la &aleur de e$p<, si e$p< non /)LL et de e$p; sinon%

.$: Select ename, sal, comm, salF/DL(comm, J0 from empM


N:L 1comm/ 74 ) comm/ si comm non N;LL ) 7 sinon

!m" : sous Aostgres"l : ,*@L.S,.(liste0 &aut la premi6re &aleur /*T /)LL.


55

PostrgreSQL
,*@L.S,.(arg<, arg;, , argn0 oV argi est une colonne d 5une La &aleur de la fonction est la premi6re &aleur /*T /)LL. table%

.W% Select ename, sal, comm, salF,*@L.S,.(comm, J0 from empM

(oncatnation : met bout bout ; c#aXnes de caract6res% .W% @ffic#er les noms des emplo4s concatn leur mtier% Select ename QQ Y - 5 QQ ob @S _/*- - -.T+.!` from empM
56

299<7DI : 9<17D et 0917(


!*)/D (n, m0 : permet d5arrondir le nombre n a&ec m dcimales% .W% /oms et salaires #oraires des emplo4s du dpartement ;J%, en renommant les colonnes% Select ename as Jnom# 43U/*9sal @ 1?0# <> as J sal aire %oraire K !rom emp $%ere deptno & <0" @ 1?0 %eure @mois @

T!)/, ( n , m0 : permet de tron"uer le nombre n m dcimales%

27/08/2013

<prateur de c oix : (2S)


,@S. RS./ cond< TS./ arg< RS./ cond< TS./ arg; % .LS. arg-n ./D .W% Dans emp, affic#er le salaire seul si deptn 1 <J, le salaire plein si deptno 1 ;J, le numro de dpartement sinon% S.L.,T ,@S. RS./ deptno1<J TS./ sal RS./ deptno 1 ;J TS./ salFcoalesce(comm,J0 .LS. deptno ./D K!*- empM
27/08/2013

?onctions sur ( a-nes de caract.res S)BST! (c#aine, pos, n0 : e$trait de la c#aine Yc#aine5, partir de la position pos, n caract6res (ou le reste de la c#aine, si n absent% )AA.! (c#aine0 ou L*R.! (c#aine0 : transforme en ma uscules (ou minuscules0 la c#aine% L./GTS (c#aine0 : donne le nombre de caract6res de la c#aine%

56

L)S $onctions de D20)S


T*N,S@! (col, format0 col est une colonne d5une table, ou une &aleur de t4pe D@T.% -et col (correspondant une date0 selon le format : TTTT anne, TT : ; c#iffres de l5anne, -- : mois, SS;G : #eure sur ;G #eures, EF. 1rans!ormer le date d-embauc%e au !ormat )**@MM@0000-. Select 13_5H+49%iredate# )**-MM-0000-> as date !rom emp" -*/TS , D@T : mois ( our0 en lettres Aar dfaut : la date : TTTT----DD
27/08/2013

2utres $onctions D20)

,)!!./TND@T. : date du our

27/08/2013

Insertion de lignes dans une ta+le 4 partir d 5une autre ta+le : I7S)90 (<racle)

+/S.!T +/T* nomNtab (nomNcol O, nomNcolP %%% 0 S.L.,T K!*- % RS.!. %%M .$: +nsrer dans une table B*/)S (ename, ob, sal, comm>, partir de la table emp, les emplo4s "ui sont S@L.S-@/ et dont la commission est suprieure ;Z\ du salaire : 8nsert 8nto C3/US Select ename# .ob# sal# comm Drom emp E%ere .ob&)S+,ESM+/- and 53MM ' 0.<? sal"

62

SQL,LDD (Description) (9)20) / 2L0)9 , D9<P

68

(ontraintes dKintgrit
Les contraintes d5intgrit sont des r6gles "ui doi&ent 'tre &rifies en permanence par le SGBD, "uel"ue soit l3opration effectue sur la base% Aarmi ces contraintes d3intgrit : la dfinition des cls primaires et des cls trang6res% l3indication des &aleurs possibles pour les attributs% !emar"ue : on les appli"uera dans la commande ,!.@T.%

(ontraintes dKintgrit
Principales contraintes P9I'29G L)G : dfinit une cl primaire (la &aleur est diffrente de /)LL et uni"ue dans la table0 12 toutes les lignes sont diffrentes ?<9)IG7 L)G : dfinit une cl trang6re% @ttribut (ou groupe0 fait rfrence une cl primaire dans une autre table 12 _contrainte d intgrit rfrentielle`% 7<0 71LL : la &aleur de l3attribut ne doit pas 'tre /)LL (dit 'tre renseigne0% 17IQ1) : c#a"ue tuple de la table doit a&oir une &aleur diffrente de celle des autres ou /)LL, pour l3attribut "ui a cette option% (M)(L : dfinit un ensemble de &aleurs possibles pour l3attribut% % D)?21L0 : donne une &aleur par dfaut (@ la cration du tuple, c3est la &aleur par dfaut "ui sera fournie, sauf saisie d3une &aleur0%
27/08/2013

(ontraintes dKintgrit (suite)


P9I'29G L)G, 7<0 71LL, 17IQ1) et (M)(L

,es contraintes ont le m'me t4pe de cons"uence : si on c#erc#e donner une &aleur un attribut "ui n5est pas conforme ce "ui est prcis dans la dfinition de l5attribut (&aleur /)LL s5il est dfini /*T /)LL ou A!+-@!T E.T, &aleur e$istant d s5il est dfini )/+Q). ou A!+-@!T E.T, &aleur n5appartenant pas au domaine spcifi par le ,S.,E0, alors le SGBD ren&oie un message d5erreur et ne modifie pas la base de donnes%

(ontraintes dKintgrit (suite)


?<9)IG7 L)G : contrainte

d5intgrit r$rentielle

,ons"uences <% Si on cre une table a&ec une cl trang6re, il faut "ue la table la"uelle on fait rfrence soit d cre 12 ordre logi"ue de cration des tables (l3ordre +/D.!S. pour la suppression0% ;% -'me c#ose pour la cration et la suppression de tuples (lignes0 : le m'me ordre de cration[suppression% =% !m" : on doit supprimer d3abord le tuple "ui rfrence, ensuite le tuple rfrenc, sinon +-A*SS+BL. de supprimer : c3est le ,@S par dfaut, S+/*/ : 12

(ontraintes dKintgrit (suite)


D3autres cas : DELETE CASCADE : suppression du tuple rfrenc et de tous ceu$ "u3il rfrence en cascade% DELETE SET N LL : suppression du tuple rfrenc et modification des tuples "ui rfrencent en assignant la &aleur /)LL leur cl trang6re : D.L.T. S.T /)LL% 'odi$ication de la cl primaire d5un tuple (cette cl tant r$rence par d5autres tuples )

Alusieurs cas : !n inter"it la mo"i#ication "$ t$ple : sit$ation par "%#a$t & +l faut supprimer d3abord toutes les rfrences ce tuple pour pou&oir ensuite le modifier0% % 'DATE CASCADE : m du tuple et des tuples "ui le rfrencent assignant la nou&elle &aleur de la cl primaire du tuple m au$ cls trang6res correspondantes dans les tuples "ui rfrencent% 'DATE SET N LL : modification du tuple rfrenc% Les tuples "ui le rfrencent se &oient assigns la &aleur /)LL (pour leurs cls trang6res0%

(9)20I<7 :
(9)20) 02BL) nomNtab ( UdefinitionNcolonne2 O, UdefinitionNcolonne2P 0M <N Cde$inition@colonneD est :
nom-col t4pe OD.K@)LT &alNdefautP O/*T /)LLP O)/+Q).P OautreP 0M

<N autre peut 6tre : - !.K.!./,.S nomNtab O ( nomNcol O, nomNcolP 0 P M - ,S.,E conditionM
9m# : *n peut nommer les contraintes

77

)xemple ,!.@T. T@BL. li&re ( codeNl +/T.G.! A!+-@!T E.T, titreNl D@!,S@!(=J0, prenom D@!,S@!(=J0 0M @&ec le nom de la contrainte : 12 ,!.@T. T@BL. auteur ( numNa +/T.G.!, nom D@!,S@!(=J0, (<7S092I70 cleNauteur A!+-@!T E.T (numNa0 0M

SQL : (9)20) 02BL) , (ontraintes

(ontraintes :

7<0 71LL : si on ne spcifie rien pour la &aleur d 5un attribut, il prend la &aleur /)LL (indtermine0% Si la clause /*T /)LL est prsente, on doit spcifier une &aleur non nulle pour cet attribut% D)?21L0 : on peut spcifier une &aleur par dfaut pour un attribut la cration de la table (cette &aleur doit 'tre du t4pe de l5attribut0% 17IQ1) : spcifie "u5un attribut (ou groupe 0 est une cl candidate% )n seul tuple correspond une &aleur de cette cl% +l est conseill de spcifier /*T /)LL pour un attribut dclar )/+Q). ("ui n 5est pas cl primaire0%

SQL : (9)20) 02BL) , (ontraintes

.$emple : ,reate table fournisseurs ( nomNfou c#ar(;Z0 /*T /)LL )/+Q). 0M (M)(L : spcifie une contrainte "ui doit 'tre &rifie tout moment par les tuples concerns% .$emple : (,reate table % (cliNt4pe c#ar(<H0 D.K@)LT YA@!T+,)L+.!5 ,S.E (cliNt4pe +/ (YA@!T+,)L+.!5, Y A-. 5, Y @)T!. 50

SQL : (9)20) 02BL) / (ontraintes (suite) La "uantit li&re doit 'tre infrieure ou gale la "uantit commande% "teNli& integer default J ,S.,E ("teNli& U1 "t]Ncom%0 @&ec /*T /)LL : ,S.,E (nomNfou +S /*T /)LL0 %% +nter&alle : % ,S.,E &alNpri$ B.TR../ <J @/D GJ (ontrainte d 5entit : P9I'29G L)G <- ,reate table client ( numcli c#ar(Z0 not null primar4 7e4, %%0M ;- Si la cl est compose (ici ; attributs 0 : ,reate table lignNcomm (ref c#ar(Z0 not null, design c#ar(<J0 not null, primary Oey (re$, design), %%0M

SQL : (9)20) 02BL) / (ontraintes (suite)

(I r$rentielle : 12 gestion correcte des modifications de la cl trang6re dans la table "ui rfrence et de la cl primaire dans la table rfrence% Soient les relations : client(numcl, %0 et commande(numcom, numcl,%%0 si on a oute une commande 12 il faut "ue le client associ e$iste%

SQL : (9)20) 02BL) / (ontraintes (suite) I solutions pour grer les ,ontraintes d3intgrit rfrentielles : <% Konction spcifi"ue crite par le programmeur : solution souple (on 4 met ce "u 5on &eut0 mais fastidieuse (une fonction dans c#a"ue application0% ;% _ trigger ` appropri dclenc# automati"uement% 1 une fonction compile, crite une fois et e$cute automati"uement c#a"ue fois "u5une action particuli6re est effectue% =% Drification assure par le SGBD automati"uement : la contrainte est dclare e$plicitement une fois pour toutes (&alable pour tout programme et utilisateur0% 12 adopte par la norme SQL-:; ou SQL-; (et donc dans beaucoup de SGBD0

SQL : (9)20) 02BL) / (ontraintes (suite) Dans les SGBD, mise en au&re de la solution = (intgrit rfrentielle dclarati&e0% .$emple : ,reate table client (numNcl c#ar(Z0 not null primar4 7e4, 0M ,reate table commande(numcomm integer not null primar4 7e4, % /umNcom c#ar(Z0 not null !.K.!./,.S client, %0M Si la cl trang6re 1 plusieurs attributs 12 utiliser K*!.+G/ E.T% K*!.+G/ E.T (atr<Ncle, attr;Ncle0 !.K.!./,.S (cleNprim<0% *n a oute la clause sui&ante : % /umNcom references client O<7 1PD20) PoptionQP O<7 D)L)0) PoptionQP oV option peut 'tre l 5une des options sui&antes

Point de 3ue de la ta+le r$rence Si on modifie la &aleur d 5une cl primaire rfrence, SQL permet de raliser automati"uement certaines oprations : 7< 2(0I<7 : "ui&alent ne pas mettre de clause */ )AD@T. ou */ D.L.T. 12 refus de modifier ou supprimer une cl primaire% Situation pas dfaut% <7 1PD20) A<7 D)L)0); (2S(2D) : si )AD@T. d 5une cl primaire rfrence 12 les modif sont rpercutes sur les relations "ui rfrencent% S+ D.L.T. 12 suppression des cls "ui rfrencent%

Point de 3ue de la ta+le r$rence


S)0 71LL : si une cl primaire rfrence est modifie 12 on les met /)LL l oV elles sont rfrences (condition : les parties de la cl trang6res doi&ent permettre les &aleurs /)LL0% S)0 D)?21L0 : si la cl primaire est modifie 12 la &aleur de la cl trang6re "ui rfrence est mise une &aleur par dfaut (dfinie au pralable0 .$emple : >" deptno 9)?)9)7()S dept <7 1PD20) (2S(2D) <7 D)L)0) S)0 71LLE

'odi$ication de la structure d 5une ta+le : 2L0)9


2L0)9 T@BL. tableNname 2DD columnNname datat4pe M @LT.! T@BL. tableNname D9<P ,*L)-/ columnNname M @LT.! T@BL. tableNname '<DI?G columnNname datat4pe M
.W : @LT.! T@BL. emp @DD (diplBme c#ar(;J00M @LT.! T@BL. .-A (sal numer (9,;00M

Suppression d 5une ta+le : D9<P


D!*A T@BL. nom-tabM .$ : Drop table bonusM
87

SQL , L(D (ontrRle des acc.s 4 la +ase et aux o+*ets

81

(9)20I<7 D)S 10ILIS20)19S 2S)( P9ISIL)G)S G!@/T O,*//.,TQ!.S*)!,.QDB@P T* nom-user +D./T+K+.D BT mot-passeM .W: Le DB@ cr l 5utilisateur )S.!< a&ec les pri&il6ges de conne$ion et de cration d 5ob ets : Grant connect, resource to )S.!< identified b4 lambdaM

9eprise de pri3il.ges

!.D*E. O,*//.,TQ!.S*)!,.QDB@P K!*- nom-user M .W : !e&o7e resource from user<M

82

Attribution de droits sur les objets Les o32ets doi<ent =tre la proprits de l->,tilisate,r o, ?,->il a re@, les droits ncessaires : A"AN# BS L C#D0NS "#DD L # D;!DA# D0ND EDALLF o, 3ien A"AN# ;!DA# 1 nomGcol/ nomGcol/ H4 I ON nomGta31/ nomGta32/ H #O I K0#L A"AN# O!#0ON& B;1/ ;2/ ...D!;JL0CF

88

*V : +/D.W : donne la possibilit de crer des inde$% .$emple : ,!.@T. Ouni"ueP +/D.W ind */ nom-tab ( nom-col< OascQdescP, nom-col; OascQdescP, 0M [> pour amliorer les performances lors de la manipulation >[ - @LL : tous les droits - L 5option : _R+TS ,S.,E *AT+*/` signifie "ue celui a "ui l 5on accorde les droits spcifis peut lui-m'me les transmettre d 5autres% - .W : Grant select, update on emp to user< Lit# c#ec7 optionM

2nnulation des droits


!.D*E. OS.L.,TQ %%P */ nom-tab, nom-tab;, %%K!*- O)<, );, Q A)BL+,P .W : !e&o7e update on cours to user;M
89

(ration d 5un synonyme pour une ta+le

,!.@T. OA)BL+,P ST/*/T- nom-s4n K*! nom-tableM .W: )n utilisateur se cre un s4non4me pour s4s%emp : ,reate s4non4m l-emp Kor STS%empM L 5utilisateur STST.- (DB@0 cre un s4non4me accessible tout le monde pour sa table emp : .W: ,reate public s4non4m p-emp for STS%empM

85

86

Vous aimerez peut-être aussi