Você está na página 1de 13

CURSO:CinciadaComputaoeSistemasdeInformao

DISCIPLINA:LinguagemdeProgramaodeBancodeDadosMdulo3

SQLDMLComandosAvanadosdeConsultaaoBancodeDadosVises

ComandoSelect
Estecomandopermiteconsultarosdadosnobancodedados.

Aestruturabsicadainstruodeconsultaselectconsisteemtrsclusulas:
select: usada para listar os atributos desejados no resultado da consulta, ou seja, as colunas requisitadas

comorespostas.Estalista,almdenomesdecolunas,podeconter:
umasterisco(*),indicandoquetodasascolunasdevemserretornadas
expresses
constantes
funes
qualquercombinaodestes,conectadasporoperadoresaritmticoseparnteses
Umselectqueresulteumvalornico,quepodetercritriodeseleobaseadoemvalordelinha

selecionada.
from:Lista as tabelas a serem examinadas na avaliao da expresso. As colunas referenciadas na clusula

selectounaclusulawhere,abaixo,devemconstarnastabelaslistadasnestaclusula.
where: Consiste de uma condio de procura envolvendo atributos das tabelas que aparecem na clusula

from.olugarondeserestringeouselecionaquaislinhasdeveroserretornadas.Podeconterumselect
queresulteemvaloresquepodemserutilizadosnocritriodeseleo.

Usodesubqueries
Umcomandoselectpodeconteroutroscomandosselect,conformedescritoacima.

Subselectnaprojeodecolunasselecionadas
Nalistadecolunasselecionadaspodeseutilizarumselect,queserexecutadoumavezparacadalinharesultante
doselectprincipal.

SelectCodEmpregado,Nome,(selectNomefromDepartamentowhereCodigo=Depto_Empregado)asNome_Depto
fromEmpregado

Resulta3colunas:CdigoeNomedecadaempregadoeNomedoDepartamentoondetrabalhacadaempregado.

Subselectnaclusulawhere
Oresultadodeumselect,desdequecompatvelcomocontexto,podeserutilizadonacondiodowheredeum
select.

SelectCodEmpregado,NomefromEmpregado
whereSalario>(Selectavg(salario)fromEmpregado)

Resultaosempregadoscomsalariomaiordoqueamediadossalriosdetodososempregados.
Outrostiposdepredicadosquepermitemousodesubselect:
EXISTS
IN

PredicadoExists
utilizadoparatestarseoconjuntodelinhasresultantesdeumaconsultavazio.Sintaxe:

|not|exists<subselect>

select*fromCargo
whereexists(select* fromEmpregadowhereEmpregado.CodCargo=Cargo.Codigoandsalario>1000)

Osubselectresultaverdadeiro(existe)oufalso(noexiste).ParacadavalordeCargo.Codigoqueresulta
verdadeiro,osdadosdocargoretornamnoresultadodoselect.

PredicadoIN
Opredicadoincomparaumvalorcomumconjuntodevalores.Esteconjuntodevalorespodeserumalistaouo
resultadodeumsubselect.

<expresso>|not|in<subselect>
ou

<expresso>|not|in<listadevalores>

select*
fromEmpregado

whereCodEmpregadoin(100,101,102,103)

Empregadoscomumdos4cdigosespecificados.

select*
fromDepartamento

whereCodigoin(selectCodDeptofromEmpregadowheresalario>1000)

Departamentosquepossuemempregadoscomsalario>1000.

Junodetabelas
Tabelasrelacionadasporchaveestrangeirapodemseracessadasjuntas(joined)emummesmoselect.
TodasascolunasdecadaumadastabelaspodemserapresentadasnoSelectepodemserutilizadasnascondies
dowhere.
Nowhereprecisaestaraseguinteigualdade,paracadaduastabelas:
tabela1.chave_primaria=tabela2.chave_estrangeira
selectEmpregado.Nome,Cargo.Nome,Departamento.Nome
fromEmpregado,Cargo,Departamento

whereCargo.Codigo=Empregado.CodCargo
andDepartamento.Codigo=Empregado.Cod.Depto

TodososEmpregadoscomosdados(codigoenome)doseucargoedoseudepartamento.

Todasostiposdepredicadospodemseracrescentadosaclusulawhere.

selectEmpregado.Nome,Cargo.Nome,Departamento.Nome
fromEmpregado,Cargo,Departamento

