Sei sulla pagina 1di 21

Apostila de SQL

ndice Lio 01 : Iniciando ......................................................... 3


O que Banco de dados ...................................................................3 SQL .............................................................................................. 3 PL/SQL .......................................................................................... 3

Lio 02 : Instrues DML ................................................ 5


SELECT ......................................................................................... INSERT ......................................................................................... DELETE ......................................................................................... UPDATE ........................................................................................ 5 5 6 6

Lio 03 : Instrues DDL ................................................ 7 Lio 04 : Instrues DCL ................................................ 8


Con !o"e de acesso ......................................................................... # Con !o"e de !ansa$%es .................................................................... #

Lio 05 : Criao de Tabelas, Se !"n#ias e $ie%s ..... &0


Ta&e"a ........................................................................................... '( Seq)*nc+as .................................................................................... ', -+e.s ............................................................................................ ',

Lio 0' : Instrues D(L ................................................ &4


U +"+/a$0o da +ns !u$0o SELECT ......................................................... '1 C"2usu"as ....................................................................................... '1 ORDER B3 ................................................................................. '1 DISTINCT ................................................................................. '5 45ERE ..................................................................................... '5 6un$%es A7"+cadas................................................................... '8 6un$%es Con9e!$%es................................................................ ': ;ROUP B3 ................................................................................ ': Un+0o <UNION e UNION ALL= ....................................................... ,( >INUS ..................................................................................... ,( INTERSECT ............................................................................... ,'

Lio 01 : Iniciando

O objetivo desta lio introduzir ao conseito de banco de dados, SQL e o diferencial do PL/SQL utilizado no banco de dados Oracle. Os objetivos desta lio so: 1. ntender o !ue banco de dados ". #$render o conseito de SQL %. ntender o !ue PL/SQL

O que Banco de Dados


&ancos de dados so conjuntos de dados co' u'a estrutura re(ular !ue or(aniza' infor'ao. )' banco de dados nor'al'ente a(ru$a infor'a*es utilizadas $ara u' 'es'o fi'. )' banco de dados usual'ente 'antido e acessado $or 'eio de u' soft+are con,ecido co'o Siste'a -erenciador de &anco de .ados /S-&.0. 1or'al'ente u' S-&. adota u' 'odelo de dados, de for'a $ura, reduzida ou estendida. 2uitas vezes o ter'o banco de dados usado co'o sin3ni'o de S-.&. O 'odelo de dados 'ais adotado ,oje e' dia o 'odelo relacional, onde as estruturas t4' a for'a de tabelas, co'$ostas $or lin,as e colunas. O &anco de dados Oracle usa o 2odelo

