Você está na página 1de 19

APNDICE B

Uma viso geral da SQL3


B.1 INTRDU!"
A SQL3 #rovavelme$%e ser& ra%i'i(ada (omo )m #adro
*+SQL,--./ $a 0#o(a em 1)e es%e livro es%iver $o #relo.
Por0m2 #re'erimos $o 3asear $ossas dis()ss4es a$%eriores da
SQL $a SQL32 em #ar%e #elas ra54es e6#li(adas $o Ca#7%)lo 8 e
em #ar%e #or1)e 9 #ara di5er o m7$imo 9 a(:amos a SQL3 )m
#o)(o (o$')sa. Por o)%ro lado2 se$%imos 1)e deveria ser
i$(l)7da em alg)m l)gar #elo me$os )ma avalia;o das
#ri$(i#ais (ara(%er7s%i(as da SQL3< da7 es%e a#=$di(e.
E (laro 1)e a SQL3 i$(l)i a %o%alidade da SQL,->2 e6(e%o #or
alg)$s re()rsos se()$d&rios *$e$:)m deles dis()%ido $es%e
livro/ 1)e 'oram deli3eradame$%e des(ar%ados? SQLCDE2
i$%eiros sem si$al em l)gar de $omes de (ol)$as em RDER B@2
+i$%rod)(ers. em ide$%i'i(adores2 (er%os (o$A)$%os de
(ara(%eres de'i$idos #elo )s)&rio2 e (om#ara;4es e %rad);4es2
al0m de o)%ros i%e$s. Co$%)do2 #or ra54es B3vias2 vamos $os
(o$(e$%rar a1)i $as (ara(%er7s%i(as a(res(e$%adas desde 1-->
e em#regaremos o $ome +SQL3. #or (o$ve$i=$(ia 1)a$do $os
re'erirmos es#e(i'i(ame$%e a esses re()rsos. Dessas $ovas
(ara(%er7s%i(as2 de lo$ge as mais sig$i'i(a%ivas so a1)elas
rela(io$adas (om %i#os de dados de'i$idos #elo )s)&rio e
ass)$%os (orrela%os2 1)e des(reveremos $as Se;4es B.> a B.C.
s mais im#or%a$%es de$%re os o)%ros re()rsos sero
e6ami$ados ra#idame$%e $a Se;o B.D. No%a? )ma a$&lise
de%al:ada e (r7%i(a do ass)$%o das Se;4es B.> a B.C #oder&
ser e$(o$%rada $a re'er=$(ia E3.3F.
A$%es de e$%rarmos em de%al:es so3re a SQL32 devemos
me$(io$ar algo a res#ei%o da SQLG E8.DF. $ome +SQLG. se
re'ere i$'ormalme$%e a )m #roAe%o de (o$siderar #oss7veis
gra)s de i$%egra;o e$%re SQL e Gava *o #roAe%o 0 )m es'or;o
(o$A)$%o e$volve$do alg)$s dos mais (o$:e(idos 'or$e(edores
de SHBDs de SQL/. A Par%e desse #roAe%o lida (om a SQL
i$(or#orada a #rogramas em Gava< a Par%e 1 se rela(io$a (om a
id0ia de i$vo(ar Gava a #ar%ir de SQL *#or e6em#lo2 (:ama$do
)m #ro(edime$%o arma5e$ado es(ri%o em Gava/< aPar%eII es%)da
a #ossi3ilidade de )so de (lasses do Aava (omo %i#os de dados
de SQL *#or e6em#lo2 (omo )ma 3ase #ara a de'i$i;o de
(ol)$as em %a3elas de SQL/. Te($i(ame$%e2 $e$:)ma dessas
a%ividades 'a5 #ar%e da SQL3 (omo %al2 mas a SQLG Par%e o A&
%i$:a sido #)3li(ada *#elo me$os $os EUA/ (omo o #rimeiro
(om#o$e$%e de )ma $ova Par%e 1J do es3o;o do #adro SQL
E8.>>F2 e 0 #rov&vel 1)e a SQLG Par%es 1 e II ve$:a logo a
seg)ir2 %alve5 $a 0#o(a em 1)e a SQL3 'or #)3li(ada
'ormalme$%e.
Tam30m 0 #rov&vel 1)e )ma $ova verso de SQL,CLI *(o$s)l%e o
Ca#7%)lo 8/ s)rAa $a mesma 0#o(a $o mer(ado.
KeAamos alg)$s (ome$%&rios edi%oriais a res#ei%o do %e6%o a
seg)ir? #rimeiro2 )%ili5aremos (om 're1L=$(ia o (ara(%ere +M+
em $omes de (ol)$as em $ossos e6em#los *(omo 'i5emos em %odo
o livro/2 em3ora +M+ $o seAa $a verdade )m (ara(%ere v&lido
em SQL3< %am30m )saremos o si$al de #o$%oNeNv7rg)la +<+ (omo
)m %ermi$ador de i$s%r);o *mais )ma ve52 re#e%i$do e6em#los
a$%igos/. Em seg)$do l)gar2 devemos dei6ar (laro 1)e as
dis()ss4es seg)i$%es $o sero $em de #er%o e6a)s%ivas. Por
'im2 0 (laro2 'a5 #ar%e da $a%)re5a desses %emas o 'a%o de
alg)$s de%al:es #ossivelme$%e %erem sido al%erados $a 0#o(a
em 1)e a SQL3 'or ra%i'i(ada. Pedimos des()l#as ao lei%or.
OOC
B.> NKS TIPS DE DADS
Como s)geri) a se;o a$%erior2 os as#e(%os mais imedia%ame$%e
vis7veis da SQL3 es%o %odos rela(io$ados (om %i#os de
dados.P Q& $ovos %i#os em3)%idos o) i$%er$os *#ara sermos
#re(isos2 $ovos %i#os es(alares em3)%idos/< :& $ovos
geradores de %i#os em3)%idos *a SQL3 os (:ama (o$s%r)%ores de
%i#os/< e :& )ma i$s%r);o CREATE T@PE 1)e #ermi%e ao )s)&rio
de'i$ir se)s #rB#rios %i#os *al0m 0 (laro2 de )ma i$s%r);o
DRP T@PE (orres#o$de$%e/. Kamos e6ami$ar (ada )m desses
re()rsos.
Ti#os es(alares em3)%idos
So admi%idos %r=s $ovos %i#os es(alares em3)%idos *o)
i$%er$os/?
BLEAN? o %i#o BLEAN 0 $a%)ralme$%e )m %i#o de valor
verdade< os o#eradores 3oolea$os )s)ais *NT2 AND2 R/ so
re(o$:e(idos2 e )ma e6#resso 3oolea$a #ode a#are(er em %odos
os l)gares $os 1)ais (os%)mam o(orrer e6#ress4es es(alares
*sem rigor/. Por0m2 o3serve 1)e a SQL (o$sidera a e6is%=$(ia
de %r=s valores verdade2 e $o dois2 (omo vimos $o Ca#7%)lo
1R< os li%erais (orres#o$de$%es so TRUE2 SALSE e UNTNUN.
Todavia2 o %i#o BLEAN i$(l)i de 'a%o a#e$as dois valores2 e
$o %r=s< o valor verdade des(o$:e(ido *)$V$oW$/ 0
re#rese$%ado 9 de modo 3as%a$%e i$(orre%oI 9 #or $)lo *#or
e6em#lo2 a a%ri3)i;o de UNTNUN a )ma vari&vel do %i#o
BLEAN $a verdade de'i$ir& essa vari&vel (omo $)la/. Para
e$%e$der o 1)a$%o 0 s0ria essa de'i(i=$(ia2 vo(= deve medi%ar
so3re a a$alogia de )m %i#o $)m0ri(o 1)e )%ili5asse o valor
$)lo em ve5 de 5ero #ara re#rese$%ar 5ero.
)%ro de%al:e si$g)lar 0 o 'a%o de 1)e a SQL3 *es%ra$:ame$%e/
$o (o$sidera )ma sim#les re'er=$(ia X vari&vel 3oolea$a (omo
)ma i$s%Y$(ia da1)ilo 1)e (:amamos Z#rim&rio (o$di(io$al[ $o
A#=$di(e A. Assim2 #or e6em#lo2 se B 'or do %i#o BLEAN )ma
(l&)s)la UQERE da 'orma UQERE B $o ser& v&lidaI
G)$%ame$%e (om o %i#o BLEAN2 a SQL3 i$%rod)5 dois $ovos
o#eradores de agregados2 EKER@ 9 e $o ALL2 #or alg)ma ra5o
9 e AN@. Em am3os os (asos2 o arg)me$%o 0 )ma (ol)$a de
valores BLEAN *1)ase (er%ame$%e )ma (ol)$a derivada (omo2
#or e6em#lo2 a (l&)s)la UQERE2 AN@ *QDE[ >JJ/ de UQERE/. Se a
(ol)$a 'or va5ia2 am3os os o#eradores re%or$aro des(o$:e(ido
*o) mel:or2 $)lo/< PP se a (ol)$a 'or $o va5ia2 EKER@
re%or$ar& verdadeiro se %odo valor $a (ol)$a 'or verdadeiro e
re%or$ar& 'also em (aso (o$%r&rio2 e AN@ re%or$ar& 'also se
%odo valor $a (ol)$a 'or 'also e re%or$ar& verdadeiro em (aso
(o$%r&rio. Como o(orre (om o)%ros o#eradores de agregados de
SQL2 os $)los so elimi$ados a$%es de ser 'ei%a a agrega;o.
\ CLB *+o3Ae%o de (ara(%eres e6%e$so. 9 (ara(%er large
o3Ae(%/? esse %i#o re#rese$%a s%ri$gs de (ara(%eres de
(om#rime$%o vari&vel (om %ama$:o esse$(ialme$%e ilimi%ado. Um
me(a$ismo lo(ali5ador asso(iado2 a$&logo *a%0 (er%o #o$%o/ ao
'amiliar me(a$ismo de ()rsor2 #ermi%e o a(esso a (ada
'ragme$%o desses s%ri$gs. ])i%os o#eradores )s)ais de s%ri$gs
de (ara(%eres $o so admi%idos $o (aso desses s%ri$gs< e$%re
os 1)e so re(o$:e(idos es%o +^+ e LITE.
\ BLB *+3Ae%o 3i$&rio e6%e$so./? a$&logo ao a$%erior2
e6(e%o #elo 'a%o de 1)e os s%ri$gs so se1L=$(ias 'ormadas de
+o(%e%os. 9 is%o 02 3_%es 9 em ve5 de (ara(%eres.
Ti#os gerados
s geradores de %i#os de SQL3 so RES2 ARRA@ e RU. Por0m2 o
`$i(o modo de de'i$ir )m +%i#o
RES. 0 im#li(i%ame$%e2 (omo )m e'ei%o (ola%eral da de'i$i;o
de )m +%i#o es%r)%)rado. #or meio de
CREATE T@PE *veAa o)%ros de%al:es mais adia$%e $es%a se;o/<
dessa 'orma2 vamos ig$orar RES #or e$N
P a %e$%ador a(res(e$%ar 1)e )ma das #ar%es mais
imedia%ame$%e i$vis7veis 0 a de +dom7$ios. $o es%ilo de SQL
*(o$s)l%e os Ca#7%)los 8 e C/ 1)e #are(e es%ar se$do
sile$(iosame$%e ig$orada.
OOD PP Com#are (om o (om#or%ame$%o de (o$di;4es +%odos o)
1)ais1)er. so3 esse as#e(%o *(o$s)l%e o A#=$di(e A/.
1)a$%o. Q)a$%o aos %i#os ARRA@ e RU2 eles $o #odem
realme$%e ser de'i$idos2 (omo %ais *$o :& $e$:)ma i$s%r);o
CREATE ARRA@ T@PE o) CREATE RU T@PE/< eles sB #odem ser
)sados2 a%rav0s da i$vo(a;o +em li$:a. do gerador de %i#o
releva$%e em *#or e6em#lo/ )ma i$s%r);o CREATE TABLE. Como
e6em#lo2 a1)i es%& )ma il)s%ra;o do )so de )m %i#o ARRA@?
CREATE TABLE KENDAS
* ITE]M CQAR*C/2
QDE INTEHER ARRA@ E1>F2
PRI]AR@ TE@ * ITE]M / /
A1)i2 a (ol)$a QDE %em )m valor de arra_ *o) ma%ri5/< )m
valor QDE (o$sis%e em )m arra_ de 1> eleme$%os2 (ada )m do
%i#o INTEHER. No%a? os arra_s de SQL es%o limi%ados a )ma
dime$so e2 #or s)a ve52 se)s eleme$%os $o #odem ser arra_s.
A1)i es%& )m e6em#lo de )ma (o$s)l%a so3re KENDAS?
SELECT ITE]M
SR] KENDAS
UQERE QDE E3F [ 1JJ
*+3%er $`meros de i%e$s (orres#o$de$%es a i%e$s ()Aas ve$das
de mar;o e6(ederam 1JJ.< o3serve a re'er=$(ia s)3s(ri%a/. E
a1)i es%& )m e6em#lo de i$ser;o de )ma li$:a?
INSERT INT KENDAS * ITE]M2 QDE
KALUES * bc83>Jd2
ARRA@ EJ2J2J2J2J2J2J2J2J2J2J2JF/
*o3serve o li%eral arra_/.
s %i#os RU so semel:a$%es. Por e6em#lo?
CREATE TABLE CNSU
* CNSUM CQAR*3/2
ENDER RU * RUA CQAR *CJ/2
CIDADE CQAR*>C/2
ESTAD CQAR*>/2
CEP CQAR*C/ /
PRI]AR@ TE@ * CNSUM / /
Amos%ra de (o$s)l%a?
SELECT CNSUM
SR] CNSU
UQERE ENDER.ESTAD ^ bCAd
Amos%ra de i$ser;o?
INSERT INT CNSU * CNSUM2 ENDER /
KALUES * bJJ1d2 RU * bAv. Brasil2 1DJJd2
bBl)me$a)2 bSCd2 b>JCJJd / /
Ti#os DISTINCT
A b$ova i$s%r);o CREATE T@PE (ria )m %i#o de'i$ido #elo
)s)&rio? ele 0 )m %i#o DISTINCT o) )m %i#o +es%r)%)rado.
*o3serve de #assagem 1)e os %i#os gerados 9 ver a s)3se;o
a$%erior 9 $o so (o$sideradas %i#os +de'i$idos #elo
)s)&rio. $o mesmo se$%ido/. Nes%a s)3se;o2 des(reveremos
a#e$as os %i#os
DISTINCT. Um %i#o DISTINCT *es%a3ele(emos +DISTINCT. em
le%ras mai`s()las #ara e$'a%i5ar 1)e a #alavra $o es%& se$do
)sada em se) se$%ido de li$g)agem $a%)ral/ 0 )m (aso es#e(ial
limi%ado de %i#o de'i$ido #elo )s)&rio. Em #ar%i()lar2 s)a
im#leme$%a;o '7si(a deve e$volver e6a%ame$%e )m dos %i#os
es(alares em3)%idos. A1)i %emos a si$%a6e #ara a de'i$i;o de
)m %i#o DISTINCT?
CREATE T@PE Z$ome de %i#o[
AS Z$ome de %i#o es(alar em3)%ido[ SINAL
E Zo#;4es de (as%[ 1
Zlis%ae(omev7rg)las de es#e(i'i(a;4es de m0%odos[ 1
A1)i es%& )m e6em#lo?
CREATE T@PE PES AS NU]ERIC *C21/ SINAL
E6#li(a;o?
1. %i#o :erda os o#eradores de (om#ara;o 1)e se a#li(am ao
%i#o s)3Aa(e$%e *is%o 02 o %i#o NU]ERIC/. Por0m2 o3serve 1)e
os valores de PES so (om#arados )$s (om os o)%ros e (om
$ada mais. Assim2 #or e6em#lo2 se PS 0 )ma vari&vel SQL do
%i#o PES2 a (om#ara;o a seg)ir $o 0 v&lida?
PC [ 182O
Por0m2 s)#o$doNse 1)e %e$:am sido es#e(i'i(adas Zo#;4es de
(as%[ a#ro#riadas *omi%imos os de%al:es a1)i/2 as (om#ara;4es
a seg)ir2 em (o$%ras%e2 seriam am3as v&lidas?
PS [ CAST * 182O AS PES
CAST * PS AS NU]ERIC / [ 182O
Al0m disso2 as d)as i$vo(a;4es de CAST mos%rados #oderiam ser
a3reviadas #ara PES*182O/ e NU]ERIC*PS/2 res#e(%ivame$%e.
No%a? os $omes de ')$;4es PES e NU]ERIC 'oram es#e(i'i(ados
#elo de'i$idor de %i#o *$as Zo#;4es de (as%[./ 9 eles $o
es%o im#l7(i%os $o $ome do %i#o 1)e es%& se$do de'i$ido o)
$o $ome de se) %i#o s)3Aa(e$%e.
>. 3serva;4es a$&logas a#li(am X a%ri3)i;o 9 is%o 02 )m
valor PES #ode ser a%ri3)7do a#e$as a )m des%i$o do %i#o
PES *e $e$:)m o)%ro #ode ser a%ri3)7do a %al des%i$o/.
3. %i#o PES $o :erda a)%oma%i(ame$%e o)%ros o#eradores do
%i#o s)3Aa(e$%e. Co$%)do2 as Zes#e(i'i(a;4es de m0%odos[
*$e$:)ma mos%rada $o e6em#lo/ #ermi%em ao de'i$idor de %i#o
es#e(i'i(ar +m0%odos. 9 (o$s)l%e a #rB6ima s)3se;o 9 1)e se
a#li(am a valores e vari&veis do %i#o PES. Pro(edime$%os e
')$;4es (om)$s de SQL %am30m #odem ser de'i$idos #ara o#erar
so3re valores e vari&veis do %i#o PES. Por e6em#lo2
#oder7amos de'i$ir )ma ')$;o (:amada S]APES 1)e somasse
dois #esos #ara o3%er )m %er(eiro2 #ermi%i$do assim ao
)s)&rio es(rever e6#ress4es (omo a seg)i$%e?
S]APES * PC12 PS> /
S]APES * PS12 PES * 182O
8. A es#e(i'i(a;o SINAL deve a#are(er. Co$s)l%e a s)3se;o
imedia%ame$%e a seg)ir.
Ti#os es%r)%)rados
A o)%ra es#0(ie de %i#o de'i$ido #elo )s)&rio 0 )m %i#o
es%r)%)rado. A1)i es%o dois e6em#los? P
OOR P Na realidade o seg)$do e6em#lo 'al:a2 #or1)e BEHIN e
END so #alavras reservadas.
9
CREATE T@PE PNT AS * c SLAT2 @ SLAT / SINAL
CREATE T@PE SEHLIN AS * BEHIN PNT2 END PNT / SINAL
E6#li(a;o?
1. Di5emos 1)e o %i#o PNT %em a%ri3)%os c e @ *1)e $o
devem ser (o$')$didos (om os a%ri3)%os de %)#las e rela;4es
de'i$idos $a Par%e II des%e livro/< da mesma 'orma2 di5emos
1)e o %i#o SEHLIN %em a%ri3)%os BEHIN e END. Um a%ri3)%o #ode
ser de 1)al1)er %i#o (o$:e(ido.
>. I$'eli5me$%e2 os a%ri3)%os me$(io$ados $a de'i$i;o de )m
%i#o es%r)%)rado (o$s%i%)em a im#leme$%a;o '7si(a de valores
do %i#o em 1)es%o2 $o )ma +re#rese$%a;o #oss7vel. $o
se$%ido do Ca#7%)lo C. Desse modo2 os #o$%os $o e6em#lo so
im#leme$%ados 'isi(ame$%e em %ermos de s)as (oorde$adas
(ar%esia$as.
3. Cada de'i$i;o de a%ri3)%o (a)sa a)%oma%i(ame$%e a
de'i$i;o de )m o#erador o3servador *em %ermos i$'irmais2
+ge%./ e de )m o#erador modi'i(ador *em %ermos i$'ormais2
+se%./2 #ara os 1)ais 0 )sada a si$%a6e de 1)ali'i(a;o de
#o$%o.P Por e6em#lo2 seAam f2 P e LS vari&veis de SQL dos
%i#os SLAT2 PNT e SEHLIN2 res#e(%ivame$%e. E$%o2 os i%e$s
a seg)ir so %odos v&lidos?
P.c ,P o3%0m o valor do (om#o$e$%e c do #o$%o P ,
LS.BEHIN.c ,P o3%0m o valor do (om#o$e$%e c do P,
, #o$%o BEHIN do segme$%o de li$:a LS ,
SET P.c ^ f < ,P de'i$e o (om#o$e$%e c do #o$%o P (omo
, o valor de f ,
SET LS.BEHIN.c ^ f < ,b de'i$e o (om#o$e$%e c do #o$%o BEHIN
,
,P do segme$%o de li$:a LS (om o P,
,P valor de O P,
8. s `$i(os o#eradores dis#o$7veis #ara esses %i#os al0m dos
me$(io$ados 9 #or1)e $o de'i$imos $e$:)m %i#o adi(io$al 9
so os o#eradores de (om#ara;o de ig)aldade e a%ri3)i;o2
dis#o$7veis #ara %odo %i#o. 3serve em #ar%i()lar 1)e os
+sele%ores. PNT e SEHLIN *$o se$%ido do Ca#7%)lo C/ $o so
de'i$idos de modo a)%om&%i(o e2 #or%a$%o2 1)e $o e6is%e
$e$:)m li%eral PNT e
SEHLIN.
C. A es#e(i'i(a;o SINAL sig$i'i(a 1)e 1)al1)er %e$%a%iva de
de'i$ir o)%ro %i#o (omo )m s)3%i#o a#ro#riado de 1)al1)er )m
desses %i#os 'al:ar& *(o$s)l%e a se;o B.3/< is%o 02 esses
%i#os so am3os %i#os 'ol:as e #erma$e(ero assim.
D. s %i#os PNT e SEHLIN *o) %i#os es%r)%)rados em geral/
so +e$(a#s)lados.g I$'eli5me$%e2 a res#os%a a essa 1)es%o
#are(e de#e$der do (o$%e6%o. Por e6em#lo2 1)a$do )m %i#o
es%r)%)rado 'or )sado (omo o %i#o de alg)ma (ol)$a2 a
res#os%a ser& sim *mais o) me$os/. Por0m2 1)a$do ele 'or
)sado (omo o %i#o de alg)ma %a3ela 9 ver a Se;o B.8 9 a
res#os%a ser& de'i$i%ivame$%e $o.
No%a? a ra5o #ela di5emos +mais o) me$os. $o #rimeiro (aso 0
1)e2 mesmo $esse (aso2 os o#eraN dores +ge% e se%. e6#4em
e'e%ivame$%e os a%ri3)%os do %i#o *(omo A& o3servamos/2 e
esses o#eradores $o #odem ser a$)lados. Talve5 devamos )sar
o %ermo +#se)doe$(a#s)lado. 9 o) %alve5 #se)doNes(alar #ara
'a5er re'er=$(ia ao #rimeiro (aso.
A1)i es%& e$%o a si$%a6e geral #ara de'i$i;o de )m %i#o
es%r)%)rado 1)e $o 0 )m s)3%i#o #rB#rio *(o$s)l%e a Se;o
B.3 #ara ver )ma des(ri;o do (aso de s)3%i#o #rB#rio/?
CREATE T@PE Z$ome de %i#o[
AS * Zlis%ae(omev7rg)las de de'i$i;4es de a%ri3)%os[
P Devemos o3servar 1)e o +modi'i(ador. $o 0 verdadeirame$%e
)m modi'i(ador $o se$%ido do Ca#7%)lo C 9 is%o 02 )m o#erador
de a%)ali5a;o #or1)e ele 0 de'i$ido #ara re%or$ar )m valor.
As (o$se1L=$(ias *desagrad&veis/ desse 'a%o i$'eli5me$%e
es%o al0m do es(o#o des%e 3reve a#=$di(e. Co$s)l%e a
re'er=$(ia E3.3F #ara ver )ma des(ri;o de%al:ada. OO-
E Zim#leme$%a;o de %i#o re'[ F
E E NT F INSTANTIABLE 1
E NT 1 SINAL
E Zlis%ae(omev7rg)las de es#e(i'i(a;4es de m0%odos[ F
E6#li(a;o?
1. A Zlis%ae(omev7rg)las de de'i$i;4es de a%ri3)%os[ $o deve
ser va5ia.
>. A Zim#leme$%a;o de %i#o re'[ 0 dis()%ida $a Se;o B.8.
3. NT INSTANTIABLE sig$i'i(a 1)e o %i#o 0 )m %i#o d)mm_ $o
se$%ido do Ca#7%)lo 1-. #adro 0 INSTANTIABLE.
8. NT SINAL sig$i'i(a 1)e o %i#o #ode %er s)3%i#os #rB#rios.
SINAL sig$i'i(a 1)e $o #ode.
C. s o#eradores 1)e se a#li(am a valores e vari&veis de )m
de%ermi$ado %i#o es%r)%)rado T so?
a. s o3servadores e modi'i(adores de a%ri3)%os des(ri%os
a$%eriorme$%e.
3. A%ri3)i;o2 +^+ e #ossivelme$%e.Z. *os dois `l%imos desses
o#eradores so am3os de'i$idos #or meio de )ma i$s%r);o
se#arada2 CREATE RDERINH SR T2 em3ora $o es%eAa m)i%o
(laro o mo%ivo #elo 1)al deve ser $e(ess&rio (riar )ma
orde$a;o a#e$as #ara de'i$ir ++.
(. s #ro(edime$%os e as ')$;4es de'i$idas #ara )sar )m
#arYme%ro do %i#o T *o) de 1)al1)er s)#er%i#o #rB#rio desse
%i#o 9 (o$s)l%e a Se;o B.3/.
d. s m0%odos de'i$idos #ara )sar )m #arYme%ro de +des%i$o.
es#e(ial do %i#o T o) 1)al1)er s)#er%i#o #rB#rio desse %i#o
*mais )ma ve52 (o$s)l%e a Se;o B.3/. No%a? em $osso (aso os
+m0%odos. so m0%odos $o se$%ido %radi(io$al de o3Ae%os
*(o$s)l%e o Ca#7%)lo >8/ 9 is%o 02 so o#eradores 1)e %ra%am
)m #arYme%ro (omo es#e(ial. Se o m0%odo ] 'or de'i$ido #ara
%i#o Te c 'or )ma e6#resso do %i#o T2 e$%o ser& )sada a
si$%a6e es#e(ial de 1)ali'i(a;o de #o$%o c.] #ara i$vo(ar ]
so3re c. *S)#omos a1)i2 #or sim#li(idade 1)e ] $o )sa $e$:)m
o)%ro #arYme%ro./
As Zes#e(i'i(a;4es de m0%odos[ de'i$em +assi$a%)ras de
es#e(i'i(a;o. de m0%odo $o se$%ido dos Ca#7%)los 1- e >8.
Por0m2 elas %am30m i$(l)em )ma gra$de 1)a$%idade de o)%ros
ma%eriais2 se$do a maior #ar%e deles de $a%)re5a de
im#leme$%a;o e *$a o#i$io des%e a)%or/ i$ade1)ados.
(Bdigo real 1)e im#leme$%a os m0%odos 0 de'i$ido em o)%ro
l)gar.
B.3 QERAN!A DE TIP
s)#or%e de SQL3 #ara a :era$;a de %i#o $o 0 m)i%o
or%ogo$al2 #ois se a#li(a a#e$as a %i#os es%r)%)rados< ele
$o admi%e a :era$;a de %i#o #ara %i#os em3)%idos2 geradosP
o) DISTINCT. Al0m disso2 ele $o re(o$:e(e de modo alg)m a
:era$;a m`l%i#la. Nes%a se;o2 (o$sideraremos a :era$;a de
%i#o some$%e $o (aso de %i#os es%r)%)rados +#se)doNes(alares.
*o 1)e #oderia ser (o$siderado )m (aso res#ei%&vel/< dei6amos
o (aso de %i#os es%r)%)rados $o e$(a#s)lados #ara a Se;o
B.C2 mais adia$%e.
As maiores di'ere$;as lBgi(as e$%re o modelo de :era$;a de
%i#o a#rese$%ado $o Ca#7%)lo 1- e a :era$;a de %i#o +#se)doN
es(alar. da SQL3 so as seg)i$%es?
\ A SQL3 admi%e a :era$;a es%r)%)ral (omo %am30m a
(om#or%ame$%al.
\ A SQL3 $o dis%i$g)e ade1)adame$%e e$%re valores e
vari&veis< e$%o2 em #ar%i()lar2 ela $o dis%i$g)e e$%re a
#ossi3ilidade de s)3s%i%)i;o de valores e a #ossi3ilidade de
s)3s%i%)i;o de vari&veis.
\ A SQL3 $o %em s)#or%e #ara res%ri;4es de %i#os e2
#or%a$%o2 $o %em $e$:)m s)#or%e #ara es#e(iali5a;o #or
res%ri;o.
PTalve5 (om e6e();o de %i#os de li$:as. Por0m2 e6is%em
alg)$s 1)e3raN(a3e;as rela(io$ados (om a :era$;a de %i#o de
li$:a2 ORJ ()Aos de%al:es es%o al0m do es(o#o des%e
a#=$di(e.
\ A SQL3 e6ige o#eradores de a%)ali5a;o *+modi'i(adores./
#ara 1)e a :era$;a seAa i$(o$di(io$al.
Uma (o$se1L=$(ia dessas di'ere$;as 0 1)e a SQL3 #ermi%e
+(7r()los $o (ir()lares. e %oli(es semel:a$%es2 (omo
o3servamos $o (a#7%)lo 1-. )%ra (o$se1L=$(ia 0 1)e (er%as
(om#ara;4es de SQL3 daro )m res)l%ado 'also 1)a$do deveriam
o'ere(er )m res)l%ado verdadeiro *#or e6em#lo2 #or1)e )m
valor do %i#o mais es#e(7'i(o ELIPSE #ode %er semiNei6os
ig)ais e2 #or%a$%o2 (orres#o$der a )m (7r()lo $o m)$do real2
em SQL3/.
KeAamos (omo 'i(aria $osso e6em#lo )s)al de eli#ses e
(7r()los em SQL3?
CREATE T@PE ELIPSE
AS * C]PR A2 C]PR B2 PNT CTR
NT SINAL
CREATE T@PE CIRCUL EGNDER ELIPSE
AS * C]PR R / 9 $o realis%aI *ver a seg)ir/
NT SINAL
Co$%)do2 o3serve 1)e2 (om essas de'i$i;4es2 a im#leme$%a;o
'7si(a do ChRCUL e$volver& 1)a%ro (om#o$e$%es 9 A2 B e CTR
*:erdados do %i#o ELIPSE/2 e R *es#e(i'i(ado #ara o %i#o
CIRCUL some$%e/. E (laro 1)e #ara 1)al1)er (7r()lo dado2
%r=s desses (om#o$e$%es %ero o mesmo valor. )%ra
al%er$a%iva seria de'i$ir )m m0%odo R #ara o %i#o CIRCUL *em
l)gar do a%ri3)%o R/< o %i#o CIRCUL %eria e$%o a mesma
im#leme$%a;o '7si(a 1)e o %i#o ELIPSE e2 desse modo2 essa
im#leme$%a;o e$volveria me$or red)$dY$(ia. Por o)%ro lado2
se C 0 )ma vari&vel do %i#o de(larado CIRCUL2 e$%o a
a%ri3)i;o a C.R ser& v&lida (om o #rimeiro desses #roAe%os2
mas $o (om o seg)$do. Novame$%e2 a a%ri3)i;o a C.R2 se
admi%ida2 #rod)5ir& 9 em geral 9 )m +(7r()lo. %al 1)e C.R e
C.AI
A1)i es%o mais alg)$s #o$%os de di'ere$;a e$%re o modelo de
:era$;a de %i#o des(ri%o $o Ca#7%)lo 1- e a :era$;a de %i#o
admi%ida em SQL3?
\ A SQL3 )sa o %ermo +dire%o. *(omo em s)3%i#o dire%o/ em
l)gar do %ermos mais ade1)ado +imedia%o..
\ A SQL3 )%ili5a o %ermo +s)#er%i#o m&6imo. em l)gar de +%i#o
rai5..
\ A SQL3 admi%e )m o#erador de$omi$ado TREAT *a$&logo a TREAT
DUN/. Por e6em#lo2 o a$&logo em SQL3 da e6#resso
TREATeDUNeASeCIRCLE*E/ 0 TREAT E AS CIRCLE.
\ A SQL3 %am30m admi%e )m o#erador 1)e #ode ser imagi$ado
*sem rigor/ (omo +TREAT UP.. Por e6em#lo2 (o$sidere a
seg)i$%e i$vo(a;o de o#erador?
AREA * C AS ELIPSE
A es#e(i'i(a;o +AS ELIPSE. 'or;a a verso ELIPSE do o#erador
AREA a ser i$vo(ada2 mesmo 1)e o %i#o de(larado da vari&vel C
seAa CIRCUL. No%a? esse o#erador sB #ode ser )sado em (er%os
(o$%e6%os< #ara sermos es#e(7'i(os2 ele #ode ser )sado a#e$as
#ara +%ra%ar. )m arg)me$%o #ara )ma i$vo(a;o de alg)m
o#erador de'i$ido #elo )s)&rio2 (omo $o e6em#lo. 3servamos
1)e a #roviso dessa ')$(io$alidade #are(e s)gerir alg)ma
(o$')so e$%re 1)es%4es de modelo vers)s 1)es%4es de
im#leme$%a;o 9 a'i$al2 os )s)&rios $o devem $em mesmo %er
de sa3er 1)e e6is%em d)as vers4es de AREA.
\ A SQL3 %am30m admi%e )m m0%odo da 'orma c.TIPESPEChSIC2
1)e re%or$a o %i#o mais es#e(7'i(o de se) arg)me$%o c (omo )m
s%ri$g de (ara(%eres.
\ s a$&logos em SQL3 de ISeT*c/ e ISe]SeT*c/ so semel:a$%es
a?
c IS S * T /
c IS S * NL@ T /
OR1
B.8 TIPS DE RESERNCIA
Ko(= deve lem3rar 1)e2 $o Ca#7%)lo >82 a'irmamos 1)e sis%emas
de o3Ae%o e$volvem a#e$as )ma 3oa id0ia2 o) seAa2 o s)#or%e
de %i#o de dados #rB#rio *o) d)as 3oas id0ias2 se (o$%armos a
:era$;a de %i#o se#aradame$%e/. Como vimos2 a SQL3 i$(l)i )ma
#ar%e dessa +3oa. ')$(io$alidade *em3ora se) s)#or%e es%eAa
lo$ge do ideal/. Por0m2 i$'eli5me$%e2 ela %am30m i$(l)i
alg)ma ')$(io$alidade (orrela%a 1)e 0 9 em $ossa o#i$io 9
m)i%o r)im. De 'a%o2 a SQL3 (:ega 3em #er%o de (ome%er %a$%o
Primeiro Hra$de Erro *ig)ala$do %a3elas e (lasses/ 1)a$%o
Seg)$do Hra$de Erro *mis%)ra$do #o$%eiros e %a3elas/. Al0m
disso2 devemos di5er 1)e a +A)s%i'i(a%iva. #ara isso 0 #o)(o
(lara2 #elo me$os #ara es%e a)%or< #are(e ser )m #o)(o mais
1)e )ma vaga id0ia de 1)e as (ara(%er7s%i(as em 1)es%o de
alg)ma ma$eira %or$am a SQL3 mais +semel:a$%e a o3Ae%os..
SeAa (omo 'or2 vamos %e$%ar e6#li(ar agora 1)ais so os
re()rsos realme$%e releva$%es. Em #rimeiro l)gar2 a SQL3
#ermi%e 1)e )ma %a3ela 3&si(a seAa de'i$ida2 $o a#e$as em
%ermos de )m (o$A)$%o e6#l7(i%o de (ol)$as %i#i'i(adas
$omeadas da ma$eira )s)al2 mas %am30m em %ermos de )m %i#o
es%r)%)rado de'i$ido #elo )s)&rio. Por e6em#lo?
CREATE T@PE TIP DEPT
AS * DEPTM CQAR*3/2
DN]E CQAR*>C/2
RCA]EN DINQ /
RES IS S@STE] HENERATED
CREATE TABLE DEPT S TIP DEPT
* RES IS IDDEPT S@STE] HENERATED2
PRI]AR@ TE@ * DEPTM /2
UNIQUE *IDDEPT/ / ... <
E6#li(a;o?
1. Dada a de'i$i;o de )m %i#o es%r)%)rado T2 o sis%ema gera
a)%oma%i(ame$%e )m %i#o de re'er=$(ia asso(iado *+%i#o RES./
(:amado RES*T/. s valores do %i#o RES!T/ so +re'er=$(ias. a
li$a:s de %i#o T de$%ro de alg)ma %a3ela 3&si(aP 1)e %e$:a
sido de'i$ida (omo +S. *de/ %i#o T *ver o i%em 3 a seg)ir/.
No%a? E (laro 1)e T #ode ser )sado em o)%ros (o$%e6%os 9 #or
e6em#lo2 (omo o %i#o de(larado de alg)ma vari&vel Ko) de
alg)ma (ol)$a C. Todavia2 $e$:)m valor de RES*T/ es%&
asso(iado a esses o)%ros )sos.
>. A e6#resso RES IS S@STE] HENERATED em )ma i$s%r);o
CREATE T@PE sig$i'i(a 1)e os valores reais do %i#o RES
asso(iado so 'or$e(idos #elo sis%ema *o)%ras o#;4es 9 #or
e6em#lo2 RES IS USER HENERATED 9 es%o dis#o$7veis2 mas
omi%imos os de%al:es a1)i/. RES IS S@STE] HENERATED 0 o
de'a)l%.
3. Uma %a3ela 3&si(a #ode ser de'i$ida *#or meio de CREATE
TABLE/ (omo +S. *de/ alg)m %i#o es%r)%)rado. E$%re%a$%o2 a
#alavraN(:ave S $o 0 realme$%e m)i%o a#ro#riada $esse (aso2
#or1)e a %a3ela $o 0 $a realidade +de. o %i#o em 1)es%o2 e
$em s)as li$:as so desse %i#o.PP Em #ar%i()lar2 (ol)$as
adi(io$ais al0m das +(ol)$as. *o) mel:or2 a%ri3)%os/ do
#rB#rio %i#o es%r)%)rado #odem ser es#e(i'i(adas #ara a
%a3ela. Na verdade2 #elo me$os )ma dessas (ol)$as adi(io$ais
deve ser es#e(i'i(ada 9 o) seAa2 )ma (ol)$a do %i#o RES
a#li(&vel 9 em3ora a si$%a6e #ara de'i$i;o dessa (ol)$a $o
seAa a si$%a6e )s)al de de'i$i;o de (ol)$as2 mas sim algo
(omo is%o?
RES IS Z$ome de (ol)$a[ S@STE] HENERATED
) #ossivelme$%e alg)ma viso. s de%al:es do (aso de viso
es%o al0m do es(o#o des%e a#=$di(e.
P P E$%o2 o3serve em #ar%i()lar 1)e2 se o %i#o de(larado de
alg)m #arYme%ro P #ara alg)m o#erador # 'or de alg)m %i#o
es%r)%)rado T2 )ma li$:a de )ma %a3ela 3&si(a 1)e %e$:a sido
de'i$ida (omo +S. %i#o T $o #oder& ser re#assada (omo )m
arg)OR> me$%o (orres#o$de$%e a )ma i$vo(a;o desse o#erador
#.
Essa (ol)$a e6%ra 0 )sada #ara (o$%er IDs e6(l)sivas
*+re'er=$(ias./ #ara as li$:as da %a3ela 3&si(a em 1)es%o *a
es#e(i'i(a;o UNIQUE *Z$ome de (ol)$a[/ 0 im#l7(i%a2 em3ora
%am30m #ossa ser e$)$(iada de 'orma e6#l7(i%a2 (omo em $osso
e6em#lo/. A ID (orres#o$de$%e a )ma de%ermi$ada li$:a 0
a%ri3)7da 1)a$do a li$:a i$serida e #erma$e(e asso(iada (om
essa li$:ad a%0 ser elimi$ada. No%a? a re#e%i;o da
es#e(i'i(a;o S@STE] HENERATED 0 a#are$%eme$%e o3riga%Bria.
*Talve5 de modo s)r#ree$de$%e2 )ma (ol)$a S@STE] HENERATED
#ode ser )ma (ol)$a de des%i$o em )ma o#era;o INSERT o)
UPDATE2 em3ora se a#li1)em (o$sidera;4es es#e(iais< vamos
omi%ir os de%al:es a1)i./ Al0m disso2 $o es%& (laro o mo%ivo
#or 1)e deve ser $e(ess&rio de'i$ir )ma %a3ela (omo +S.
alg)m %i#o es%r)%)rado 9 em ve5 de a#e$as de'i$ir )ma (ol)$a
a#ro#riada da ma$eira )s)al 9 #ara se o3%er a ')$(io$alidade
de +TD e6(l)siva..
8. Co$'orme i$di(amos $a Se;o B.>2 )m %i#o es%r)%)rado (omo
TIP DEPT $o 0 (o$siderado e$(a#s)lado 1)a$do 0 em#regado
(omo a 3ase #ara a de'i$i;o de )ma %a3ela 3&si(a2 em3ora
seAa (o$siderado assim *mais o) me$os/ em o)%ros (o$%e6%os.
Por essa ra5o2 $o e6em#lo2 a %a3ela 3&si(a DEPT %em 1)a%ro
(ol)$as2 e $o a#e$as d)as (omo %eria se TIP DEPT 'osse
e$(a#s)lado.
C. ]os%ramos DEPTM (omo (:ave #rim&ria #ara a %a3ela DEPT.
Por0m2 (o$sidera$doNse 1)e as li$:as de DEPT %=m IDs
e6(l)sivas *+re'er=$(ias./2 #oder7amos )sar essas IDs (omo
valores da (:ave #rim&ria2 se 1)is0ssemos2 assim?
CREATE TABLE DEPT S TIP DEPT
* RES IS IDDEPT S@STE] HENERATED2
PRI]AR@ TE@ * IDDEPT /2
UNIQUE * DEPTM / /
Kamos agora es%e$der o e6em#lo #ara i$%rod)5ir )ma %a3ela
3asi(a E]Id2 des%e modo?
CREATE TABLE E]P
* E]PM CQAR*C/2
EN]E CQAR*>C/2
SALiRI DINQ2
IDEPT RES * TIP DEPT / SCPE DEPT
RESERENCES ARE CQECTED
N DELETE CASCADE2
PRI]AR@ TE@ * E]PM / /
Normalme$%e2 a %a3ela 3&si(a E]P i$(l)iria )ma (ol)$a d(
(:ave es%ra$geira DEPTM 1)e 'aria re'er=$(ia a de#ar%ame$%os
#elo $`mero de de#ar%ame$%o. Co$%)do2 a1)i %emos )ma (ol)$a
de +re'er=$(ia. ID DEPT 9 $o de(larada e6#li(i%ame$%e (omo
)ma (ol)$a de (:ave es%ra$geira 9 1)e2 em ve5 disso2 'a5
re'er=$(ia a de#ar%ame$%os #or s)as +re'er=$(ias.. SCPE
DEPT es#e(i'i(a a %a3ela re'ere$(iada a#li(&vel. RESERENCES
ARE CQECTED sig$i'i(a 1)e a i$%egridade re'ere$(ial deve ser
ma$%ida *RESERENCES ARE NT CQECTED #ermi%iria +re'er=$(ias
os(ila$%es.< $o es%& (laro o mo%ivo #elo 1)al seria
deseA&vel es#e(i'i(ar essa o#;o./ N DELETE ..2 es#e(i'i(a
)ma regra de elimi$a;o2 a$&loga Xs regras )s)ais #ara
elimi$a;o de (:aves es%ra$geiras *as mesmas o#;4es so
admi%idas/< #or0m2 o3serve 1)e2 se de 'a%o a (ol)$a IDeDEPT
$a %a3ela 3&si(a DEPT $o #ode ser a%)ali5ada *ver o i%em 3
a$%erior/2 e$%o $o 0 $e(ess&ria $e$:)ma regra N UPDATE
(orres#o$de$%e.
Kamos (o$siderar agora alg)$s e6em#los de (o$s)l%as
e$volve$do esse 3a$(o de dados. Primeiro2 a1)i es%& )ma
'orm)la;o em SQL3 de +3%er o $`mero do de#ar%ame$%o
(orres#o$de$%e ao em#regado Eld.
E6is%e a1)i )ma (er%a rela;o (ir()lar? +essa li$:a. sB #ode
sig$i'i(ar +a li$:a 1)e %em a ID es#e(7'i(a em 1)es%o..
3serve a
(o$')so de valor vers)s vari&velI OR3
SELECT Ec.ID DEPT N[ DEPTM AS DEPTM
SR] E]P Ec
UQERE Ec.E]PM ^ Ei
3serve a o#era;o de desre'ere$(iame$%o-P $a (l&)s)la SELECT
*a e6#resso Ec.IDeDEPT DEPTM re%or$a o valor de DEPTM da
li$:a de DEPT #ara a 1)al a#o$%a o valor de IDeDEPT em
1)es%o/. 3serve %am30m 1)e a es#e(i'i(a;o AS $essa
(l&)s)la 0 mais o) me$os $e(ess&ria *se ela 'osse omi%ida2 a
(ol)$a do res)l%ado re(e3eria )m $ome +de#e$de$%e da
im#leme$%a;o./. Si$alme$%e2 o3serve a $a%)re5a $o i$%)i%iva
da (l&)s)la SR] 9 o valor de DEPTM a ser re()#erado vem de
DEPT2 $o de E]P2 mas os valores de IDeDEPT v=m de E]P2 e
$o de DEPT. No%a? 0 di'7(il resis%ir X %e$%a;o de a'irmar
1)e essa (o$s)l%a #rovavelme$%e %er& )m ')$(io$ame$%o #ior
1)e s)a e1)ivale$%e em SQL (o$ve$(io$al *1)e %eria a(esso a
a#e$as )ma %a3ela2 e $o a d)as/. Sa5emos essa o3serva;o
#or1)e o arg)me$%o )s)al em 'avor de +re'er=$(ias. 0 1)e elas
devem s)#os%ame$%e mel:orar o desem#e$:o.
A #ro#Bsi%o2 se a (o$s)l%a 'osse +3%er o de#ar%ame$%o *em
ve5 de a#e$as o $`mero do de#ar%ame$%o/ (orres#o$de$%e ao
em#regado El.2 a o#era;o de desre'ere$(iame$%o seria
3as%a$%e di'ere$%e?
SELECT DERES * Ec.IDDEPT / AS DEPT
SR] E]P Ec
UQERE Ec.E]PM ^ Eid <
Al0m disso2 a i$vo(a;o de DERES mos%rada re%or$aria $o )m
valor de li$:a2 mas sim )m valor +e$(a#s)lado. *es(alar/.
A1)i es%& o)%ro e6em#lo 9 +3%er $`meros de em#regados
(orres#o$de$%es a em#regados 1)e %ra3al:am $o de#ar%ame$%o
Dl. *o3serve o desre'ere$(iame$%o $a (l&)s)la UQERE/?
SELECT Ec.E]PM
SR] E]P Ec
UQERE Ec.IDDEPT N[ DEPTM ^ bDid
E a1)i %emos )m e6em#lo de INSERT *i$ser;o de )m em#regado/?
INSERT INT E]P * E]PM2 IDDEPT /
KALUES * bEC2 * SELECT Dc.IDDEPT
SR] DEPT Dc
UQERE Dc.DEPTM ^ bD> / / <
B.C SUBTABELAS E SUPERTABELAS
Co$sidere os %i#os es%r)%)rados a seg)ir?
CREATE T@PE TIP E]P
AS *E]PM ...2 DEPTM ... /
RES IS S@STE] HENERATED
NT SINAL
CREATE T@PE TIP PH]R UNDER TIP E]P
AS * LANH ... /
NT SINAL
A #ro#Bsi%o2 o3serve 1)e TIPePH]R $o %em $e$:)ma (l&)s)la
RES IS ...< em ve5 disso2 :erda e'e%ivame$%e )ma (l&)s)la
desse %i#o de se) s)#er%i#o imedia%o *+dire%o./ TIPeE]P.
P A maioria das li$g)age$s 1)e admi%em o desre'ere$(iame$%o
%am30m o'ere(e s)#or%e #ara )ma o#era;o de re'ere$(iame$%o
OR8 mas a SQL3 $o %em esse s)#or%e.
Agora2 (o$sidere as de'i$i;4es de %a3elas 3&si(as a seg)ir?
CREATE TABLE E]P S TIP E]P
* RES IS IDE]P S@STE] HENERATED2
PRI]AR@ TE@ * E]PM /2
IGNIQUE * IDE]P /
CREATE TABLE PH]R S TIP PH]R UNDER E]P
No%e a es#e(i'i(a;o UNDER E]P $a de'i$i;o da %a3ela 3&si(a
PH]R *$o%e %am30m a omisso de RES IS ...2 PRI]AR@ TE@2 e
es#e(i'i(a;4es UNIQUE #ara essa %a3ela 3&si(a/. As %a3elas
3&si(as PH]R e E]P so2 res#e(%ivame$%e2 )ma s)3%a3ela e a
s)#er%a3ela imedia%a *+dire%a./ (orres#o$de$%e< PH]R :erda as
(ol)$as *e%(./ de E]P e a(res(e$%a )ma (ol)$a2 LANH2 de si
mesma. A i$%)i;o 1)e rege o e6em#lo 0 1)e os $o
#rogramadores %=m )ma li$:a $a %a3ela E]P a#e$as2 e$1)a$%o os
#rogramadores %=m )ma li$:a em am3as as %a3elas 9 assim2 %oda
'ila em PH]R %em )ma e1)ivale$%e em E]P2 mas o i$verso $o 0
verdade.
As o#era;4es de ma$i#)la;o de dados so3re essas %a3elas se
(om#or%am da seg)i$%e ma$eira?
\ SELECT? SELECT se (om#or%a $ormalme$%e so3re E]P. SELECT
so3re PH]R se (om#or%a (omo se PH]R (o$%ivesse realme$%e as
(ol)$as de E]P2 3em (omo a (ol)$a LANH. No%a? 1)ali'i(ador
NL@ #ode ser )sado em )ma Zre'er=$(ia de %a3ela[ #ara
e6(l)ir li$:as 1)e %=m e1)ivale$%es em alg)ma s)3%a3ela da
%a3ela em 1)es%o. Desse modo2 #or e6em#lo2 a o#era;o SELECT
... SR] NL@ E]P se (om#or%a (omo se E]P i$(l)7sse a#e$as
li$:as sem )ma e1)ivale$%e em PH]R.
\ INSERT? INSERT em E]P se (om#or%a $ormalme$%e. INSERT em
PH]R 'a5 (om 1)e2 $a realidade2 a#are;am $ovas li$:as em E]P
e PH]R.
\ DELETE? DELETE de E]P 'a5 (om 1)e desa#are;am li$:as de E]P
e *1)a$do as li$:as em 1)es%o (orres#o$dem a #rogramadores/
%am30m de PH]R. DELETE de PH]R 'a5 (om 1)e desa#are;am li$:as
de E]P e PH]R.
\ UPDATE? A a%)ali5a;o de LANH2 $e(essariame$%e #or meio de
PH]R2 a%)ali5a a#e$as PH]R< a a%)ali5a;o de o)%ras (ol)$as2
seAa a%rav0s de E]P o) de PH]R2 a%)ali5a *(o$(ei%)alme$%e/
am3as as %a3elas.
3serve as seg)i$%es im#li(a;4es da1)ilo 1)e a'irmamos?
\ S)#o$:a 1)e o em#regado Goe se %or$e )m #rogramador. Se
%e$%armos sim#lesme$%e i$serir )ma li$:a #ara Goe em PH]R2 o
sis%ema %am30m %e$%ar& i$serir )ma li$:a #ara Goe em E]P 9
)ma %e$%a%iva 1)e 'al:ar&2 0 (laro. Em ve5 disso2 %emos de
elimi$ar a li$:a de Goe de E]P e2 em seg)ida2 i$serir )ma
li$:a a#ro#riada em PH]R.
\ I$versame$%e2 vamos s)#or 1)e o em#regado Goe dei6e de ser
)m #rogramador. Dessa ve52 %emos de elimi$ar a li$:a de Goe
de E]P o) de PH]R *seAa 1)al 'or a %a3ela 1)e es#e(i'i(armos2
o e'ei%o ser& a elimi$a;o da li$:a de am3as/ e de#ois
i$serir )ma li$:a a#ro#riada em E]P.
Q)e rela;o %em %)do isso (om a :era$;a de %i#og A%0 o$de
#odemos ver2 a res#os%a 0 $ada 9 is%o 02 $ada a $o ser 1)e
*#or ra54es #o)(a (laras2 #ara di5er o m7$imo/ a SQL3 e6ige
1)e )ma s)3%a3ela e s)a s)#er%a3ela imedia%a *+dire%a./ seAam
de'i$idas so3re %i#os es%r)%)rados 1)e so2 res#e(%ivame$%e2
)m s)3%i#o e se) s)#er%i#o imedia%o *+dire%o./. 3serve 1)e
$o :& $e$:)ma #ossi3ilidade de s)3s%i%)i;o e$volvida $essa
orga$i5a;o< o3serve ai$da 1)e os %i#os e$volvidos so
de'i$i%ivame$%e $o +e$(a#s)lados..
E$%o2 em 1)e as s)3%a3elas e s)#er%a3elas $os aA)damg A
res#os%a #are(e ser +m)i%o #o)(o. #elo me$os $o $7vel do
modelo.P E verdade 1)e (er%as e(o$omias de im#leme$%a;o
#oderiam ser o3%idas2 se
P Talve5 dev=ssemos lem3r&Nlo de $ossa #rB#ria a3ordagem
#re'ere$(ial #ara essa 1)es%o 9 se ela 0 realme$%e )ma
1)es%o 9
1)e 'a5 )so de vis4es *veAa o e6em#lo $o 'i$al da Se;o
13.C/. ORC
a s)3%a3ela e s)a s)#er%a3ela es%ivessem 'isi(ame$%e
arma5e$adas (omo )ma `$i(a %a3ela $o dis(o< #or0m2 0 (laro
1)e %ais (o$sidera;4es $o devem %er $e$:)m e'ei%o so3re o
modelo em si. Em o)%ras #alavras2 $o a#e$as 0 #o)(o (laro2
(omo o3servamos $o #ar&gra'o a$%erior2 o mo%ivo #elo 1)al
+s)3%a3elas. e +s)#er%a3elas. %e$:am de se 3asear em
+s)3%i#os. e +s)#er%i#os. es%r)%)rados mas %am30m 0 m)i%o
o3s()ro o mo%ivo #elo 1)al essa (ara(%er7s%i(a 0 admi%ida.
B.D UTRS RECURSS
CREATE TABLE
A SQL3 admi%e )ma o#;o LITE em CREATE TABLE2 #ermi%i$do 1)e
alg)mas o) %odas as de'i$i;4es de (ol)$as de )ma $ova %a3ela
3&si(a seAam (o#iadas de alg)ma %a3ela $omeada e6is%e$%e
*o3serve a #alavra $omeada 9 $o 0 #oss7vel es#e(i'i(ar )ma
e6#resso de %a3ela ar3i%r&ria em l)gar do $ome de %a3ela/.
E6#ress4es de %a3elas
No Ca#7%)lo C des(revemos )ma (l&)s)la UITQ ()Aa 'i$alidade 0
i$%rod)5ir $omes a3reviados #ara (er%as e6#ress4es. A SQL3
i$(l)i )ma (o$s%r);o similar2 mas se) )so es%& limi%ado
some$%e a e6#ress4es de %a3elas. A1)i %emos )m e6em#lo?
UITQ LNH TER] E]PS AS
* SELECT P
SR] E]P
UQERE DATE QIRED Z DATE b1-RJNJ1NJ1
SELECT E]PM2 * LNHTER]CT 9 1 / AS MSSELLULNHTER]E]PS
SR] LNH TER] E]PS AS Li2
* SELECT DEPTM2 CUNT*P/ AS LNHTER]CT
SR] LNHTER]E]PS
HRUP B@ DEPTM / AS L> UQERE L1.DEPTM ^ L>.DEPTM
*+Para (ada em#regado 1)e es%& $a em#resa desde 1-O- o)
a$%es2 o3%er o $`mero de em#regado e )ma (o$%agem de o)%ros
em#regados $essa si%)a;o $o mesmo de#ar%ame$%o../
A (l&)s)la UITQ de SQL3 #ode ser )sada em #ar%i()lar #ara
'orm)lar (er%as (o$s)l%as re()rsivas. Por e6em#lo2 dada a
%a3ela PAIeDE *PAI2 SILQ/2 a (o$s)l%a re()rsiva a seg)ir
re%or$a %odos os #ares de #essoas *a23/ %ais 1)e a 0
a$(es%ral de 3. 3serve 1)e a de'i$i;o do $ome i$%rod)5ido
ANCESTRAL DE i$(l)i )ma re'er=$(ia ao #rB#rio ANCESTRAL DE.
UITQ RECURSIKE ANCESTRALeDE * ANCESTRAL2 DESCENDENTE AS *
SELECT PAI2 SILQ
SR] PAIeDE
UNIN
SELECT A.PAI2 P.SILQ
SR] ANCESTRALeDE AS A2 PAIeDE AS P
UQERE A.SILQ ^ P.PAI
SELECT P
SR] ANCESTRALeDE
E6#ress4es (o$di(io$ais
A SQL3 'or$e(e )ma $ova (o$di;o DISTINCT *1)e $o deve ser
(o$')$dida (om a (o$di;o UNIQUE e6is%e$%e 9 (o$s)l%e o
A#=$di(e A/ #ara %es%ar se d)as li$:as so +dis%i$%as.. SeAam
as li$:as em 1)es%o
ORD Es1)erda e Direi%a< Es1)erda e Direi%a devem (o$%er o
mesmo $`mero2 digamos $2 de (om#o$e$%es (ada
)ma. SeAam os iN0simos (om#o$e$%es de Es1)erda e Direi%a Ei e
Di2 res#e(%ivame$%e *i ^ 12 >2 ...2 $/. %i#o de Ei deve ser
(om#a%7vel (om o %i#o de Di. E$%o2 a e6#resso?
Es1)erda IS DISTINCT SR] Direi%a
re%or$a 'also se e some$%e se2 #ara %odo i2 *a/ +Ei ^ Di. 0
verdadeiro2 o) *3/ Ei e Di so am3os $)los< (aso (o$%r&rio2
ela re%or$a verdadeiro. *Em o)%ras #alavras2 Es1)erda e
Direi%a so +dis%i$%as. se e some$%e se elas $o so
+d)#li(a%as. )ma da o)%ra $o se$%ido do Ca#7%)lo 1R./ 3serve
1)e )ma (o$di;o DISTINCT $)$(a 0 avaliada #ara des(o$:e(ido.
A SQL3 %am30m 'or$e(e )ma $ova (o$di;o SI]ILAR 1)e *(omo
LITE/ se des%i$a X #a%%er$ ma%(:i$g de s%ri$gs de (ara(%eres<
is%o 02 a %es%ar )m de%ermi$ado s%ri$g de (ara(%eres #ara ver
se ele o3ede(e a alg)m #a%%er$ #res(ri%o. A di'ere$;a 0
SI]ILAR admi%e )ma variedade m)i%o mais e6%e$sa de
#ossi3ilidades *+(ori$gas. *Wild (ards/2 e%(./ 1)e LITE. A
si$%a6e 0?
Ze6#resso de s%ri$gs de (ara(%eres[ E NT 1 SI]ILAR T
Z#adro[
E ESCAPE Zes(a#e[ 1
As es#e(i'i(a;4es Z#a%%er$[ e Zes(a#e[ so esse$(ialme$%e
(omo as de LITE2 e6(e%o #elo 'a%o de Z#a%%er$[ #oder i$(l)ir
(ara(%eres es#e(iais adi(io$ais e $o a#e$as.. e +j+ (omo
LITE2 mas %am30m ++2 +k+2 +N+ e m)i%os o)%ros. A i$%e$;o
geral #are(e ser a de dar s)#or%e X a$&lise de e6#ress4es
es(ri%as em alg)ma li$g)agem 'ormal. No%a? vale a #e$a
me$(io$ar 1)e as regras #ara SI]ILAR 'oram (o#iadas do
o#erador similar em PSIc.
Se(:a$do es%a s)3se;o2 o3servamos 1)e2 (o$sidera$doNse a
e6is%=$(ia do $ovo %i#o em3)%ido BLEAN2 as e6#ress4es
(o$di(io$ais so agora realme$%e a#e$as )m %i#o es#e(ial de
e6#resso es(alar *(omo de 'a%o elas deveriam %er sido desde
o i$7(io/.
I$%egridade
A SQL3 admi%e a (o$s%r);o RESTRICT Za;o re'ere$(ial[2
semel:a$%e mas $o id=$%i(a a N ACTIN *(o$s)l%e o Ca#7%)lo
R #ara o3%er )ma e6#li(a;o so3re a di'ere$;a/. Ela %am30m
i$(l)i alg)m s)#or%e #ara #ro(edime$%os %rigger *+ga%il:os./<
em #ar%i()lar2 ela i$(l)i )ma i$s%r);o CREATE TRIHHER2 a
1)al de'i$e )m ga%il:o 9 o) seAa2 )r$a (om3i$a;o de )ma
es#e(i'i(a;o de eve$%o e )r$a es#e(i'i(a;o de a;o2 o$de?
\ Um eve$%o 0 )ma o#era;o INSERT2 UPDATE *o#(io$alme$%e de
(ol)$as de%ermi$adas/ o) DELETE so3re )ma %a3ela $omeada
es#e(i'i(ada.
\ a a;o 0 )r$a a;o *$a realidade2 )m #ro(edime$%o/ ser
e6e()%ada ASTER *de#ois de/ o) BESRE *a$%es de/ o(orrer o
eve$%o es#e(i'i(ado.
]ais #re(isame$%e2 a a;o (o$sis%e em )ma e6#resso
(o$di(io$al o#(io$al *()Ao de'a)l% 0 TRUE/2 al0m de )m
#ro(edime$%o em SQL 1)e ser& e6e()%ado se e some$%e se a
(o$di;o 'or verdadeira 1)a$do o eve$%o o(orrer. )s)&rio
#ode es#e(i'i(ar se a a;o deve a(o$%e(er a#e$as )r$a ve5 sB
#or o(orr=$(ia do eve$%o o) )r$a ve5 SR EACQ RU *#ara (ada
li$:a/ da %a3ela (om a 1)al o eve$%o es%& asso(iado. Al0m
disso2 a es#e(i'i(a;o de a;o #ode se re'erir a valores de
+a$%es. e +de#ois. $a %a3ela asso(iada (om o eve$%o
es#e(i'i(ado2 'or$e(e$do assim )m $7vel #rimi%ivo de s)#or%e
#ara *e$%re o)%ras (oisas/ res%ri;4es de %ra$si;o.
A%)ali5a;o de vis4es
A SQL3 es%e$de o s)#or%e de SQL #ara a%)ali5a;o de vis4es
(om a 'i$alidade de i$(l)ir vis4es +UNIN ALL. e vis4es de
A)$;4es de )m #ara )m e de )m #ara v&rios. E6%e$s4es a$&logas
se a#li(am %am30m a ()rsores.
ORO
Here$(iame$%o de %ra$sa;4es
A SQL3 i$(l)i diversos re()rsos $ovos de gere$(iame$%o de
%ra$sa;4es?
\ Uma i$s%r);o START TRANSACTIN e6#l7(i%a *(om os mesmos
o#era$dos de SET TRANSACTIN 9 (o$s)l%e o Ca#7%)lo 18/.
\ Uma o#;o UITQ QLD em DECLARE CURSR *mais )ma ve52
(o$s)l%e o Ca#7%)lo 18/.
\ S)#or%e #ara #o$%os de grava;o *ver a a$o%a;o X
re'er=$(ia E18.11F/.
Seg)ra$;a
A SQL3 admi%e #rivil0gios SELECT es#e(7'i(os de (ol)$as *o
#rivil0gio +SELECT*6/. #ermi%e 1)e ao de%e$%or 'a5er
re'er=$(ia a )ma (ol)$a 6 de%ermi$ada de )ma %a3ela $omeada
es#e(7'i(a de$%ro de )ma Ze6#resso de %a3ela[/. Ela %am30m
admi%e #a#0is *roles/ de'i$idos #elo )s)&rio< )m e6em#lo
#oderia ser CNT2 sig$i'i(a$do as #essoas do de#ar%ame$%o de
(o$%a3ilidade. Uma ve5 (riado2 )m #a#el #ode %er #rivil0gios
(o$(edidos2 (omo se 'osse )ma ID de )s)&rio. Al0m disso2 os
#a#0is #odem ser (o$(edidos2 (omo os #rivil0gios e2 (omo
%odos os #rivil0gios2 eles #odem ser (o$(edidos a )ma ID de
)s)&rio o) a o)%ro #a#el.
Sal%a de I$'orma;4es
Sa5emos a#e$as )ma o3serva;o so3 es%e %7%)lo? o) seAa2 1)e
os $ovos re()rsos de %i#os da SQL3 so *de modo 3em
#revis7vel/ (om#li(ados #ela #rese$;a de $)los. Por e6em#lo2
seAa K )ma vari&vel de alg)m %i#o es%r)%)rado T. E$%o2 0
#oss7vel 1)e alg)m (om#o$e$%e de K#ossa ser $)lo *e2 $esse
(aso2 a e6#resso (o$di(io$al K ^ K dar& des(o$:e(ido/ e
ai$da assim a e6#resso (o$di(io$al KIS NULL dar& 'alsoI De
'a%o2 #odemos di5er em geral 1)e2 se **K ^ K/ IS NT TRUE/ IS
TRUE 0 verdadeira2 e$%o K0 $)la o) i$(l)i )m (om#o$e$%e
$)lo.
A#oio X de(iso
A SQL3 i$(l)i o s)#or%e #ara as o#;4es HRUPINH SETS2 RLLUP
e CUBE em HRUP B@2 (o$'orme des(revemos $o Ca#7%)lo >1.
ORR