whereCargo.Codigo=Empregado.CodCargo
andDepartamento.Codigo=Empregado.Cod.Depto
andEmpregado.Nomelike'%Silva%'
andDepartamento.Codigoin('Contab','RH','Compras')

TodososEmpregadoscomSilvanonomeecdigododepartamentonalistaespecificada.

RenomeaodasTabelasnoSelect
Noselectosnomesdatabelaspodemsersubstitudosporapelidos
selectE.Nome,C.Nome,D.Nome
fromEmpregadoE,CargoC,DepartamentoD

whereC.Codigo=E.CodCargo
andD.Codigo=E.Cod.Depto

Innerjoin
Ajunodetabelasbaseadanaigualdadechave_primaria=chave_estrangeiradenominadainnerjoin(juno
interna)epodeserescritadaforma
selectE.Nome,C.Nome,D.Nome
fromEmpregadoEinnerjoinCargoConC.Codigo=E.CodCargo
innerjoinDepartamentoDonD.Codigo=E.CodDepto
Aclusulawheresomenteserutilizadaparafiltrarlinhasresultantes.Aigualdadeentrechaveprimriaechave
estrangeiraestestabelecidanaclusulainnerjoinon.
Oresultadodeuminnerjoinseroaslinhasqueatendamacondiodeigualdadeentrechave_primriae
chave_estrangeira.
Noexemplo,EmpregadosquetenhamCodCargoouCodDeptonulosnoapareceronoresultado.

Outerjoin
Paraquelinhasdeumatabelaquenoserelacionamcomnenhumalinhadasdemaistabelasparticipantesda
junoapareamnoresultado,utilizaseoouterjoin(junoexterna).
selectEmpregado.Nome,Cargo.Nome,Departamento.Nome
fromEmpregado,Cargo,Departamento

whereCargo.Codigo=Empregado.CodCargo (+)
andDepartamento.Codigo=Empregado.CodDepto (+)
O(+)indicaquenomedosempregadosquenaEmpregadotenhamCodCargoe/ouCodDeptonulosaparecerona
listaresultante,semnomedecargoounomededepartamento.
Essemesmoselectpodeserescritodaforma:
selectE.Nome,C.Nome,D.Nome
fromEmpregadoErightouterjoinCargoConC.Codigo=E.CodCargo
rightouterjoinDepartamentoDonD.Codigo=E.CodDepto

OperaesdeConjuntos
Algebrarelacional,naqualaSQLsebaseia,incluiasoperaesunion,intersecteminus,parajunesde
conjuntos.Entretanto,apenasainstruounionfoiincludanopadroANSIdalinguagemSQL.Istonochegaa
serumproblema,poisainstruointersectpodeserrealizadacomaconstruoin,eaminuscomanotin.
Parademonstrarmosautilidadedainstruounion,vamosconsiderarqueaseguinteconsultasejarequisitada:
forneatodososcdigosdosfuncionriosqueprovocaramqualquermovimentaonoestoque,ouseja,uma
requisioouumadevoluo.
Pararecuperarmososfuncionriosquerequisitaramprodutos,utilizaramosaseguinteinstruo:

selectCOD_FUNCIONARIO
fromREQUISICAO
Paraaquelesquedevolveramalgumproduto:

selectCOD_FUNCIONARIO
fromDEVOLUCAO
Agoraparafazermosauniodestesdoisconjuntosdevalores,utilizamosooperadorunion.Assimainstruo
resultante:

selectCOD_FUNCIONARIO
fromREQUISICAO
union
selectCOD_FUNCIONARIO
fromDEVOLUCAO
Seaconsultafosseoscdigosdosfuncionriosqueparticiparamdeumarequisioedeumadevoluo,teramos:

selectCOD_FUNCIONARIO
fromREQUISICAO
intersect
selectCOD_FUNCIONARIO
fromDEVOLUCAO
Omesmoresultadoobteramoscomaseguintesentena:

selectCOD_FUNCIONARIO
fromREQUISICAO
whereCOD_FUNCIONARIOin(selectCOD_FUNCIONARIOfromDEVOLUCAO)
Seaconsultafosseparaobteroscdigosdosfuncionriosqueparticiparamdealgumarequisio,masno
participaramdenenhumadevoluo,teramos:

selectCOD_FUNCIONARIO
fromREQUISICAO
minus
selectCOD_FUNCIONARIO
fromDEVOLUCAO
Omesmoresultadoobteramoscomaseguintesentena:

selectCOD_FUNCIONARIO
fromREQUISICAO
whereCOD_FUNCIONARIOnotin(selectCOD_FUNCIONARIOfromDEVOLUCAO)
Portantopudemoscomprovarquetantoaoperaointersectcomoaoperaominuspodemserrealizadasem
construesanlogasutilizandoinenotin,respectivamente.
importanteressaltarqueooperadoruniontrataastabelascomoconjuntos,epelaregradeuniodeconjuntos,
valoresduplicadossodescartados.Assim,seumfuncionriorequisitouedevolveualgumproduto,eleaparecer
apenasumaveznalistaresultante.Casosejanecessriomanterasduplicaes,deveseutilizarooperadorunion
allaoinvsdeunion.
Ouniodeselectspodeserparticularmentetilnaclassificaodeinformao:
SelectCod_Empregado,Nome,'PrecisaMuitoAumento'asSituacao
fromEmpregadowheresalario<1000
union
SelectCod_Empregado,Nome,'PrecisaPoucoAumento'asSituacao
fromEmpregadowheresalariobetween1000and3000
union
SelectCod_Empregado,Nome,'NoPrecisaAumento'asSituacao
fromEmpregadowheresalario>3000;

Vises

Umaviso(VIEW)consistebasicamentedeumatabelalgicaderivadadeoutrastabelas.Abaseparaaconstruo
deumaviewocomandoSELECT.

Aviewnoexistefisicamentecomotabela,pormpodeseracessadacomosefosseumatabelareal.

Sintaxe:

CREATEVIEW<nomedaviso>
AS<subselect>

Osubselectpodeacessarmaisdeumatabelae,comexceodeORDERBY,todasasestruturaseclusulasde
umselectpodemserutilizadas.

Devemosobservarque:

1Umavisodefinidasobreumanicatabelasomenteseratualizvelseosatributosdatalvisocontiverema
chaveprimriadetaltabela.
2Visesquejuntam(join)vriastabelasnosopassveisdeatualizaes.
3Visesqueseutilizamdefunesdeagrupamentos,tambmnopoderoseratualizadas.

Restriessobreumaview:

Viewsomenteparaconsulta:

CREATEVIEW<nomedaviso>
AS<subselect>
WITHREADONLY

Limitaodeinseresoumodificaes:
Aplicvelaviewssobreumanicatabela,quepodemterlinhasincludasoualteradas,garantindoquenovaslinhas
oulinhasalteradascontinuemdentrodascondiesdaview


CREATEVIEW<nomedaviso>
AS<subselect>
WITHCHECKOPTION

Exemplos:
Tabelasbase:

Departamento(Codigonumber(2)primarykey,Nomechar(15),Gerentenumber(5),Divisaochar(10),
Localchar(15))
Empregado(IDNUMBER(5),Nomevarchar2(20),Deptonumber(2),Cargochar(6),Tempo_empnumber(2),
Salarionumber(8,2),Comissaonumber(7,2))

1. VisodeEmpregado,mostrandoseunomeenomedodepartamento

CREATEVIEWvisao_ex01
ASSELECTE.nomeNome_Emp,D.NomeNome_Depto
FROMEmpregadoE,DepartamentoD
WHEREE.depto=D.codigo

Usodaview:
ListarosnomesdosempregadosquetrabalhamnodepartamentocomnomeCOMPRAS

SELECTNome_Emp
FROMVISAO_EX01
WHEREnome_depto=compras
2. VisodeEmpregado,somenteparaconsultas,mostrandotodososseusdadosmenososalrioecomisso
CREATEVIEWvisao_ex02
ASSELECTID,Nome,Depto,Cargo,Tempo_emp
FROMEmpregado
WITHREADONLY

3. VisodeEmpregado,mostrandotodososseusdados,dosempregadoscomsalrioabaixode15000
CREATEVIEWvisao_ex03
ASSELECT*FROMEmpregado

WHEREsalario<15000WITHCHECKOPTION

AinclusodeumanovalinhanatabelaEMPREGADOatravsdainclusonaviewVISAO_EX03possvel,desde
queacondioSALARIO<15000sejarespeitada.

AexclusodelinhasnatabelaEMPREGADOpodeserfeitaatravsdaexclusonaviewVISAO_EX03.