SQL
O SQL /Structured Quer5 Lan(ua(e0 u' siste'a de (erencia'ento de banco de dados relacional /S-&.60. 7sto si(nifica !ue u' siste'a $ara (erenciar dados ar'azenados e' rela*es. )'a relao essencial'ente u' ter'o 'ate'8tico $ara tabela. # lin(ua(e' SQL /Structured Quer5 Lan(ua(e0 a base $ara utilizao de bancos de dados relacionais. 9o' a utilizao dos co'andos b8sicos /71S 6:, . L : , )P.#: e S L 9:0 $ode;se resolver a 'aior $arte dos $roble'as relacionados a 'anuteno e e<trao de dados no banco de dados. 9o' o SQL $oss=vel criar as estruturas b8sicas de ar'azena'ento, co'o tabelas e =ndices. :a'b' ,8 co'andos es$ec=ficos da lin(ua(e' $ara o controle e se(urana relacionado a u' banco de dados. ' $rinc=$io, os co'andos SQL so divididos e': .2L /.ata 2ani$ulation Lan(ua(e0 ou Lin(ua(e' de 'ani$ulao de dados ..L /.ata .efinition Lan(ua(e0 ou Lin(ua(e' de definio de dados .9L /.ata 9ontrol Lan(ua(e0 ou Lin(ua(e' de controle de dados

L!SQL
PL/SQL /acr>ni'o $ara a e<$resso in(lesa Procedural Lan(ua(e/Structured Quer5 Lan(ua(e0 u'a e<tenso da lin(ua(e' $adro SQL $ara o S-&. Oracle da Oracle 9or$oration. ? u'a Lin(ua(e' Procedural da Oracle, estendida da SQL. Per'ite !ue a 'ani$ulao de dados seja inclu=das e' unidades de $ro(ra'as. &locos de PL/SQL so $assados e $rocessados $or u'a PL/SQL n(ine !ue $ode estar dentro de u'a ferra'enta Oracle ou do Server. # (rande vanta(e' sobre u' bloco PL/SQL !ue $ode ser co'$ilado e ar'azenado no banco de dados co'o u' objeto de sc,e'a. -raas a essa caracter=stica as $rocedures so de f8cil 'anuteno, o c>di(o reutiliz8vel e $er'ite' !ue trabal,e'os co' '>dulos de $ro(ra'a.

)'a $rocedure , ento, u' bloco PL/SQL no'eado !ue $ode aceitar ar(u'entos /ta'b' c,a'ado de $ar@'etros0 e $ode ser c,a'ada $or u' $ro(ra'a, u'a sesso SQL ou u'a tri((er.

Su"#rio
#(ora voc4 deve con,ecer o conseito basico do !ue u' banco de dados, con,ece o !ue a lin(ua(e' SQL e entende su$erficial'ente o conseito e utilizao do PL/SQL no banco de dados Oracle.

Lio 02 : Instrues DML $Lin%ua%e" de Mani&u'ao de Dados(

O objetivo desta lio introduzir ao conseito de banco de dados nas instru*es .2L e seu $a$el no contesto do SQL e banco de dados.

)onceito
# .2L /.ata 2ani$ulation Lan(ua(e ; Lin(ua(e' de 2ani$ulao de .ados0 u' subconjunto da lin(ua(e' usada $ara selecionar, inserir, atualizar e a$a(ar dados. Aeja'os estas instru*es e suas a$lica*es.

S*L*)+
? o co'u'ente 'ais usado do .2L, co'anda e $er'ite ao usu8rio es$ecificar u'a !uer5 co'o u'a descrio do resultado desejado. # seleo total ou $arcial de u'a tabela se realiza 'ediante a instruo Sele#t. ' tal seleo ,8 !ue es$ecificar:

Os ca'$os !ue !uere'os selecionar # tabela na !ual faze'os a seleo

Por e<e'$lo, u'a seleo do no'e e endereo dos clientes co' u'a instruo deste ti$o: SELECT nome, endereo FROM clientes Se !uissse'os selecionar todos os ca'$os do re(istro na tabela, $oder=a'os utilizar o asterisco , da se(uinte for'a: SELECT * FROM clientes :a'b' 'uito Btil filtrar os re(istros 'ediante condi*es !ue v4e' e<$ressas de$ois da cl8usula )*ere. 2as isto ser8 tratado e' li*es $osteriores.

I-S*.+
? usada $ara inserir u' re(istro /for'al'ente u'a tu$la0 a u'a tabela e<istente. # sinta<e utilizada a se(uinte: INSERT Into nome_tabela (nome_campo1, nome_campo2,...) VALUES (valor_campo1, valor_campo2...)
*/e"&'o 1: Os no'es das colunas $recisara' ser infor'ados u'a vez !ue os dados no esto na orde' default.

INSERT INTO departamentos (nome, numero, local) VALUES ('PROJETO ', !", #RIO$)
*/e"&'o 2: # cl8usula 1)LL foi utilizada.

INSERT INTO empre%ados VALUES (&&'', 'JO E', '(O()TO', '!!!!!!!!!!!', (*++, &!,,, '1&-.E/-01', 1""", 12.!, 2") Obvia'ente, no i'$rescind=vel $reenc,er todos os ca'$os do re(istro. Por', $oder ser !ue deter'inados ca'$os seja' necess8rios. stes ca'$os necess8rios $ode' ser definidos !uando construir'os nossa tabela 'ediante o banco de dados.

D*L*+*
Para a$a(ar u' re(istro nos servi'os da instruo .elete. 1este caso deve'os es$ecificar !ual ou !uais so os re(istros !ue !uere'os a$a(ar. Por isso, necess8rio estabelecer u'a seleo !ue se realize 'ediante a cl8usula )*ere /# for'a de selecionar ser8 vista detal,ada'ente na Lio CD0. # sinta<e utilizada $ara efetuar estas su$ress*es: DELETE FROM nome_tabela WHERE condicoes_de_selecao Se !uiser'os, $or e<e'$lo, a$a(ar todos os re(istros dos clientes !ue se c,a'are' Pedro, far=a'os da se(uinte for'a: DELETE FROM clientes WHERE nome2'Pedro' :e'os !ue ter cuidado co' esta instruo, $ois se no es$ecificar'os u'a condio co' )*ere, o !ue esta'os fazendo a$a(ar toda a tabela: DELETE FROM clientes

0 D1+*
)$date a instruo !ue nos serve $ara 'odificar nossos re(istros. 9o'o $ara o caso de Delete, necessita'os es$ecificar $or 'eio de )*ere !uais so os re(istros !ue !uere'os fazer efetivas nossas 'odifica*es. #de'ais, obvia'ente, tere'os !ue es$ecificar !uais so os novos valores dos ca'$os !ue deseja'os atualizar. # sinta<e deste ti$o: UPDATE nome_tabela SET nome_campo1 = valor_campo1, nome_campo2 = valor_campo2,... WHERE condicoes_de_selecao )' e<e'$lo a$licado: UPDATE clientes SET nome2'Jos3' WHERE nome2'Pedro' 2ediante esta sentena 'uda'os o no'e Pedro $or Eos e' todos os re(istros cujo no'e seja Pedro. #!ui ta'b' ,8 !ue ser cuidadoso de no es!uecer de usar )*ere, do contr8rio, 'odificar=a'os todos os re(istros da tabela.

Su"#rio
#(ora voc4 deve con,ecer o conseito, a$licao e a sint8<i das instru*es .2L.

Lio 02 : Instrues DDL $Lin%ua%e" de De3inio de Dados(

O objetivo desta lio introduzir ao conseito de banco de dados nas instru*es ..L e seu $a$el no contesto do SQL e banco de dados. sta viso ser8 'el,or a$rofundada no decorrer dos e<ercicios e na $ratica da a$licao no a'biente de trabal,o.

)onceito
# ..L /.ata .efinition Lan(ua(e ; Lin(ua(e' de .efinio de .ados0 $er'ite ao usu8rio definir tabelas novas e ele'entos associados. # 'aioria dos bancos de dados de SQL co'erciais te' e<tens*es $ro$riet8rias no ..L. Os co'andos 'ais de for'a 'ais basica so: Creat + )tilizado na criao de ele'entos ,lter + )tilizado $ara alterar ele'entos Dro- + )tilizado eli'inar o ele'ento criado ' (eral, a 'aioria dos bancos de dados $ossui $otentes editores de bancos !ue $er'ite' a criao r8$ida e si'$les de !ual!uer ti$o de tabela co' !ual!uer ti$o de for'ato.Aere'os al(uns e<e'$los da utilizao destes co'andos:
*/e"&'o 01 : 9riao da tabela de fornecedoresF

CREATE TABLE 4ornecedores 5numero NUMBER526 PRIMARY KEY, nome VARCHAR252!6 NOT NULL, tele4one CHAR5&6, endereco VARCHAR252"6, valor_4ornec NUMBER 5',266
*/e"&'o 02 : #lterao na tabela de fornecedores adicionando a coluna descrio.

ALTER TABLE 4ornecedores ADD 5descricao VARCHAR25!"66


*/e"&'o 02 : .ro$ando a tabela de fornecedores do banco de dados.

DROP TABLE 4ornecedores

Su"#rio
#(ora voc4 deve con,ecer o conseito das instru*es ..L e conn,ece al(uns e<e'$los de sua utilizao no (erencia'ento das estruturas de u' banco de dados.

Lio 04 : Instrues D)L $Lin%ua%e" de )ontro'e de Dados(

O objetivo desta lio introduzir ao conseito de banco de dados nas instru*es .9L e seu $a$el no contesto do SQL e banco de dados.

)onceito
O .9L /.ata 9ontrol Lan(ua(e ; Lin(ua(e' de 9ontrole de .ados0 controla os as$ectos de autorizao de dados e licenas de usu8rios $ara controlar !ue' te' acesso $ara ver ou 'ani$ular dados dentro do banco de dados. ste nivel de instru*es se divide basica'ente e' dois (ru$os: 9ontrole de acesso 9ontrole de transa*es

)ontro'e de acesso
ste (ru$o deter'ina a $er'isso de cada usu8rio sobre as a*es sobre o banco de dados e a 'ani$ulao da infor'ao. ste esco$o de res$onsabilidade do .&# /.atabase ad'inistrator0 e no ser8 foco deste treina'ento, os co'andos so: ./,0T G 9oncede $rivil(ios de acesso a usu8rios /1$231 G 6evo(a ou retira $rivil(ios de acesso a usu8rios

)ontro'e de transaes
1este (ru$o te'os o controle das 8reas de controle co'o transao e locao. #'bos ter'ina' !ual!uer transao aberta e libera' !ual!uer cadeado li(ado a dados. So eles:

C244IT G 6es$ons8vel $or efetivar a transao corrente, $ois !uando se trabal,a co' u' banco de dados e' !ue v8rios usu8rios vo utiliz8;lo ao 'es'o te'$o, te' !ue se efetivar a o$erao, $ois se' o 9O227: a alterao no ser8 visualizada $ara as outras Hsess*esH, salvo se a sesso e' !ue fez a alterao for fec,ada, o !ue $or sua vez, traria 'uitos $reju=zos, $ois outros usu8rios iria' trabal,ar co' u' banco de dados desatualizado e $odendo at causar redund@ncia de dados. /2LL5,C3 G .esfaz a Blti'a alterao ou altera*es feitas na transao.

5anta%ens do )OMMI+ ou .OLLB1)6 -arante a consist4ncia dos dados a(ru$ando o$era*es lo(ica'ente relacionadas. #(ru$a os co'andos de 'ani$ulao lo(ica'ente relacionados. Per'ite !ue se veja o resultado de 'ani$ula*es antes !ue elas seja' confir'adas. O *stado dos Dados antes do )o""it ou .o''7ac8 #ntes do co''it os dados so vistos $or outros usu8rios co'o se no tivesse' sofrido nen,u'a 'ani$ulao. #s lin,as afetadas so blo!ueadas /locIed0. Outros usu8rios no $ode' 'odificar os dados 'ani$ulados u'a vez !ue estes dados encontra';se blo!ueados.

O que 1contece a&9s o )o""it #s 'ani$ula*es efetuadas nos dados so escritas no banco. Os dados anteriores so $er'anente'ente $erdidos. :odos os usu8rios autorizados $ode' ver os resultados. :odas as lin,as blo!ueadas so liberadas. :odos os Save$oints so a$a(ados.

O que 1contece a&9s o .o''7ac8 #s 'ani$ula*es efetuadas nos dados so desfeitas. #s lin,as blo!ueadas so liberadas. .o''7a8 a -:;e' de )o"ando Se u' Bnico co'ando .2L fal,a durante sua e<ecuo, so'ente este co'ando sofre 6ollbacI. :odas as de'ais 'odifica*es so $rovisoria'ente 'antidas at !ue u' co'ando 9o''it ou 6ollbacI seja e<ecutado. Obs.: # e<ecuo de u' co'ando ..L ou .9L /ocorre u' 9O227: auto'8tico #ntes e .e$ois da e<ecuo destes co'andos. Lo(o, 'es'o !ue o co'ando ..L ou .9L fal,e, no ser8 $oss=vel dar 6OLL&#9J nos co'andos !ue antecedera' este co'ando.0

S<"ario
#(ora voc4 deve con,ecer o conseito e a$licao das instru*es .9L. Sabendo a diferena entre os ti$os de controles e seus $a$eis. #$rendeu o uso do co''it e rollbacI e suas $eculiaridades.

Lio 0= : )riao de +a7e'as> Seq?@ncias e 5ieAs

O objetivo desta lio 'ostrar co'o se faz o uso de :abelas, Se!K4ncias e Aie+s e' u' banco de dados, 'ostrando a sinta<e e al(u'as re(ras de crio e alterao destes ele'entos.

+a7e'as
)'a tabela $ode ser criada a !ual!uer 'o'ento. 1o necess8rio es$ecificar seu ta'an,o, no 'o'ento da sua criao, e'bora seja $oss=vel, sua estrutura $ode ser 'odificada a !ual!uer 'o'ento, se' a necessidade de se tirar o banco do ar. Co6ando Create Table
*/e"&'o:

CREATE TABLE 4ornecedores (numero NUMBER526 PRIMARY KEY, nome VARCHAR252!6 NOT NULL, tele4one CHAR5&6, endereco VARCHAR252"6, valor_4ornec NUMBER 5',26)
Observa*es: O no'e de u'a tabela deve co'ear $or u'a letra. Pode ter at %C caracteres. .eve conter a$enas: #;L, a;z, C;M, N, O e P. 1o $ode ter o 'es'o no'e de !ual!uer outro objeto e<istente no es!ue'a do usu8rio.

)onstraints 9onstraints /restri*es0 'ant' os dados do usu8rio restritos, e assi' evita' !ue dados inv8lidos seja' inseridos no banco. # 'era definio do ti$o de dado $ara u'a coluna $or si s> u' constraint. Ti-os de Constraints

.IM1.B 6*B C # constraint Pri'ar5 Je5 u'a co'binao das constraints )ni!ue e 1ot 1ull. )' =ndice Bnico auto'atica'ente criado. DO.*IE- 6*B G stabelece u' relaciona'ento co' a c,ave $ri'8ria ou Bnica da 'es'a ou de outra tabela. la deve referenciar u' valor e<istente na tabela $ai ou ser nulo. #s 9,aves estran(eiras so baseadas e' dados e so $ura'ente l>(icas, isto , no so $onteiros f=sicos. -O+ -0LL C 1o $ossivel inserir valores nulos nestas colunas. 0-IQ0* ; .esi(na u'a coluna ou u'a co'binao de colunas de tal for'a !ue duas lin,as no $ossa'ter o 'es'o valor. Aalores nulos so aceitos e auto'atica'ente criado u' =ndice Bnico $ara a/s0 coluna/s0 es$ecificada/s0.

Outras for'as de se validar u'a restrio de inte(ridade dos valores atravez de :ri((ers, $rocedi'entos ou fun*es ar'azenados no servidor de banco de dados ou atravs do c>di(o na $r>$ria a$licao.

+i&os de ;aria;e' Orac'e


-0MB*. -0MB*.$&>s( D1+* )F1.$s( 1B'ero $onto flutuante co' $reciso de %Q d=(itos si(nificativos Aalor nu'rico co' u' nB'ero '8<i'o de d=(itos i(ual a $, e co' s o nu'ero de casas $ara a $reciso. .ata e Rora Strin( de caracteres de ta'an,o fi<o i(ual a s. O valor de s $ode variar de 1 a "SS.

51.)F1.2$s( Strin( de caracteres de ta'an,o vari8vel. :a'an,o '8<i'o i(ual a s. O valor de s $ode variar de 1 a "CCC. LO-E .1G e LO-E .1G )LOB Strin( de ta'an,o vari8vel at " (i(ab5tes. So'ente u'a coluna do ti$o Lon( $er'itida $or tabela. !uivale' a A#69R#6" e LO1-, res$ectiva'ente. So utilizados $ara ar'azenar dados bin8rios, !ue no deve' ser inter$retados $elo servidor Oracle. ? u' ti$o de dado e<terno do Oracle. O ti$o de dado e<terno 9LO& ar'azena dados de ta'an,o fi<o ou vari8vel no for'ato de caracteres. )' 9LO& $ode ar'azenar at T (i(ab5tes de dados de caracteres. 7dentico ao 9LO& 'as as infor'a*es ar'azenadas so do ti$o &inario.

BLOB

*/e"&'o 1: #dicionando tr4s colunas U tabela de '$re(ados. )o"o a ta7e'a de *"&re%ados 3oi criada:

CREATE TABLE empre%ados 5numero NUMBER576 CONSTRAINT E8PRE9).O _(*8:ER_P; PRIMARY KEY, nome VARCHAR251"6, sobrenome VARCHAR251"6, cp4 CHAR5116 CONSTRAINT E8PRE9).O _/P<_*; UNIQUE, car%o VARCHAR2506, num_surpevisor NUMBER576 CONSTRAINT E8P_E8P_(*8_ *PER=I OR_<; REFERENCES empre%ados 5numero6, dt_admissao DATE, salario NUMBER5&,26, perc_comissao NUMBER57,26 CONSTRAINT E8PRE9).O _PER/_/O8I )O_/; CHECK 5PER/_/O8I )O I( 51", 12.!, 1!, 1&.!, 2"66, numero_dept NUMBER526 CONSTRAINT E8PRE9_.EP)RT)8E(TO _(*8ERO_<; REFERENCES departamentos 5numero66>
)o"ando 1'ter +a7'e:

ALTER TABLE empre%ados ADD 5rua VARCHAR25!"6, num NUMBER5,6, complemento VARCHAR251"66>
.e%ras a sere" o7ser;adas na uti'iHao do 1'ter +a7'e:

? $oss=vel adicionar e 'odificar colunas de u'a tabela 'as no se $ode re'over u'a coluna de u'a tabela. # tabela deve ser criada nova'ente se' a coluna !ue se deseja re'over. 1o se $ode es$ecificar e' !ue $osio da tabela voc4 deseja !ue a coluna a$area. la a$arecer8 no final da tabela, isto , ser8 a Blti'a coluna. #o se criar u'a nova coluna e' u'a tabela s> se $ode es$ecificar a cl8usula 1O: 1)LL se a tabela estiver vazia. # lar(ura /$reciso0 de u'a coluna s> deve ser di'inu=da se a coluna s> $ossui valores nulos ou se a tabela se encontra vazia.

# 'odificao de u' ti$o de dado de u'a coluna s> deve ser efetuada se a coluna s> cont' valores nulos. Para converter u'a coluna 9R#6 e' A#69R#6" ou de A#69R#6" $ara 9R#6 a coluna dever8 estar vazia ou o ta'an,o no dever8 ser 'odificado. # 'odificao do valor .efault de u'a coluna s> afeta as lin,as inseridas $osterior'ente a esta 'odificao.

Seq?@ncia
So utilizadas na (erao de nB'eros Bnicos $ara a funo de c,aves $ri'8rias.
*/e"&'o 1: 9riao de u'a se!K4ncia $ara ser utilizada na (erao de valores de c,ave $ri'8ria $ara a tabela de de$arta'entos.

CREATE SEQUENCE se?_departamentos_numero INCREMENT BY 1 START WITH 71 MAXVALUE 00 NOCACHE NOCYCLE


I-).*M*-+ BB G 7ndica o valor do incre'ento a$licado a se!K4ncia, o valor default 1. S+1.+ GI+F G 7ndica !ual ser8 o valor inicial da se!K4ncia. M1I51L0* G Aalor 'a<i'o !ue a se!K4ncia $ode assu'ir -O)1)F* G 7ndica a !uantidade de valores !ue ficaro ar'azenados e' 'e'oria. O default 9#9R "C. Se no !uero o cac,e escrevo 1O9#9R . -O)B)L* G 7ndica se a se!K4ncia ser8 ciclica. O default 1O9V9L . # outra o$o 9V9L .

*/e"&'o 2: )tilizao da se!K4ncia na insero de u'a lin,a na tabela de de$arta'entos.

INSERT INTO departamentos (numero, nome, local) VALUES (se?_departamentos_numero.NEXTVAL, #/O(T):I+I.).E$, #(ITEROI$) O 'etodo 'ais utilizado na se!K4ncia o 1 W:A#L, !ue retorna o valor se(uinte da se!K4ncia, veja a bai<os as re(ras $ara a sua utilizao. .e%ras a res&eito da uti'iHao de -*I+51L
Onde $oss=vel utilizar 1 W:A#L: ' u' co'ando SELECT !ue no seja $arte de u'a sub;!uer5. ' u' co'ando SELECT, sub;!uer5 de u' F. 1a cl8usula -ALUE de u' INSERT. 1a cl8usula SET de u' UPDATE. Quando no $oss=vel utilizar 1 W:A#L: ' u' SELECT de u'a -IE4. ' u' co'ando SELECT co' a $alavra;c,ave DISTICT ' u' co'ando SELECT co' as cl8usulas ;ROUP B3, 5A-IN; ORDER B3. ' u'a sub!uer5 e' u' co'ando SELECT, DELETE ou UPDATE. ' u'a e<$resso DE6AULT no co'ando CREATE TABLE ou ALTER TABLE.

5I*G
)'a A7 X u'a tabela virtual baseada e' tabelas base ou e' outras A7 Xs. Aanta(ens na )tilizao de A7 X: 6estrin(e' o acesso aos dados /lin,as e colunas0F Yaze' co' os usu8rios ten,a' !ue i'$le'entar !ueries 'ais si'$les. Pode;se utilizar u'a A7 X $ara (erar u' dado derivado, ine<istente na tabela base.

Prov4e' inde$end4ncia de dados. )'a A7 X $ode ser utilizada $ara recu$erar dados de 'ais de u'a tabela. Pode' ser utilizadas na definio de (ru$os de usu8rios co' direitos de acesso co'uns. 9ada (ru$o de usu8rios teria acesso a deter'inadas A7 Xs.

9o'o criar u'a A7 X:


*/e"&'o 1: Sinta<e !uase co'$leta.

CREATE OR REPLACE! FORCE! VIEW (ome_da_=ie@ AS ub-?uerA WITH CHECK OPTION nome_da_constraint! WITH READ ONLY!
O. .* L1)* C Per'ite alterar a A7 X j8 criada. DO.)* C Per'ite criar a A7 X 'es'o !ue a tabela base no e<ista'. GI+F )F*)6 O +IO- J s> $er'ite atualizao se a vie+ continuar a en<er(ar o dado a$>s a atualizao. sta constraint $ode ter u' no'e. GI+F .*1D O-LB C -arante !ue nen,u'a o$erao .2L ser8 e<ecutada sobre esta vie+.

*/e"&'o 2: 9riao de u'a viso sobre a tabela de e'$re(ados.

CREATE VIEW v@_empre%ados AS SELECT numero, nome, sobrenome FROM empre%ados WHERE numero_dept 2 1" Su"#rio #(ora voc4 deve entender o !ue u'a tabela, se!K4ncia e vie+, con,ece sua utilizao no banco de dados e co'o criar e alterar estes ele'entos.

Lio 0K : Instrues DQL $Lin%ua%e" de )onsu'ta de Dados(

O objetivo desta lio entender o co'o fazer consutas no banco de dados e as estruturar !ue $ode' ser utilizadas $ara esta ao. Aer as 9l8usulas utilizadas e' filtros e ordena*es das infor'a*es obtidas.

)onceito
'bora ten,a a$enas u' co'ando a .QL a $arte da SQL 'ais utilizada. O co'ando S1L1CT co'$osta de v8rias cl8usulas e o$*es, $ossibilitando elaborar consultas das 'ais si'$les as 'ais elaboradas. Aeja'os <e'$los:
*/e"&'o 1: ? $reciso infor'ar as colunas desejadas da tabela.

SELECT table_name FROM user_tables SELECT numero, nome FROM empre%ados


*/e"&'o 2: )tilizando a cl8usula Z $ara listar todas as colunas da tabela.

SELECT * FROM empre%ados


*/e"&'o 2: )tilizando o$eradores arit'ticos / [, ;, Z, / 0 na cl8usula Select.

SELECT nome, salario * 12, dt_admissao FROM empre%ados


*/e"&'o 4: )tilizando #lias.

SELECT nome, salario B 12 "#$%#&'#$, dt_admissao FROM empre%ados


*/e"&'o =: )tilizando o$erador de concatenao.

SELECT nome|| ||sobrenome FROM empre%ados # cl8usula 7/24 utilizada $ara es$ecificar a tabela !ue se vai selecionar os re(istros. Obs.: O S1L1CT ta'b' considerado u' co'ando .2L.

)'#usu'as
#s cl8usulas so condi*es de 'odificao utilizadas $ara definir os dados !ue deseja selecionar ou 'odificar e' u'a consulta. Aeja'os as 'ais utilizadas:

2/D1/ 58
)tilizada $ara ordenar os re(istros selecionados co' u'a orde' es$ecifica. ? $ossivel es$ecificar se a ordenao feita e' orde' crescente ou decrescente atravez do uso do sufi<o D1SC.

*/e"&'o 1: Ordenando as lin,as selecionadas co' a cl8usula O6. 6 &V escol,endo a coluna !ue ser8 a referencia $ara a ordenao.

SELECT nome, salario FROM empre%ados ORDER BY salario


*/e"&'o 2: Ordenando as lin,as selecionadas e' orde' decrescente usando o sufi<o . S9. Obs: 1a ordenao ascendente, valores 1)LOS a$arece' no final.

SELECT nome, salario FROM empre%ados ORDER BY salario DESC


*/e"&'o 2: Ordenando as lin,as selecionadas escol,endo 'ais de u'a coluna $ara ordenao.

SELECT nome, salario FROM empre%ados ORDER BY nome, salario

DISTI0CT
sta cl8usula utilizada $ara selecionar dados se' re$etio.
*/e"&'o 1: )tilizando a cl8usula .7S:719: $ara su$ri'ir lin,as du$licatas.

SELECT car%o FROM empre%ados SELECT DISTINCT car%o FROM empre%ados


*/e"&'o 2: )tilizando a cl8usula .7S:719: co' v8rias colunas.

SELECT DISTINCT car%o, mumero_dept FROM empre%ados

)91/1
)tilizada $ara es$ecificar as condi*es !ue deve' reunir os re(istros !ue sero selecionados. Para !ue este filtro seja realizado so utilidados os O$eradores de co'$arao e O$eradores L>(icos, so eles:
O&eradores de )o"&arao
L LM N NM NL M B*+G**LI6* 2aior !ue 2aior i(ual !ue 2enor !ue 2enor i(ual !ue .iferente de 7(ual a )tilizado $ara es$ecificar u' intervalo de valores )tilizado na co'$arao de u' 'odelo e $ara es$ecificar re(istros de u' banco de dados.HLiIeH [ e<tenso \ vai si(nificar buscar todos resultados co' o 'es'o in=cio da e<tenso )tilizado $ara verificar se o valor esta dentro da lista. ssa lista $ode ser u'a serie de valores se$arados $or vir(ula ou u'a subconsulta /!uer50. )tilizado na co'$arao $ara verificar se o re(istro nulo no banco de dados, a verificao o$osta feita co' o uso do 1O:. <.: 7S 1O: 1)LL.

I- $Lista(

IS -0LL

O&eradores L9%icos
1-D O. -O+ E l>(ico. #valia as condi*es e devolve u' valor verdadeiro caso a'bos seja' corretos OU l>(ico. #valia as condi*es e devolve u' valor verdadeiro se al(u' for correto Ne?a$0o l>(ica. .evolve o valor contr8rio da e<$resso

Aeja'os al(uns e<e'$los $ara ilustrar o uso destes o$eradores e' u'a consulta ao banco de dados.
*/e"&'o 1: Selecionando a$enas os e'$re(ados locados no de$arta'ento "C.

SELECT nome, numero_dept, salario FROM empre%ados WHERE numero_dept = 2" ORDER BY salario
*/e"&'o 2: Selecionando a$enas o e'$re(ado co' o no'e 9 L7O.

SELECT nome, numero_dept, salario FROM empre%ados WHERE nome = (/E+IO)


Observa*es: 1. )sar as$as si'$les !uando a co'$arao for co' u' literal. ". literal ]9ase Sensitive^. %. default $ara datas ..;2O1;VV */e"&'o 2: Selecionando lin,as co' & :X 1 ... #1. ...

SELECT nome, dt_admissao FROM empre%ados WHERE dt_admissao BETWEEN #2'- EP-0"$ AND #1"-J)(-01
*/e"&'o 4: Selecionando lin,as co' a cl8usula 71.

SELECT nome, numero_dept, salario FROM empre%ados WHERE numero_dept IN (1", 2") ORDER BY numero_dept, salario
*/e"&'o =: Selecionando lin,as co' a cl8usula L7J .

SELECT nome, salario FROM empre%ados WHERE nome LIKE # C$ ORDER BY nome O* SELECT nome, salario FROM empre%ados WHERE nome NOT LIKE #CIC$ ORDER BY nome O* SELECT nome, salario FROM empre%ados WHERE nome LIKE #_)C$

Observa*es: ; ]\^ re$resenta nen,u' ou 'uitos caracteres. ; ]N^ re$resenta u' Bnico caracter. */e"&'o K: Selecionando lin,as co' o$eradores l>(icos.

SELECT nome, salario, numero_dept FROM empre%ados WHERE salario D2 1""" AND 5 numero_dept 2 1" OR numero_dept 2 1"6
*/e"&'o O: Selecionando lin,as co' a cl8usula 7S 1)LL. 1. # coluna 1u'Nsu$ervisor cont' o nB'ero do e'$re(ado !ue su$ervisiona o e'$re(ado corrente.

SELECT numero, nome, car%o, num_supervisor FROM empre%ados


2. 9o' esta Quer5 recu$era'os o Bnico e'$re(ado da e'$resa !ue no (erenciado $or nin(u', isto , o Presidente da e'$resa.

SELECT nome, car%o, num_supervisor FROM empre%ados WHERE num_supervisor IS NULL


Observao: O resultado da cl8usula XR 6 abai<o se'$re falso $ois u' valor nulo no $ode ser i(ual ou diferente de outro valor, 'es'o !ue este outro valor seja nulo. Se valores nulos fore' co'$arados $or o$eradores !ue no o ]7S 1)LL^ o resultado ser8 se'$re falso.

SELECT nome, car%o, num_supervisor FROM empre%ados WHERE num_supervisor 2 NULL

Dunes a&'icadas a 'inPa


So fun*es utilizadas no au<ilio da 'ani$ulao das infor'a*es obtidas do banco de dados, e<iste' dois ti$os de fun*es a$licadas, so elas:

6un$%es de "+n@as 6un$%es de ?!u7os

7unes de lin*a )'a funo de lin,a retorna u' resultado $or lin,a da tabela acessada. E8 u'a funo de (ru$o retorna u' resultado $or (ru$o de re(istros. Aeja'os a bai<o as fun*es si'$les a$licadas a lin,a:

7uno LOG*./_)YY`0

/esultado uff

7uno 0 *. /_uff`0

/esultado )YY Strin(1Strin(" % aQ.a% /#t T $/ bai<o, #ci'a de T $/ ci'a0 aM 1C

I-I+)1 /_)17A 6S7.#. Y . 6#L`0 )niversidade Yederal S0BS+. /_Strin(`, 1, %0 -5L /S#L, C0 Str Se S#L for 1)LO seu valor ser8 convertido $ara zero. aQ.a% aQ

)O-)1+ /_Strin(1`, _Strin("`0 L*-E+F /_)YY`0 .O0-D /aQ.a%1, "0

+.0-) /aQ.a%1, "0 +.0-) /aQ.a%10

.O0-D /aQ.a%1, C0 MOD /1CC, %C0

7or6atao da data # for'atao da .ata 'uito utilizada nas re!uisi*es ao banco de dados, i'$ortante le'brar !ue as datas no Oracle so ar'azenadas e' u' for'ato nu'rico interno !ue re$resenta o sculo, o ano, o '4s, o dia, a ,ora, o 'inuto e os se(undos. O for'ato de e<ibio default ..;2O1;VV. Aeja'os e<e'$los da fun*es de lin,a !ue 'ani$ula' data:
7uno SBSD1+* MO-+FSQB*+G**- /_1C;E#1;Ma`, _1C;E#1;MQ`0 1DDQMO-+FS /_C%;2#6;MQ`, ;%0 -*I+QD1B /_C%;2#6;MQ`, _S#:)6.#V`0 /esultado 6etorna a data do siste'a no for'ato ..;222;VV 1" C%;. 9;Ma Ca;2#6;MQ

*/e"&'o 1: )tilizao da funo SVS.#: e' u'a sentena SQL.

SELECT SYSDATE FROM sAs.dual Con:ero de dados Yun*es lineares res$onsaveis $or conver*es de ti$o no retorno da consulta de dados, veja'os a descrio deles:
+OQ)F1. +OQ-0MB*. +OQD1+* 9onverte u' nB'ero ou u'a data $ara A#69R#6". )' for'ato $ode ser es$ecificado. 9onverte u' strin( contendo d=(itos $ara 1)2& 6 9onverte u' strin( re$resentando u'a data $ara .#: de acordo co' o for'ato es$ecificado. O for'ato default ..;2O1;VV.

*/e"&'o 1: )tilizao da funo :ON9R#6. 9o'o e<ibir u'a data no for'ato ../22/##.

SELECT nome, TO%CHAR 5dt_admissao, #..E88EFF$6 ).8I FROM empre%ados

GO

Observa*es: Por default, a lar(ura de u'a coluna !ue resulta de u'a e<$resso de QC $osi*es. VVVV ou VVV ou VV ou V P Os Blti'os T, %, " ou 1 d=(itos do ano. 22 P O '4s re$resentado e' " d=(itos. 2O1 P O no'e do '4s abreviado e' % letras. ... ou .. ou . P .ia do ano, '4s ou se'ana. .#V P O no'e do dia $or e<tenso, co'$letado co' brancos at M caracteres. 22/## P #$enas o '4s e o ano so e<ibidos. */e"&'o 2: )tilizao da funo :ON9R#6 $ara e<ibir o dia da se'ana.

SELECT nome, TO_/H)R 5dt_admissao, #.)F#6 ).8I FROM empre%ados

GO

*/e"&'o 2: )tilizao da funo :ON9R#6 $ara e<ibir a data no for'ato co'$leto.

SELECT nome, TO%CHAR 5dt_admissao, #..-88-FF HHI8II FROM empre%ados

#6 ).8I

GO

7unes de .ru-o #s Yun*es de (ru$o o$era' co' u' conjunto de lin,as $ara dar u' resultado $or (ru$o de lin,as. )' conjunto de lin,as $ode ser u'a tabela inteira ou lin,as desta tabela divididas e' (ru$os. Pode' a$arecer na cl8usula Select. Yun*es de -ru$o <istentes: 15E J )tiliza $ara calcular a 'edia dos valores de u' ca'$o deter'inado. )O0-+ J )tilizada $ara devolver o nB'ero de re(istros da seleo. M1I J )tilizada $ara devolver o valor 'ais alto de u' ca'$o es$ecificado. MIJ )tilizada $ara devolver o valor 'ais bai<o de u' ca'$o es$ecificado S0M J )tilizada $ara devolver a so'a de todos os valores de u' ca'$o deter'inado.
*/e"&'o 1: )tilizao de fun*es de (ru$o, considerando todas as lin,as de u'a tabela u' Bnico (ru$o.

SELECT AV*5salario6, MAX5salario6, MIN5salario6, SUM5salario6 FROM empre%ados O) SELECT MIN5nome6, MAX5nome6 FROM empre%ados E.O0 BB

# cl8usula -rou$ &5 utilizada $ara a(ru$are' valores i(uais da 'es'a coluna de u'a tabela. Aeja'os o e<e'$lo:
*/e"&'o 1: )tilizao da cl8usula -6O)P &V e da funo 9O)1: $ara se contar !uantos e'$re(ados esto lotados e' cada de$arta'ento.

SELECT numero_dept, COUNT5B6 FROM empre%ados *ROUP BY numero_dept


Observa*es: Qual!uer coluna inclu=da na cl8usula S L 9:, se no estiver e' u'a funo de (ru$o, dever8 constar da cl8usula -6O)P &V. 9o' a cl8usula XR 6 $oss=vel e<cluir deter'inadas lin,as dos (ru$os. Por default as lin,as so ordenadas ascendente'ente confor'e a lista de colunas es$ecificada na cl8usula -6O)P &V. Para 'odificar este co'$orta'ento $reciso utilizar a cl8usula O6. 6 &V. */e"&'o 2: )tilizao da cl8usula -rou$ &5, da funo 9O)1: e de u' EO71 $ara se contar !uantos e'$re(ados esto lotados e' cada de$arta'ento.

SELECT d.nome .EP)RT)8E(TO, COUNT5B6 JT. FROM empre%ados e, departamentos d WHERE e.numero_dept 2 d.numero *ROUP BY d.nome
*/e"&'o 2: )tilizao da cl8usula -rou$ &5 e da funo 9O)1: $ara se contar !uantos e'$re(ados esto lotados e' cada de$arta'ento.

SELECT d.nome .EP)RT)8E(TO, COUNT5B6 JT. FROM empre%ados e, departamentos d WHERE e.numero_dept 2 d.numero *ROUP BY d.nome ORDER BY 2

0nio $0-IO- e 0-IO- 1LL(

O$erao utilizada $ara unir o resultado de consultas realizadas ao banco de dados, veja e<e'$los da utilizao deste recurso e detal,es i'$ortantes:

Lin,as du$licatas so eli'inadas do resultado de u'a unio a no ser !ue o o$erador )17O1 inclua e<$licita'ente o !uantificador #LL. #ssi', no e<e'$lo nb 1, o $rojeto nb % selecionado e' a'bos os S L 9:S, 'as s> a$arece u'a vez no resultado final. E8 o e<e'$lo nb " retornar8 os nB'eros de $rojeto ", % e %. Qual!uer nB'ero de S L 9:S $ode ser unido $elo )17O1. Quando sabe'os !ue no ,aver8 ele'entos du$licados no resultado conveniente utilizar'os )17O1 #LL $ara !ue o siste'a no seja forado a eli'inar du$licidades, desnecessaria'ente.

*/e"&'o 1: Obter o nB'ero dos $rojetos !ue, ou se iniciara' a$>s %1;E)L;Ma, ou $ossue' o e'$re(ado aSDD nele trabal,ando. )nio se' re$etio.

SELECT (*8ERO FROM PROJETO WHERE .T_I(I/IO D #11-J*+-0&$ UNION SELECT (*8ERO_PROJ FROM TR):)+H)8 WHERE (*8ERO_E8P 2 &!,,
*/e"&'o 2: Obter o nB'ero dos $rojetos !ue, ou se iniciara' a$>s %1;E)L;Ma, ou $ossue' o e'$re(ado aSDD nele trabal,ando. )nio co' re$etio.

SELECT (*8ERO FROM PROJETO WHERE .T_I(I/IO D #11-J*+-0&$ UNION ALL SELECT (*8ERO_PROJ FROM TR):)+H)8 WHERE (*8ERO_E8P 2 &!,,

MI-0S

O$erao realizada $ara Subtrair os resultados da consulta & da consulta #. Aeja'os al(uns e<e'$los:
*/e"&'o 1: Obter o nB'ero dos $rojetos !ue, ou se iniciara' a$>s %1;E)L;Ma e no $ossue' o e'$re(ado aSDD nele trabal,ando.

SELECT (*8ERO FROM PROJETO WHERE .T_I(I/IO D #11-J*+-0&$ MINUS SELECT (*8ERO_PROJ FROM TR):)+H)8 WHERE (*8ERO_E8P 2 &!,,

I-+*.S*)+

O$erao realizada $ara trazer so'ente o !ue as duas consultas te' e' co'u', se' re$etir os resultados. Aeja'os o e<e'$lo:
*/e"&'o 1: Obter o nB'ero dos $rojetos !ue, ou se iniciara' a$>s %1;E)L;Ma e o e'$re(ado aSDD nele trabal,ou.

SELECT (*8ERO FROM PROJETO WHERE .T_I(I/IO D #11-J*+-0&$ INTERSECT SELECT (*8ERO_PROJ FROM TR):)+H)8 WHERE (*8ERO_E8P 2 &!,,

Su"#rio
1esta lio vc a$rendeu co'o fazer consultas e' u' banco de dados, con,ecendo as cl8usulas utilizadas $ara fazer filtros, con,eceu os ti$os de o$eradores, co'o ordenar, a(ru$ar, transfor'ar valores e usar fun*es lineares no resultado da consulta. 7sso o ca$acita a fazer $es!uisas de nivel inter'ediario e' u' banco de dados.

Potrebbero piacerti anche