AalteraodelinhasnatabelaEMPREGADOatravsdaalteraodelinhasdaviewVISAO_EX03
possvel,desdequeacondioSALARIO<15000sejarespeitada.

Alteraodeumaview:

ParaalteraradefiniodeumaViewelaprecisaserrecriada:

CREATEORREPLACEVIEW<nomedavisoexistente>
AS<subselect>
[WITHREADONLY]
[WITHCHECKOPTION]

Eliminaodeumaview:

DROPVIEW<nomedavisoexistente>

Bibliografia
Cap 3,4 SILBERSCHATZ, A. KORTH, H. SUDARSHAN, S. Sistemas de bancos de dados. So Paulo: Makron
Books,1999.
Cap6GUIMARES,C.A.,FundamentosdeBancosdeDadosModelagem,ProjetoelinguagemSQL,Campinas,
EditoradaUnicamp,2008

Exerccio1:

Umaempresadefiniuumbancodedadosparaarmazenarosseusdadosorganizacionais,jtendodefinidoastabelas:
Departamento(Codigo,Nome)eEmpregado(Cod_emp,Nome_emp,Salario_emp,Cod_depto_emp)
ondeCod_depto_empumachaveestrangeiraquereferenciaDepartamento.Osdadosaindaestosendoincludosnas
tabelas,masjforamcadastradosvriosdepartamentosevriosempregados.Parasaberquantosempregadosjesto
cadastradosemcadadepartamentoforamescritosdoiscomandosSQL:


I)selectD.Nome,(selectcount(*)fromEmpregadowherecod_depto_emp=D.Codigo)asQtde
fromDepartamentoD
II)selectD.Nome,count(*)asQtde
fromDepartamentoDinnerjoinEmpregadoEonD.Codigo=E.Cod_depto_emp
groupbyD.Nome

Sobreosdoiscomandosacimapodeseafirmar:

AOsdoiscomandosapresentamresultadomasnenhumdosdoiscomandosapresentaoresultadosolicitado
BOcomandoIapresentaoresultadomaiscompletoporque,almdeapresentartudoqueocomandoII
apresenta,tambmapresentaosDepartamentoscomzeroempregados,sehouver
COsdoiscomandosapresentamresultadosiguais,emqualquersituaodosdados
DOsdoiscomandosapresentamresultadosiguais,emqualquersituaodosdados
EOcomandoIIapresentaoresultadoesperado.OcomandoInoexecutvelporerro
Comentrios:
EssadisciplinanoEDouvocnofezcomentrios
Exerccio2:

Nobancodedadosdeumaempresaestodefinidasastabelas:
Departamento(Codigo,Nome)eEmpregado(Codemp,Nomeemp,Salario,Coddeptoemp)
ondeCoddeptoempumachaveestrangeiraquereferenciaDepartamentoeidentificaodepartamentoondeoempregado
trabalha.AnaliseodoiscomandosSQLabaixoquetemcomoobjetivomostrar,paracadaempregado,oseunomeeocdigoe
onomedodepartamentoondetrabalha:

I)selectE.Nome,(selectD.Codigo,D.NomefromDepartamentoDwhereD.Codigo=E.Coddeptoemp)
fromEmpregadoE

II)selectE.Nome,E.Coddeptoemp,(selectD.NomefromDepartamentoDwhereD.Codigo=E.Coddeptoemp)
fromEmpregadoE

Sobreosdoiscomandosacimapodeseafirmar:

AOsdoiscomandosapresentamresultadomasnenhumdosdoiscomandosapresentaoresultadosolicitado
BOcomandoInoexecutvelporerroeocomandoIIexecutamasnoapresentaoresultadosolicitado
COsdoiscomandosapresentamresultadosiguais,emqualquersituaodosdados
DOcomandoIapresentaoresultadoesperado.OcomandoIInoexecutvelporerro
EOcomandoIIapresentaoresultadoesperado.OcomandoInoexecutvelporerro
Comentrios:
EssadisciplinanoEDouvocnofezcomentrios
Exerccio3:

Nobancodedadosdeumaempresaestodefinidasastabelas:
Departamento(Codigo,Nome)eEmpregado(Codemp,Nomeemp,Salario,Coddeptoemp)
ondeCoddeptoempumachaveestrangeiraquereferenciaDepartamentoeidentificaodepartamentoondeoempregado
trabalha.AnaliseodoiscomandosSQLabaixoquetemcomoobjetivomostrarosnomesdosdepartamentosondetrabalham
empregadoscomsalriomenordoqueamdiasalarialdaempresa:

I)SelectD.Nome
fromDepartamentoD
whereexists(select*fromempregadoEwhereE.Coddeptoemp=D.codigoandE.salario<(selectavg(salario)from
empregado))

orderbyD.nome
II)selectdistinctD.Nome
fromDepartamentoD,EmpregadoE
whereD.codigo=E.CoddeptoempandE.salario<(selectavg(salario)fromempregado)
orderbyD.nome

Sobreosdoiscomandosacimapodeseafirmar:

AOsdoiscomandosapresentamresultadomasnenhumdosdoiscomandosapresentaoresultadosolicitado
BOcomandoInoexecutvelporerroeocomandoIIexecutamasnoapresentaoresultadosolicitado
COsdoiscomandosapresentamresultadosiguais,emqualquersituaodosdados
DOcomandoIapresentaoresultadoesperado.OcomandoIInoexecutvelporerro
EOcomandoIIapresentaoresultadoesperado.OcomandoInoexecutvelporerro
Comentrios:
EssadisciplinanoEDouvocnofezcomentrios
Exerccio4:

4)Nobancodedadosdeumaempresaestodefinidasastabelas:
Departamento(Codigo,Nome,Codgerente)eEmpregado(Codemp,Nomeemp,Salario,Coddeptoemp)
ondeCoddeptoempumachaveestrangeiraquereferenciaDepartamentoeidentificaodepartamentoondeoempregado
trabalhaeCodgerenteumachaveestrangeiraquereferenciaEmpregadoeidentificaogerentedodepartamento.Analiseo
doiscomandosSQLabaixoquetemcomoobjetivomostrarosnomesesalriosdosempregadoseonomedoseu
departamento,paraosempregadosquetemsalriomaiordoqueosalriodogerentedodepartamentosondetrabalham:

I)selectE.Nome,E.Salario,D.Nome
frpomEmpregadoE,EmpregadoG,DepartamentoD
whereECoddeptoem=D.CodigoandD.CodGerente=G.Codemp
andE.salario>G.salario

II)selectE.Nome,E.Salario,D.Nome
fromEmpregadoE
innerjoinDepartamentoDonE.Coddeptoemp=D.Codigo
innerjoinEmpregadoGonD.CodGerente=G.codemp
whereE.salario>G.salario

Sobreosdoiscomandosacimapodeseafirmar:

AOsdoiscomandosapresentamresultadomasnenhumdosdoiscomandosapresentaoresultadosolicitado
BOcomandoInoexecutvelporerroeocomandoIIexecutamasnoapresentaoresultadosolicitado
COsdoiscomandosapresentamresultadosiguais,emqualquersituaodosdados
DOcomandoIapresentaoresultadoesperado.OcomandoIInoexecutvelporerro
EOcomandoIIapresentaoresultadoesperado.OcomandoInoexecutvelporerro
Comentrios:
EssadisciplinanoEDouvocnofezcomentrios
Exerccio5:

Umaempresadecomrcioeletrnicopossuidepsitosdeprodutosemdiferentesregiesdopas.Osdadosdosprodutos
comercializadoseestoquesdisponveisestoarmazenadosnasseguintestabelas:
Produto(Codigo,Nome,UnidMedida,PrecoUnit)
Deposito(Codigo,Nome,Cidade)
EstoqueProd(CodProd,CodDeposito,QtdeEstoque),ondeCodProdeCodDepositosochavesestrangeirasreferenciandoas
tabelasProdutoeDeposito,respectivamente.


Parafazerumaanlisedasituaodeestoquedosprodutosfoisolicitadoumrelatrioorganizadopornomededepsitoe
cdigodeproduto,queapresenteosdepsitoseprodutosondeoestoqueestcommenosdoque10unidades.Oseguinte
comandoSQLestsendomontado,masaindaestincompleto.

SelectD.Codigo,D.Nome,P.Codigo,P.Nome,E.QtdeEstoque
fromDepositoD,ProdutoP,EstoqueProdE
(1)_______________
(2)_______________

Escolhaaopoquecompletaaslinhasidentificadaspor(1)e(2)nocomandoacimademodoqueeleretorneoresultado
solicitado:

A(1)whereD.Codigo=E.CodDepositoandP.Codigo=E.CodProdandE.QtdeEstoque<10(2)orderby
D.Nome,P.Codigo
B(1)whereD.Codigo=E.CodDepositoandP.Codigo=E.CodProdandE.QtdeEstoque<10(2)group
byD.Nome,P.Codigo
C(1)whereE.QtdeEstoque<10(2)orderbyD.Nome,P.Codigo
D(1)whereD.Codigo=E.CodDepositoandP.Codigo=E.CodProdandE.QtdeEstoque<10(2)linhaem
branco
E(1)whereE.QtdeEstoque<10(2)groupbyD.Nome,P.Codigo
Comentrios:
EssadisciplinanoEDouvocnofezcomentrios
Exerccio6:

Umaempresadecomrcioeletrnicopossuidepsitosdeprodutosemdiferentesregiesdopas.Osdadosdosprodutos
comercializadoseestoquesdisponveisestoarmazenadosnasseguintestabelas:
Produto(Codigo,Nome,UnidMedida,PrecoUnit)
Deposito(Codigo,Nome,Cidade)
EstoqueProd(CodProd,CodDeposito,QtdeEstoque),ondeCodProdeCodDepositosochavesestrangeirasreferenciandoas
tabelasProdutoeDeposito,respectivamente.

ParaavendadeumprodutodecdigoP103,desejasesaberosnomesdosdepsitosquepossuemtalprodutoemestoque.O
seguintecomandoSQLestsendomontado,masaindaestincompleto.

SelectD.Nome,E.QtdeEstoque
(1)_______________
(2)_______________

Escolhaaopoquecompletaaslinhasidentificadaspor(1)e(2)nocomandoacimademodoqueeleretorneoresultado
solicitado:

A(1)fromDepositoD,EstoqueProdE(2)whereD.codigo=E.CodDepositohavingE.CodProd='P103'
B(1)fromDepositoD,EstoqueProdE(2)whereE.CodProd='P103'
C(1)fromDepositoD,EstoqueProdE(2)whereD.codigo=E.CodDepositoandE.CodProd='P103'
D(1)fromDepositoD,EstoqueProdE(2)linhaembranco
E(1)fromDepositoD,EstoqueProdE,ProdutoP(2)whereP.codigo=E.CodProdandP.Codigo='P103'
Comentrios:
EssadisciplinanoEDouvocnofezcomentrios
Exerccio7:

Umaempresadecomrcioeletrnicopossuidepsitosdeprodutosemdiferentesregiesdopas.Osdadosdosprodutos
comercializadoseestoquesdisponveisestoarmazenadosnasseguintestabelas:
Produto(Codigo,Nome,UnidMedida,PrecoUnit)

Deposito(Codigo,Nome,Cidade)
EstoqueProd(CodProd,CodDeposito,QtdeEstoque),ondeCodProdeCodDepositosochavesestrangeirasreferenciandoas
tabelasProdutoeDeposito,respectivamente.

PararealizarumagrandevendadeumprodutodecdigoAB902desejasesaberototaldeestoquedetalprodutoemtodosos
depsitos.ParaobteresseresultadoforamescritosdoiscomandosSQL:

I)SelectP.nome,sum(E.QtdeEstoque)TotalEstq
fromEstoqueProdE,ProdutoP
whereP.Codigo=E.CodProdutoandP.Codigo='AB902'
groupbyP.nome

II)Select(SelectP.nomefromProdutoPwhereP.Codigo='AB902')Nome,sum(E.QtdeEstoque)TotalEstq
fromEstoqueProdE
whereE.CodProduto='AB902'

Sobreosdoiscomandosacimapodeseafirmar:
AOsdoiscomandosapresentamresultadomasnenhumdosdoiscomandosapresentaoresultadosolicitado
BOcomandoInoexecutvelporerroeocomandoIIexecutamasnoapresentaoresultadosolicitado
COsdoiscomandosapresentamresultadosiguais,emqualquersituaodosdados
DOcomandoIapresentaoresultadoesperadoeocomandoIIexecutamasnoapresentaoresultadosolicitado
EOcomandoIIapresentaoresultadoesperado.OcomandoIexecutamasnoapresentaoresultadosolicitado
Comentrios:
EssadisciplinanoEDouvocnofezcomentrios

Você também pode gostar