0% acharam este documento útil (0 voto)
52 visualizações127 páginas

Introdução ao Servidor Oracle e Banco de Dados

O documento discute o Oracle, um sistema de gerenciamento de banco de dados desenvolvido pela Oracle Corporation. Ele gerencia grandes quantidades de dados em um ambiente multiusuário, proporcionando segurança e recuperação. Os usuários acessam o servidor Oracle usando comandos SQL, que o servidor executa no banco de dados. O documento também descreve o papel do Oracle na computação cliente/servidor, características do servidor Oracle, como suporte a grandes bancos de dados e concorrência de dados, e a arquitetura geral e o processamento do Oracle, incluindo armazenamento físico, estrutura lógica e processamento de consultas.

Traduzido por

ScribdTranslations
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
52 visualizações127 páginas

Introdução ao Servidor Oracle e Banco de Dados

O documento discute o Oracle, um sistema de gerenciamento de banco de dados desenvolvido pela Oracle Corporation. Ele gerencia grandes quantidades de dados em um ambiente multiusuário, proporcionando segurança e recuperação. Os usuários acessam o servidor Oracle usando comandos SQL, que o servidor executa no banco de dados. O documento também descreve o papel do Oracle na computação cliente/servidor, características do servidor Oracle, como suporte a grandes bancos de dados e concorrência de dados, e a arquitetura geral e o processamento do Oracle, incluindo armazenamento físico, estrutura lógica e processamento de consultas.

Traduzido por

ScribdTranslations
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

ORACLE

sodad ed edadi tnauq ednargm


au aicnereg euq D B
M,aSsi t I
T
m
am
bém
.anem
nteiusldosam
eossecaosiruásosmtqueiarpasemantebi
ofnrescgeuarenceuçapeaE
rçm
ã[Link]
model.
OracleéonomedosistemadegerenciamentodebancodedadosdesenvolvidopelaOracle.
Corporação.
[Link]áriosacessamoservidorOracle.
usandocomandosSQL A
.sm
ios,ervdioO
rracelrcebecomandosSQLdosusuáoris.
exhetcm
ustonhtedabtase.

SERVIDOR ORACLE

Banco de dados

OPapeldaOraclenaComputaçãoCliente/Servidor

AcomputaçãoCliente/Servidoréummétodoemque

Obancodedadoséarmazenadonoservidornarede
Um programa dedicado, chamado back-end, roda no servidor para gerenciar
banadcqm oaetudeo,sbém
aré[Link]
Usuárioacessaosdadosnobancodedadosexecutandoaaplicação,tambémchamadade
baoceknm
q-adcseuxecu,nseçãaotcim
celdno-nrstfo
.dorvires
Appcilaoitnsrunnnigonhteceilnsntietracw thtihteuse.r
Oback-endcuidadagestãototadlobancodedados.

1
Oaplicativoclienteeoback-endsãoexecutadosemmáquinasdiferenteso,que
talvez de tipos diferentes. Por exemplo, o back-end pode rodar em
o mainframe e o front-end podem estar em um PC.

Oracleéumsistemadebancodedadosquerodanoservidoreéusadoparagerenciar
.dE
n-kcB
aé sodadedocnabed rodivres oarapm
[Link]

A
vesrãomercaseindetosevrdioO
rar9é[Link]

[Link]ãoalgunsdos
aopfm
trlnO
qasusaoiercplear.

WindowsNT.
New
t aredeRomance
Unix

O que é o Oracle Pessoal?

eO eacldorviersN
etesO .doaclurabesm
orédosO
eoP
snalcer
ondesborasomcréoutomnãaE
[Link]ácxepodsdois
OracleServerrodanoServidoreoFront-endrodanoCliente.

osrePo odnasu ovi taci lpam


u revlovnesed levíssopÉ
um ambiente Cliente/Servidor. O Oracle Pessoal pode suportar até 15
conexõedsb

Cad
crO
iasotecrtíraecl

Asegunesiãtoaglumadsacm
sairscetírpoatnredtsoOarS
celevre.r

LargeDatbaseSupport

OOraclesuportaomaiorbancodedados,potencialmentecentenasdepetabytesdetamanho.
of ,oçapse od etneici fe osu o etm
irepm
ém
bat ossI
gestão.

ConcurrênciadeDados

OOraclesuportaoacessoconcorrenteaobancodedadospormúltiplosusuários.
[Link]
utpnacm
hriasernldáotbeqsaluneti

sdrad
natsecnatpeccayrtsu
d
nI

OOracleServeré100%compatívelcomaentradadasnormasANSI/ISO.
Oracleadherestoindustrystandardsfordataaccesslanguage,network
2
ponrO
[Link]
leum
pstoea,irgbote'ra
lpa rat rop l icáf É .etnei lcodotnm
ei t sevni

3
Poratdb
ilaide

OsoftwareOraclepodeserportadoparadiferentessistemasoperacionaiseéo
nameosynelm satlO
[Link]çõlesmOaercplodsepraodtrpoar
eqm
tusqaisuloerapoacernim
alpouocnausenhummacaoçiãfdoi.

EnforcedIntegrtiy

AOraclepermitequeosusuáriosdefinamregrasdenegó[Link]
nãopercsainerculdíononvídeloapcivalto.

SegurançadeDados

OOraclefornecesegurançaemdiferentesníveis-níveldesistemaeníveldeobjeto.
am
Fdtauem
vrnésiçõabt.eésam
noparltegsácm
diaunfçeãoratsai

Suporp
etarambeinC
eteinleS
t/ervdior

[Link]
[Link]ároaceferntiaazfentC
ienoqloudanbtdaon,escãogtesaodatazf
m
osdinteocprdem
orafnadosadeoncbanom
donarezaajesgoódicoqueem trpeidorvires
ufenspoçIõem
rzcase.içnrãltdoicoódgerieorudaze
.ogefárt

DatabaseArchitecture

Um banco de dados contém informações de qualquer comprimento. Mas, para o usuário final, temos
sa odnat luco ,sairássecen seõçm
arofni sa sanepa rartmso
uasonçm
dãctouvaesdilpfárosaéedçtrãboeatsdo.s

ed seõçar tsba ed sievín 3 rasu sm


oedop R
D
B
M
,Sreuqlauqm
E

coN
siífvíel
NLvóeílcgoi
NvídeleVsiuazilação

PhycsiaL
level

AceursdiatífaorbancoddeadoepástocsinadnacÉ osniví[Link]
casim
feunem tconuajqênrodsutveiom
[Link]

ArquivosDeDados
ArquviosdeRedoolg
4
Controlfiles

Eseaqsruviosãoacidroasuotmcaitmenqetuandobancoddeadoacéidrso.

ArquivosdeDados

q alebat adC
a .sodad ed ocnab od sodad som
étnoc elE
boSaqndrvuocespiam
dt.séroeasO
doS
eapnrsvateorclide
aqruvios.

RedoLogFiles

CadabancodedadospossuuimconujnotdedosioumasiarquviosdeolgderedoE .sseconujnotdeolgderedo
OaqrsuviedoresãoconhedciosmaqoruvidobesancdoeaO
[Link]
esedoLosãguosadeom
scahdsoflae.
[Link]ãsdosadeoncbanosatiefsõeçaretlasasT
odao.ãçarupecer
)gol .10odersm eanel iF(

ControlFiles

Contéminformaçõesnecessáriasparaverifcaraintegridadedobancodedados,
nab on soviuqra sor tuo sod sm
eon so odniulcni

DatabaseName
Nomeseolcazilaçõesdearquviosdedadosearquviosdeolgderedação.

Cam
nhioPodem
ustarO
caom
ldare\ctrlnhiondvoaesridpteaors
3tiposdeficheiros

5
Erstuu
traLógcai

C
O
[Link]íaurtrE
ndtepiasnedéL
ntcaóugritA
rEts
boandcoaedcoénsm
tcesognm
[Link]

EpsT
adçoeabsel
Segmenots
Exetnsões
Blocos

EspaçodeTabeal

Cadabancodedadoséumacoelçãodeespaç[Link],odemosusarumaatbeal
.gapholfdevaitaciplaàdonsaidA
P
ceaY
leR
lraodcçspO
sm
teL
rnaezL
arpa

Todobancodedadosconé[Link]écraidoauotmacitamenet.
quandoumbancodedadosécriado,oespaçodesistemacontémosdados
aobdctaineoslái.r

nm
eai rarom
pet alebat ad oçapse o ranrot levíssopÉ
et la ,etnm eavon levínops id o-anrot e ahni l
bkcaupo.D
orezaB
fpoA
dn,aeãorfpecasbalt

Segmenots

Osdadosemtablespacesvêmnaformadesegmentos.
ExampelTabeléumsegment

UmbancodedadosOracelrquearét4pitosdesegmenots

SegmentosdeDados salebat ed sodad ranezm


ara arap odasuÉ
ecidnÍD
esotnmegeS Usedtostoreindexes
Segmenotsdereversão A
niformaçãofoarimazenada
osm
eirátpS
orgm
eosnte TabelasTemporáriasOraclestore

Extensões

Oespaçodaem r azenamenoatlcadopasergmenoentásofam
r daE
exetnsõC
[Link]
[Link]éaO
im
bncerlptsab6N
cels5tdqavd3eurosú6i.m
atdeor
um banco de [Link] feito dentro de um arquivo de dados. N Número de contínuos
dbbolcksmakesupanExen.t

6
OveralSystemStructure

Um sistema de banco de dados é particionado em módulos, que tratam diferentes


. laregm
eatsisodsedadilibasnopser

Ocsomponenueftsncoindasueim
estm
i dabeancoddeadosão

ComponenteProcessadorDeConsultas
ComponendetG
eerncaimenodtA
em
r azenamenot

ComponenteProcessadorDeConsulta

Ecesotmponenuéetmcaoelçãodosegunepitsorcesos.

DMLCompiler:EletraduzdeclaraçõesDMLemumnívelmaisbaixo
tne sat lusnoc ed oãçai lava ed m
os inacm
e o euq seõçur t sni

Pré-compalidordeDMLn
icorporadoE
. elconvertedecalraçõesDMLn
icorporadas.
t sohehtni s l lacerudecorplm
aronotnm
iargorpnoi taci lppanani
ngíua.l

DDLInterpreterInterpretadeclaraçõesDDLeasregistra.
m
sasedountonjc

MotordeavaliaçãodeconsultasExecutainstruçõesdenívelinferior
DM
doram
clL
opilpedoarge

ComponenetGesotrArmazenamenot

ocnab on sodanezm
ara sodad so er tne ecafretni m
auÉ
porgarm
coeasunsbutm
ledm
stiaoetsa.

AutorziaçãoeGerentedeIntegrd
iadeTestaporsatsifaçãode
psoi ráususodedadi rotuaaaci f i reveedadi rgetniedseõçi r t ser

TransactoinManagerItensuresconcurrentransactoinexecutoins
porcesadseom
[Link]
GerencaidordeArquviosE -elgerencaiaaolcaçãodespaçonodsicoeosdados
m
.oãroçafni ratneserperarapsadsusaruturtse
7
GerencaidordeBuferEstaéresponsávep
lorbuscardadosdodsico
.lapicnirpm
am
eianróom
anertnzae

8
InstânciaOracle

CadabancodedadosOracelesátassocaidoaumanisâtncaiOracelT .odavezqueum
buoam
dnciodm
i,aedáéroasem
cham
óiraÁ
daG
earm
doS
tsblS
ia(lG
aA ou)
ÁeraGolbC alomhlpaidoatrélcadueamoumpsoaricesoãnacsoidos.

A
combniaçãodoSGA
deopsorcesoO
sarcéehlamaddanIeâstnO
caiarcel.

SGAconestimváairesurtuardsememóair:

O pcoom lhladpiuéoatsrdpoam
ruanrzçiestõanS
seasrQL
ercenm
t enxtecuadtas.
.sodaedoiránoicidodsodasuem
etnetnecer sm iasodasoeseõçaralced
EnsuairstçõeSsQL podemesnrvaidapsourmporcesadoduresunoáir,
[Link]áicdoiritpraaielv,osm
laseodcipsearnt

O
cachdebdobuoefrancdoeaduéosadpoam razedonasdrm
osercesnam
it eunsatdos
Odsadoisnãdetolscaeiqrsuviodseados.

Ooearçdltguõaélem
sadesrapostarudnabosnteafçinscdoeadpoosr
.onalpodnugesm
e sossecorpe rodivreso

9
Processodeconsulta

1 Analisar
2 Executar 3
3 Buscar

Servidor
Processo DB
s

1
Usuário
Processo

2
Clie
nt

Quando o usuário se conecta ao banco de dados, ele cria automaticamente duas diferentes
porcescohsamaddopoesrcesdoupesuorácireO [Link]éáir
porgam
rcaduçiprãnqaeolõS
tsuigeasQ
rO
[Link]
[Link]ásdooseocprolpesdanvei sõeçaralcdesaeutcxe

Exestm
iêearstpapnsircpniasoiporcesamenodtuemcaonsaut:l
Aasrnial
Execuatr
Bucsar

Anseáil

Duranteafasedeanálise,ainstruçãoSQLépassadadoprocessodousuário
i lana oãçatneserper m
ua e , rodivres odossecorpo arap
egm
ardcouS
m
Q
eaá[Link]
Duranteaanálise,oprocessodoservidorrealizaasseguintesfunções:
BuscaumacópaeixestinedtadecalarçãoSQLnopoocolmphlaitrdo
exatnisausodnacifiS rQevoLãçaralcedaedilav
E
cuoenlaxbsetdocualndeicsoavtpráalrs
dnçõeifes

Executar

10
ExecuatrI:denfitcarnilhaseelcoinadas
Aeastpsaesrmsegudiasoexecduaetrcalrção
Om oitziadufaoénrçãonoOarS
celevrqerudeem
trnia
m
exadincupezoadçlãtoi.

Bucsar

C [Link]
iáB
roR
es2bdlc0uapeondbsurceao:tsra,
m
.eitonautasortsiger

EtapasDeProcessamentoDML

A declaração de linguagem de manipulação de dados (DML) requer apenas duas fases de


porcnesig:
O
m
opéesarem
sudesaqnofpeiuáarlecm
asrcoantusl
Execuatrequerprocessamenotadcioinaplarafazeraetlraçõesnosdados

FaseExecutarDML

Osevrdioporcesoeargdm
stiaagemanopeitraobrlcodervesrãoe
zuaitdlobolquoeidedados.
Ambasasalteraçõessãofeitasnocachedebuferdobancodedados.

Quaqlueborlcoeatrldonocachedebueéfm
racradocomobuefsurojs:useaj,
buefqsruenãosãom sesmoqsueobsolcocsoerspondenetnsodscio.

OporcesamenodtuemcomandoDELETEouN ISERzeaT
itpluiasetmehlanets.
miaagem puoaneim
rtexauclsãconém
tvodascelrounslinhelaxsudclía,
m
iaeagem daouneirm
tN
ISERT coném tnoifam rsaçõodzelacisnçãlihdola.

Porqueasmudançasfeitasnosblocossãoregistradasapenasnamemória
euqrodm
actupedahlafm
ua,ocsidonem
atnetam
idesatircseoãsoãnesaruturtse
SdG
odm
naoucsA
pom
[Link]çbm
éraucs

11
OracleVersions

Oracle6.0 1990
Oracle7.0 1995
Oracle7.1 1996
Oracle7.2 1997
Oracle7.s3 o t e j b mo eo d a e s a B 8 9 9 1

Oracle8.0 DBG S 9 9 9 1
0 0 0 t2 e n r eOraclte8i n aI n a d a e s a ob ã ç a c i l p A
Oracle91i 0 0 o2 ã ç a c i l peArd o d i v r e S

C
B
ecarioseatn
cirtíef

Oracle

Escalabilidade Uma Gestão


Interface
9i

Internet
Reliability Habilidade Comum
Conjuntos
Desenvolvedor Único

Modelo

Feautres

AOracleofereceumainfraestruturaabrangentedealtodesempenhopara
negócC [Link]-O
earO
[Link]éeecesáopiradresenvovle,r
m
igepacnrpliçatõ[Link]

Benefits
Escaldbilaidededepatrmenotpsaeartsdieb-unsiesdegarndesmpersas
12
Arquetiutraconfáived,lsiponvíelsegura
Ummodelodedesenvolvimento,opçõesdedesenvolvimentofáceis
ConjuntosdehabildadescomunsincluindoSQLP
,L/SQLJ,AVAeXML
UmaInterfaceDeGerenciamentoParaTodasAsAplicações

9P
irodutos

Exestm
idposriduE
[Link]
pseialtpels.
. tenretni an seõçaci lpa arap

IAS Banco de dados

9i 9i

Servd
iordA
epcialção

9Aipocpiantlsevrerxecuaotdasações9diabtasm r azenanosos
dado.s
OservidordeaplicaçãoOracle9iroda
owusPaeisotebris
A caçJiT
õpvealsnroascniai
Fonregictaerçcãuaeopinçsrudõlteáisa,rdos

13
Oracle9i:ORDBMS

OracleéoprimeirobancodedadoscomcapacidadedeobjetodesenvolvidopelaOracleCorporation.
oppusot8elcaOrfosei t i l ibapacgni ledm
oatadehtsdnetxet I
-otejbozart euqm
soinam
ceovonm
uecenrof elcaO rO
coem
noegsdóexcio,psletcodm
bajdoespxos,pilt o,setobjaadompgenrtioração
. lanoicaler odnmuom oc latot edadi l ibi tam poc

Oracle9suporta

Tiposdedadoseobjetosdefinidospelousuário
Toam
tl enectompvaícteolmbancodedadoeraslcoinS
(alupoatrdapsorpeirdadeC
sODD)
)selur
Supoeam
tr m uitldíaegiarndeosbeojts
snoi taci lppadesabbw
ednarevrestnei lct roppusoslat I

Oracle9ipodeescalardezenasdemilharesdeusuáriossimultâneosesuportaraté
512paebtyest
daeU
d(osm pa=
U
1bet0aybrteys0m
ta=
e1br0ytG
0B.)

Envrionment
AOracleusadoistiposdeambientesparaexecutarnossasinstruçõesSQL.
SQL*puleS
sQL*puls.

caO
r od r i t rap a sanepa levínopsid( átse sulpQ
*L
SI

AnEnvroinment
ProprietáriodaOracle
Aspaalvras-chavepodemsearbrevaidas
Execuatremumnavegador
Caregadocentralmenten,ãoprecisaserimplementadoemcadamáquina

DiferençaentreSQL*PluseISQL*Plus
SQL*PuléusmaCUeSIQL*Pulorsdaemumnavegador
SQL*puldsevescraergadoemcadaestimaecinlent,quanot
m
elm
pi res as icerp oãn ,etnm
elar tnec odager rac , sulp*Q
LSi
máquina

14
Resumo

Oracleé[Link]/Servidor,oOraclerodanoservidor.
bdaoóndcégeolisaurtA
tesdcoadm
[Link]-dr
U
s .esabatadeht foerutcur t s laci syhpfotnednepedni
[Link]ógilaurtrtesapenas

UmaInsâtncaidoOraceléacombniaçãodeSGAeprocesoOracel.
m
e sossecorp ed oãçeloc m
aum
étnoc aicnât sni a
[Link]íoabulm
raztf

OOracleusaummecanismodebloqueioparagerenciaraconcorrê[Link]
esgouam
rtevpiteoanrlfpdeonactr,alneshdiralduaoem
nsthia,la
.anêictsoicns

Exerccíoi

a c i f i n g i s AG S
_ _ _ _ _ _ _ _ _ ) 2
quandoumbancodedadosécriado.
l a u q m E ) 3

a é l a uQ ) 4
o v i u q r a s O ) 5

ã s n e t x e A ) 6
u Q _ _ _ _ _ _ _ _ ) 7
a m u é e u q O
a é l a u Q ) 9

1O
0)quém
esevdrciaopets?rl

15
TiposDeDadosOracle

CadavaolrdecoulnaeconsatnetemumanisrtuçãoSQLetmumpitodedadoq,ue
dedailváxaiaumfeasõeçirtser o,cifím cpesram
nezaodenm
torum
ftadoaiocsaátse
uesum
deacapradaodepoium
tracifpicesdvevoêc,abaleum traiA [Link]
[Link] [Link]

CharacterDatatypes
CHARDatatype
TpiosdeDadosVARCHAR2eVARCHAR
TiposdedadosNCHAReNVARCHAR2

TipodedadoLONG
NUMBERDatatype
DATEDatatype
LOBDyatpes
TipodedadoBLOB
tiposdedadosCLOBeNCLOB
TipoBFILE

TpiosdeDadosRAWeLONGRAW

CharacterDatatypes

Opiotdsdeadodscearceatrmazenamdadodscearacef(ntrlumcéiorem
s)nirgsts.
comvaloresdebytecorrespondentesaocaractere.

TIPOchar

Dadodscearcetdrsceompm irenxoiftdatm
eanhoembO
([Link]ãro1ée
o tamanhomáximoé2000).
am
dctom
aatloR
nepstihxarm
çã[Link]àébaonrtco

VARCHAR2(tamanho)

dcnoedcasgm
irS
etstm pircoávenm
iaertlum
am
t anhm
oám
xid4oe00b0eyst
. )1 é oãrdap ohnm
aat O(
Tunrpcaesç[Link]

NVARCHAR2(tamanho)

dcnoedcasgm
irS
etstm
pircoávenm
iaertlum
am
t anhm
oám
xid4oe00b0eyst
)1 é oãrdap ohnm
aat O(

16
Oucaracteres,dependendodaescolhadoconjuntodecaracteresnacional.
.esantesm
rpaenT
sçboucrnca

NÚMERO(tamanhod
,)

ncoudúam sacoid
neilafpeP er odgtsapíiósodem
[Link]
N
xem
m
eU
sou9.,m
rpql9rueM
,m
ndaoraiB
piondãreE2R
)5,(

LONGO

Dadosdecaracetredeatmanhovaráivedleaét2GBdecomprm i enotA
.penasumacoulnaLONG
.eteuqnabm
ume odi t m
irep é oãn
Counlgansaãpsodem
uasderm
asusfbnecxçoõpaen,sõrtude,sl
.secndiouísaulsálc

DATE

d4ao3vner7dja1ãA
C
ioxseá[Link]
.sdb9oer99C
d9..
Y
)M
O
N
-D
- tm
arofetadt luafD
e(

TIMESTAMP(precsião)

Datamaishora,ondeaprecisãoéonúmerodedígitosnapartefracionária
dcaompesdgoeunpo6d.a()éãors

RAW(size)

Databrutabináriata,manhoembyteslongoO
. tamanhomáximoéde2000bytes.

LONGRAW

Dadosbináriosbrutosd,eoutraformaiguaisaLONG.

Espedisotdsdieadopsem
retm
iam
r azenm
iaragens.

CLOB

17
Obejotgrandedecaracetrec,omaét4GBdecomprm
i enot.

BLOB

Objetobináriograndea,té4GBdecomprimento.

BFILE
oem
.nibtásuriom
panscoqirdevaP
luoient

18
Q
SoLtnoitcu
dortnI

Uma Breve História do SQL

A hódastiroSQL começeamum alboaórodtirB


IaMemSanJoC seó,fainrli,
OSQLfoidesenvolvidonofinaldadé[Link]
ALinguagemdeConsulta,eapróprialinguageméfrequentementechamadade"sequel."
foioriginalmentedesenvolvidoparaoprodutoDB2daIBM(umbancodedadosrelacional
sistemadegerenciamento,ouRDBMS,queaindapode sercompradotodayparavários
aopfm
trlam easN
[Link])atedrS
adQ
e,oL
nturam
RDBMS poQ
v.síelL
ni l am
oc et sar tnocm
e ,m
ainônam
egaugni l m au é
sdaim
raocC
o3rG
f(O
oL
)oqusB
ãeC
çaO
rgeL
ariecretdensgeuail
aétaquelmomenot.

l au s s e c o r p o ãN : ATON
descrvqoeudm
ead,ernovcuxidsecrzpoeli,am
rzaeirol
.oãçarepoa

A caqirscetuírdefrinucaimSGBDduemSGBDearlcoinqéauloe
[Link],isso
SQL
queacifgniisosuntonjcadoanteO
iSQ
rL
é.osuntonjcadanteiordosadeoncbam
degnuaila
porcesosduelxfosdedadosemgurpos.

Anaocm
õsP
eidardeN
onlaoicauttitnsIo,õsepdardeõsçeazgnaioD
rusa
zi lm
arN
o ed lanoicanretnI oãçazinagO r a e) IA N
S(
pormopovasedrõrSesQ O
nL [Link]úrdA
sãtroNS9po-Ié2adãro
rom
bE .orvi l et sed ognol oa odasu Q LS o arap
copreopasm retspdigsabopenõisaresdcoaedsgoem
rudstios,
pordbsouaenstdcoeam
rdfoidspoaA dãorNem [Link]
arapaci lpaocinúoiráusuedlairasemrpeoãçaci lpm uaeaigoloncet
.orutuf otnm eicserc

AnOverveiwofSQL

SQL niéalguagempadãrousadapaarmanpiuaerlcupeardradodse
nabuo rom
dargorpm
ueuqetm
irepQ
[Link] sodaded socnab sesse
adm
adraoçfestgnr:uit

Modificar a estrutura do banco de dados


Alterarconfiguraçõesdesegurançadosistema
Adcionaprermsiõedseusuáoriembancodsedadoosuatbeals
Consultarumbancodedadosporinformações

19
Atualizaroconteúdodeumbancodedados

20
MORF E RANO I CELES

m
e sodad ed oãçarepucer arap oãçur tsnoc ed ocolbm

SniatxS
e:ELECIONE<COLUNAS>DE<TABELA>;

SuaPm
rireaiConsuatl

INPUT:
SQL>selecionar * da EMP;
OUTPUT:
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------ ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH SECRETÁRIO 7902 17-DEZ-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES GERENTE 7839 02-ABR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK GERENTE 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 09-DEC-82 3000 20
7839 REI PRESIDENTE 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 12-JAN-83 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER FUNCIONÁRIO 7782 23-JAN-82 1300 10

ANALYSIS:
Note que as colunas 6 e 8 na declaração de saída estão alinhadas à direita e que as colunas 2 e 3 estão alinhadas à esquerda.
justificado. Este formato segue a convenção de alinhamento na qual os tipos de dados numéricos são justificados à direita
e tipos de dados de caractere são justificados à esquerda.

O asterisco (*) emselecionar *diz ao banco de dados para retornar todas as colunas associadas à tabela dada
descrito noDEcláusula. O banco de dados determina a ordem em que as colunas devem ser retornadas.

Uma varredura completa da tabela é utilizada sempre que não houver uma cláusula onde em uma consulta.

21
MudandoaOrdemdasCou
lnas

Podemosmudaraordemdeseleçãodascolunas

INPUT:
SQL>SELECIONE empno, ename, sal, job, comm de EMP;

SAÍDA
EMPNO ENAME SAL JOB COMM
---------- ---------- ---------- --------- ----------
7369 SMITH 800 FUNCIONÁRIO
7499 ALLEN 1600 VENDEDOR 300
7521 WARD 1250 VENDEDOR 500
7566 JONES 2975 GERENTE
7654 MARTIN 1250 SALESMAN 1400
7698 BLAKE 2850 MANAGER
7782 CLARK 2450 MANAGER
7788 SCOTT 3000 ANALISTA
7839 KING 5000 PRESIDENT
7844 TURNER 1500 VENDEDOR 0
7876 ADAMS 1100 SECRETÁRIO
7900 JAMES 950 AUXILIAR
7902 FORD 3000 ANALYST
7934 MILLER 1300 ESCRITURÁRIO

14 linhas selecionadas.

ExpressõesC
, ondçiõeseOperadores

Expressões

A dneçifãoduemeaxpersãm oséi upem


ls:eaxpersã[Link]
Ospitosdeexpressãosãomuotiampolsa,brangendodfierenetspitosdedadosc,omo
S niN
rgt,umcéiorB eooelanN [Link],tmenqetuaqluceorsaeigunidoum
SE
(aLE
ulC
sáeFT
R
lorcntNO guieo.ãsM um éxseo)xprea,l
dxeom idoacuéenm
triqvuaoplnrtoãeqsuxarep
colunamonto.
SELECIONEsaD l EEMP;

:seõsserpxe oãsOA
Á
L
R
IS C
A
R
G
O
,N
O
M,E,oãçaralced etniuges N
a

SELECIONARNOMED
, ESIGNAÇÃOS,ALARIODEEMP;

22
Agorae,xamnieasegunietexpressão:

WHEREENAME='KING'

loB
om
u ed olm
pexem
u é euq , N
G
'K
I ' =N
E
A
M
E,oãçidnoc m
aum étnC
o
a expressã[Link] = 'KING' será verdadeira ou falsa, dependendo de
. =oãçidnoc a

Conditons

opurg uomet imu rar tnocne resiuq zevm augla êcov eS


W naHdsaiE ocnR
toEãtseõsçeocndA
is.õsçeocndim
usoudieaasiceprvoêc
EN éA K
oãN
çM
Iondc'iG
=E
a' ,orirentam xN
[Link]álc
sahor10dem
asrhailbartqueoãçazngiaoruasnaodst raroncetaP ra
month,yourconditionwouldbeSAL>2000
AscondiçõespermitemquevocêfaçaconsultasseletivasN
. oscasosmaiscomuns
levái rav maumedneerm
poc seõçidnoc sa ,m arof a
EéNávAeléxm
iN
veaoriM
[Link],
'REI', e o operador de comparação é =.

é etnatsnoc a A
,L
S é levái rav a ,olm pexe odnuges N o
senatm
eolsenetsdoim seoibasrbaresasiceprVoêc>.ocm
édoãeçapradorpe
Waul.H
ásedaolrcE
peRaeE:soniaicocndisatuolcnsvrercsepodevoêc

ACálusualWHERE

A
nsaitxdecáalusuW
al HEREé

SINTAXE:
SELECIONAR <COLUNAS> DA <TABELA> ONDE <PESQUISA>
CONDIÇÃO>;

SELECT, FROM e WHERE são as três cláusulas mais frequentemente usadas em


[Link]
A cláusula WHERE, a coisa mais útil que você poderia fazer com uma consulta é exibir

[Link])dsela()sa(belt)nsa(osrtsegriodstos

23
rat igid ai redop ,oci f ícepseM
E
G
R
A
D
P
O
mu essesiuq êcov eS

INPUT/OUTPUT:
SQL>SELECIONAR * DA EMP ONDE ENAME = 'KING';

O que renderia apenas um registro:


EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------ ---------- --------- ---------- --------- ---------- ---------- ----------
7839 REI PRESIDENTE 17-NOV-81 5000 10

ANALYSIS:
Esexempm
osil pem
lsocarostmovocpêodceolcuarmcaondçiãonodsadoqsuveocê
querorecuperar.

t igid ai redop , raluci t rapm


eM
E
G
R
A
D
P
O
mu essesiuq êcov eS

ENTRADA

SQL>SELECIONE * DE BICICLETAS ONDE ENOME != 'KING';


OU
SQL>SELECIONE * DE BICICLETAS ONDE ENAME <> 'REI';

SAÍDA
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD VENDEDOR 7698 22-FEV-81 1250 500 30
7566 JONES GERENTE 7839 02-ABR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 09-DEC-82 3000 20
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 12-JAN-83 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALISTA 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10

ANÁLISE:

Exibetodososfuncionários,excetoKING.

24
Operadores
Osoperadoressãooselementosquevocêusadentrodeumaexpressãoparaarticularcomo
u:posgrsdm
eivsidiessedaorpO
[Link]ípcesõsçeocndiqurevoêc
[Link]ócog,licom
e,rcoat,ripaérçtão,

OperadoresArtimétcios

Oospeardom teariscéiostãom m +
(as,i)c*dp(e/[Link])lrti,o)l-(s
Oqsuoarpm
tiroersãioauotexcvpiaM
olts.óduoerltnrnoeardistuem
dvsãoi.

ComparisonOperators

com
dneoam
recuodsptm
açãeordaei,ampdF rõelsxipr
Tu:R esvhalronU teofF
E
A
,LSU
oE
r,nknown.

SELECIONE * DE EMP ONDE SAL >= 2000;

SELECIONE * DA EMP ONDE SAL >= 3000 E SAL <= 4000;

SELECIONE * DO EMP ONDE SAL ENTRE 3000 E 4000;

SELECIONE * DA EMP ONDE SAL NÃO ESTÁ ENTRE 3000 E 4000;

um
poucrbeasasiceprvêocum
do,D
oinchesrobtpodemcvêoconrdenteaP ra
N
doceontsUbceirLE O m [Link] ,sL daudeêaO
snocsié
inafield. Não significa que uma coluna tenha um zero ou um espaço em branco nela. Um zero ou um
banlvksuaN [Link] asinufieãhonáadnaecsampS [Link]
ircfê
C N
om
aéaU praooL orOvla,ocúniocm eoãçC
a9pram
=kepoiLl
um éD doP
qcuneohsirD [Link]áhsieratocm vloãçapra
condciaoniconfoartvm e,l aoiarisaboresdeSQLmudamDesconhecdioParaFALSO
ofnercuem opeardÉeNospr,eacliULuO am
eprstar,caondçãiN
oULO.

AquiestáumexemplodeNULL:SuponhaqueumaentradanatabelaPREÇOnão
ocmrecpraodm
esaA
tum
T
A
oucnladsepraC
dosm
éoutA
crm
nuvlaseD
rO
O
s.
:etse

25
SELECIONE * DA EMP ONDE COMM É NULO;

SELECIONE * DO EMP ONDE COMM NÃO É NULO;

OperadoresdeCaracteres

oãseretcaracdengsirm
otrscfm
asom rapuralnieretcaracdesedaoprerauVpsodeêc
oãçacolocedossecorponotnauqsodadedadías anotnat ,odatneserper
coednmscorçadõbsiecorustçdE
ãpoaeídcvsratuceoa.s
oanm
esrctonotceique,| |L oK
adpIoereEoa:dpesor
cdoencnateç.csdãarote

operadoL
rIKE
E se você quisesse selecionar partes de um banco de dados que se encaixam em um padrão, mas
nãoeramcorespondênciasexatas?Vocêpoderiausarosinaldeigualepassarpor
dem
aiE
ersm
opacrdsem
os,.dv,iasevzpeiocíasodstos
L
K IE [Link]êc

Considereoseguinte:

INPUT:
SELECIONE * DE EMP ONDE ENAME LIKE 'A%';

ANÁLISE

Exibe todos os funcionários cujos nomes começam com a letra A

INPUT:
SELECIONE * DA EMP ONDE ENAME NÃO SE ASSEMELHA A 'A%';

ANÁLISE

Exibe todos os funcionários cujos nomes não começam com a letra A

26
INPUT:
SELECIONAR * DO EMP ONDE ENAME LIKE '%A%';

ANÁLISE

Exibe todos os funcionários cujos nomes contêm a letra A (Qualquer


número de A's)

INPUT:
SELECIONE * DE EMP ONDE ENAME LIKE '%A%A%';

ANÁLISE
Exibe todos os nomes cujo nome contenha a letra A mais de uma vez
time

INPUT:
SELECIONE * DO EMP ONDE DATA_DE_ADMISSÃO LIKE '%DEZ%';

ANÁLISE

Exibe todos os funcionários que se juntaram no mês de dezembro.

INPUT:
SELECT * FROM EMP WHERE HIREDATE LIKE ‘%81’;

ANALYSIS

Exibe todos os colaboradores que ingressaram no ano 81.

INPUT:
SELECIONAR * DE EMP ONDE SAL LIKE '4%';

ANÁLISE

Exibe todos os funcionários cujo salário começa com o número 4.


(A conversão de dados implícita ocorre).

27
Subn
ilhado(_)

Osunbihladoécarcetrunirgdauemúnciocarcetr.

INPUT:
SQL>SELECIONE EMPNO,ENAME DE EMP ONDE ENAME SEMELHANTE A
_A%
SAÍDA:
EMPNO ENAME
---------- ----------
7521 ENFERMEIRA
7654 MARTIN
7900 JAMES

ANÁLISE
Displays all the employees whose second letter is A

INPUT:
SQL>SELECT * FROM EMP WHERE ENAME LIKE '__A%';
SAÍDA:
ENAME
----------
BLAKE
CLARK
ADAMS

ANALYSIS
Mostra todos os funcionários cuja terceira letra é A
__A

INPUT:
SQL>SELECT * FROM EMP WHERE ENAME LIKE 'A%\_%'
ESCAPAR '\';
OUTPUT:
ENAME
----------
AVINASH_K
ANAND_VARDAN
ADAMS_P

ANÁLISE
Exibe todos os funcionários com underscore (_). '\' Caractere de escape
O sublinhado é usado para identificar uma posição na string. Para tratar _ como um
caractere temos que usar o caractere de Escape (\)
28
Operadordeconcatenação)(|

Usadoparacombinarduasstringsdadas

ENTRADA
SELECIONE ENAME || JOB DO EMP;

SAÍDA
ENAME||JOB
-------------------
SMITHCLERK
VENDEDOR ALLEN
VENDEDOR DE DEPTO
JONESMANAGER
MARTIN VENDEDOR
BLAKEMANAGER
CLARKMANAGER
ANALISTA SCOTT
REI PRESIDENTE
VENDENDOR TURNER
ADAMSCLERK
JAMESCLERK
FORDANALYST
MILLERCLERK

ANALYSIS
Combina tanto o nome quanto a designação em uma única string.

ENTRADA
SQL>SELECIONE ENAME || ' , ' || JOB DA EMP;

SAÍDA
NOME||','||CARGO
----------------------
SMITH, SECRETÁRIO
ALLEN, VENDEDOR
WARD, VENDEDOR
JONES, GERENTE
MARTIN, VENDEDOR
BLAKE, GERENTE
CLARK, GERENTE
SCOTT, ANALISTA
REI, PRESIDENTE
TURNER, VENDEDOR
ADAMS, SECRETÁRIO
JAMES, SECRETÁRIO
FORD, ANALISTA
MILLER , SECRETÁRIO

ANÁLISE
Combina tanto o nome quanto a designação em uma única string separada por,
29
LogcaO
ilperaotrs

INPUT:
SELECIONE ENAME DE EMP ONDE ENAME LIKE '%A%' e
ENAME NÃO LIKE '%A%A%'
SAÍDA
ENAME
----------
ALLEN
DISTRITO
MARTIM
BLAKE
CLARK
JAMES

ANÁLISE
Exibe todos os funcionários cujos nomes contêm a letra A exatamente uma vez.
tempo.

SELECIONE * DO EMP ONDE SAL >= 3000 E SAL <= 4000;

SELECIONE * DA EMP ONDE SAL ENTRE 3000 E 4000;

SELECIONE * DE EMP ONDE SAL NÃO ESTÁ ENTRE 3000 E


4000

30
OperadoresDiversos: EM, ENTRE e DISTINTO

OdsospieardoN
eIrsB
eETWEENoefrcemumofam
r abervaidpaaufrnçõeqsuveocê
e:gsnuotiartgV
dicpoam
cê[Link]áoj

INPUT:
SQL>SELECT ENAME, JOB FROM EMP WHERE JOB= 'CLERK'
ORJOB=‘MANAGER’ ORJOB= 'SALESMAN';
OUTPUT:
ENAME JOB
---------- ---------
SMITH SECRETÁRIO
ALLEN VENDEDOR
WARD SALESMAN
JONES GERENTE
MARTIN SALESMAN
BLAKE GERENTE
CLARK MANAGER
TURNER VENDEDOR
ADAMS ESCRITURÁRIO
JAMES SECRETÁRIO
MILLER SECRETÁRIO
ANÁLISE
Exibir funcionários com as designações de gerente, escrevente e vendedor.

A
decalrçãoacm
INPUT: ielvam
aetm
asipopasernsaidoqlau,erduoz
SQL>SELECIONE
.aincêicife * DO EMP ONDE TRABALHO
IN('ATENDENTE','VENDEDOR','GERENTE');
OUTPUT:
ENAME JOB
---------- ---------
SMITH FUNCIONÁRIO
ALLEN VENDEDOR
WARD SALESMAN
JONES GERENTE
MARTIN VENDEDOR
BLAKE GERENTE
CLARK GERENTE
TURNER VENDEDOR
ADAMS FUNCIONÁRIO
JAMES ESCRIVÃO
MILLER SECRETÁRIO 31
ANÁLISE
Exibir funcionários com designações de gerente, escriturário e vendedor.
INPUT:
SQL>SELECT ENAME,JOB FROM EMP
ONDE O CARGO NÃO ESTÁ EM ('ESCRITURÁRIO', 'VENDEDOR', 'GERENTE');
OUTPUT:
ENAME JOB
---------- ---------
SCOTT ANALISTA
KING PRESIDENT
ANALISTA FORD

ANÁLISE
Exibir designações além de gerente, balconista e vendedor

INPUT:
SQL>SELECIONE NOME, DATA_DE_ADMISSAO

DE EMP
ONDE A DATA_DE_ADMISSAO EM (’01-MAI-1981’,’09-DEC-1982’);

OUTPUT:
ENAME HIREDATE
---------- ---------
BLAKE 01-MAI-81
SCOTT 09-DEZ-82

ANÁLISE
Display employees who joined on two different dates.
INPUT:
OPERADORDISTINTO DISTINTOS TRABALHOS DO EMP;
SQL>SELECIONAR

OUTPUT:
JOB
---------
ANALISTA
ESCRITURÁRIO
GERENTE
PRESIDENTE
VENDEDOR
32
ANÁLISE
O operador distinto exibe designações únicas.
O operador DISTINCT exibe por padrão as informações em ordem crescente.
33
ORDERBYCLAUSE

Exibaasinformaçõesemumaordemespecífica(Ascendenteoudescendente)
dpoei

Sintaxe

SELECIONE <COLUNAS> DE <TABELA> ONDE <CONDIÇÃO>


ORDER BY <COLUNA(S)>;

ENTRADA
SQL>SELECIONAR ENOME DO EMP ORDENAR POR ENOME;
SAÍDA
ENAME
----------
ADAMS
ALLEN
BLAKE
CLARK
FORD
JAMES
JONES
REI
MARTIN
MILLER
SCOTT
SMITH
TURNER
DEPENDÊNCIA

ANÁLISE
Exibir funcionários em ordem crescente de nomes.

34
ENTRADA
SQL>SELECIONE CARGO, NOME, SALÁRIO DE EMP ORDENAR POR
JOB,ENAME;
SAÍDA
JOB ENAME SAL
--------- ---------- ----------
ANALISTA FORD 3000
ANALYST SCOTT 3000
SECRETÁRIO ADAMS 1100
CLERK JAMES 950
CLERK MILLER 1300
CLERK SMITH 800
MANAGER BLAKE 2850
MANAGER CLARK 2450
GERENTE JONES 2975
PRESIDENTE REI 5000
SALESMAN ALLEN 1600
SALESMAN MARTIN 1250
VENDEDOR TURNER 1500
VENDEDOR WARD 1250

ANÁLISE
Exibir os funcionários em ordem crescente de cargos. Com cada cargo, coloca-se o

INPUT

SQL>SELECIONAR * DO EMP ORDENAR POR cargo, nome desc;

OUTPUT:
Display employees in ascending order by jobs. With each job it places the
informação em ordem decrescente de nomes.

INPUT

SQL>SELECIONE * DO EMP ORDENAR POR cargo desc, enome desc;

OUTPUT:
Exibir funcionários em ordem decrescente por cargos. Com cada cargo, ele coloca
a informação em ordem decrescente de nomes.

35
ENTRADA

SQL>SELECIONE *
DE EMP onde JOB != 'CLERK'
ORDENAR POR TRABALHO;

OUTPUT:
Exibir funcionários em ordem ascendente de cargos, excluindo os funcionários administrativos.

ANÁLISE

Quando estamos executando a consulta, ela é dividida em duas partes diferentes.

1)SELECT *
DA EMP onde JOB != 'CLERK'
2)ORDER BY TRABALHO;

A primeira parte será executada primeiro e seleciona todos os funcionários cujos


a designação é diferente de escriturário e os coloca em uma tabela temporária.

Na tabela temporária, a cláusula order by é aplicada, colocando as informações


em ordem crescente por trabalhos na página de sombra, de onde o usuário final pode
capaz de ver a saída.

PodemosusaracláusulaORDERBYcomo

ENTRADA

SQL> SELECIONAR * DO EMP ORDER BY 3;

ANÁLISE

Coloca as informações na ordem da terceira coluna na tabela.

36
Exercício
_ _ _ _ _ _ _ _ _ . 1
_ _ _ _ _ _ _ . 2
o r e m ú n O . 3
a h n o p u S . 4
AsumaqueovaolcroolcadoemambasascoulnaséRAVI.
Qual é o tamanho de sname e sname1
s a t n a u Q . 5
n amo c s O . 6
l y a l p s i D . 7
[Link]áriosemordemascendentedacoluna5natabela ht

37
FUNÇÕES

Uma função é um subprograma, que é executado sempre que o chamamos e retorna


avaliar o lugar de chamada.

Esuafsnçõesãcoaiflsdiaesm
pdiotsi

Funçõpeédnrs-eiafs
FunçõesDefinidasPeloUsuário

Funçõep
sredenifdias

Esuafsnçõesãonovamecnaeiflstdiaesm
pdiotsi

FunçõesDeAgrupamentoOuAgregação
FunçõesDeUmaSóLniha

FunçõesAgregadas

Esuafsnçõaetm sbémsãochamadadsufençõedsgeurpE
[Link]
em
coum
[Link]

CONTA

A
ufnçãoCOUNT
eortnroanúmenordihleaqsusafeiztmcaondçião
W
.E
R
H
Ealusuálc an

Dgiaquevocêqueasirbeqruanotufsncoináoirhsá.

INPUT:
SQL>SELECIONE CONTAGEM(*) DE EMP;

OUTPUT:

CONTAR(*)
--------
14

ANÁLISE
Conta se a linha estiver presente na tabela

38
:saium
laenett ,vlegeílm
sgoócdiaonraortaPra

INPUT/OUTPUT:
SQL>SELECIONE CONTAGEM(*) NUM_DE_FUNCIONARIOS DE EMP;

NUM_OF_EMP
-------------------
14

INPUT/OUTPUT:
SQL>SELECIONE CONTAR(COMM)
DE EMP;

CONTAR(*)
--------
4

ANALYSIS

Conta apenas aqueles quando há um valor na coluna de comm.


Nota: Contar (*) mais rápido do que contar(comm)
Count(*) conta a linha quando uma linha está presente na tabela onde
Count(comm) conta a linha apenas quando há um valor na coluna.

INPUT/OUTPUT:
SQL>SELECIONE CONTAGEM(*) DE EMP ONDE TRABALHO =
GERENTE

CONTAR(*)
-------
4

ANÁLISE
It counts only managers

39
INPUT/OUTPUT:
SQL>SELECIONE a contagem (distinta trabalho) DA EMP;
CONTA (*)
-------
4

ANÁLISE
Conta apenas empregos distintos

SOMA
A função SUM faz exatamente isso. Ela retorna a soma de todos os valores em uma

[Link]

INPUT:
SQL>SELECIONE A SOMA(SAL) SALÁRIO_TOTAL DA EMP;
OUTPUT:
TOTAL_SALARY
-------------
29025
ANÁLISE
Encontre o salário total recebido por todos os funcionários

INPUT/OUTPUT:
SQL>SELECIONAR SOMA(SAL) SALÁRIO_TOTAL, SOMA(COMM)
TOTAL_COMM,
DA EMP;
TOTAL_SALARY TOTAL_COMM
------------- ----------
29025 2200

INPUT/OUTPUT:
SQL> SQL>SELECIONAR SOMA(SAL) SALÁRIO_TOTAL,
SOMA(COMM) TOTAL_COMM,
DE EMP ONDE CARGO = 'VENDEDOR';
TOTAL_SALARY TOTAL_COMM
------------- ----------
5600 2200

40
MÉDIA

A função AVG calcula a média de uma coluna.


INPUT:
SQL>SELECIONAR AVG(sal) salário_médio
2DE EMP;
SAÍDA:
AVERAGE_SALARY
---------------
2073,21429

ANALYSIS
Find the average salary of all the employees

INPUT:
SQL>SELECIONE AVG(COMM) media_comm DE EMP;
OUTPUT:

AVERAGE_COMM
------------
550

ANÁLISE
As funções ignoram linhas nulas

41
MÁX

INPUT:
SQL>SELECIONAR MÁX(SAL) DE EMP;
SAÍDA:

MÁX(SAL)
--------
5000
ANÁLISE
Toma o valor de diferentes linhas de uma coluna específica

INPUT:
SQL>SELECIONAR MÁX(ENAME) DE EMP;
OUTPUT:

MÁX(ENAME)
--------
ALA

ANALYSIS
O máximo do nome é identificado com base no valor ASCII

INPUT:
SQL>SELECIONE O MÁXIMO (data de contratação) DA EMP;

OUTPUT:

MÁXIMA(DATADEADMISSÃO)
-------------
12-JAN-83

42
MIN

INPUT:
SQL>SELECIONAR MÍNIMO(SAL) DA EMP;
OUTPUT:

MIN(SAL)
--------
800

INPUT:
SQL>SELECIONE MIN(ENAME) DE EMP;
OUTPUT:

MIN (ENAME)
--------
ADAMS

ENTRADA

SELECIONAR SOMA(SAL), MÉDIA(SAL), MÍNIMO(SAL), MÁXIMO(SAL), CONTAGEM(*) DE


EMP;

SAÍDA
SUM(SAL)AVG(SAL) MIN(SAL) MAX(SAL) COUNT(*)
-------------- --------------- -------------- -------------- -------------
29025 2073,21429 800 5000 14

ANÁLISE
Todas as funções de agregação podem ser usadas juntas em uma única instrução SQL

43
SINGLEROWFUNCTIONS

Esuafsnçõuefsncoinamemcandihlaeortnramumvaoplrao
hcm
[Link]

Esuafsnçõesãcoaiflsdiaesmdefprinoets

FunçõesAm
tri écitas
FunçõesDeCaracteres
FunçõesdeData
FunçõesDiversas

FunçõesArtimétcias

Muitos de nós que você tem para os dados que você recupera envolvem matemática.
A maioria das implementações de SQL fornece funções aritméticas semelhantes às de
[Link]

ABS

AufnçãA
oBSeortnroavaolbrsouoldtonúmeorquveonciêdcia.r
exPm
orop:l

INPUT:
SQL>SELECIONAR ABS(-10) VALOR_ABSOLUTO DE dual;

SAÍDA
ABSOLUTE_VALUE
----------------------------
10
ANALYSIS

ABSaltera todos os números negativos para positivos e mantém os números positivos


sozinho.

Dual é uma tabela de sistema ou tabela dummy de onde podemos exibir o sistema
informação (ou seja, data do sistema e nome de usuário, etc.) ou podemos criar o nosso próprio
cálculos.

44
CEILandFLOOR

CEIL retorna o menor inteiro maior ou igual ao seu argumento.


FLOOR faz exatamente o oposto, retornando o maior inteiro igual ou menor que
.otm
nuegraoeuqod

INPUT:
SQL>SELECIONE CEIL(12.145) DO DUAL;
OUTPUT:
CEIL(12.145)
-----------------
13

INPUT:
SQL>SELECIONE CEIL(12.000) DE DUAL;
OUTPUT:
CEIL(12.000)
-----------------
12
ANÁLISE
Mínimo precisamos de uma casa decimal, para obter o próximo número inteiro maior.

INPUT/OUTPUT:
SQL>SELECIONE ANDAR(12.678) ANDAR DUAL;

OUTPUT:

PISO(12,678)
-----------------
12

INPUT:
SQL>SELECIONAR ANDAR(12.000) DO DUAL;
OUTPUT:
PISO(12.000)
-----------------
12

45
MOD
or tuo rop rolavm
u sm
oidivid odnauq otser o anrotR
e

ENTRADA

SQL>SELECIONE MOD(5,2) DO DUAL;


OUTPUT:
MOD(5,2)
---------------
1

ENTRADA

SQL>SELECIONE MOD(2,5) DE DUAL;


OUTPUT:
MOD(2,5)
---------------
2
ANALYSIS
Quando o valor do numerador é menor que o denominador, ele retorna
valor do numerador como resto.

PODER
PO oueãnçW
sfaN
,aE
tseR
incê.potaroutum
anúm
orvaeleaP
ra
:odnuges odaicnêtopàodavele éotm
nuegraorm ieirpo

INPUT:
SQL>SELECIONE POTÊNCIA(5,3) DO DUAL;

OUTPUT:
125

46
FunçõesDeCaractere

Muitas implementações de SQL fornecem funções para manipular caracteres


ceadacesirecs.t

CHR

CHR retorna o equivalente de caractere do número que usa como um


doesdrnoeapcrtednournejtgqelaurm
oeO
ractroen.t
beaxnedcP
m
[Link]áae,nudliA
tsfropasrSC
.I

INPUT:
SQL>SELECIONE CHR(65) DO DUAL;

OUTPUT:
A

MINÚSCULASEMAIÚSCULAS

ComovocêpodespeL
ra,rOWERratnsformaotdososcaracetresemmniúscuals;
MAIÚSCULAS FAZ APENAS AS MUDANÇAS TODAS AS LETRAS PARA MAIÚSCULAS.

SQL>SELECIONE ENAME, MAIÚSCULA(ENAME) MAIÚSCULA, MINÚSCULA(ENAME)


lower_case de emp;
ENAME UPPER_CASE LOWER_CASE
---------- ---------- ----------
SMITH SMITH smith
ALLEN ALLEN allen
ASILO ASILO asilo
JONES JONES jones
MARTIN MARTIN martin
BLAKE BLAKE blake
CLARK CLARK clark
SCOTT SCOTT scott
REI REI rei
TURNER TURNER turner
ADAMS ADAMS adams
JAMES JAMES james
FORD FORD ford
MILLER MILLER miller

47
LPAD
R
ePAD

LPAD e RPAD exigem um mínimo de dois e um máximo de três


[Link] Oatursoipm
[Link]éoent
onlaopicoriecretoe,razonipdarapraseretcaracndúem oreégeundso
ogaurmoqeácnpouértam edcsriogO
aurm
[Link]éutm noarhnetadrlofa
pvoauzdi,sm
erúncoiaercutm ndigcraestrca.

A
decalrçãosegunaeidtcoincnaicocarcedtrsperenchm
i eanosut,mnidoquoecampo
O SOBRENOME é definido como um campo de 15 caracteres:

INPUT:
SQL>SELECIONE LPAD(ENAME,15,'*') DE EMP;
OUTPUT:
LPAD(ENAME,15,'
---------------
**********SMITH
**********ALLEN
***********CÂMARA
**********JONES
*********MARTIN
**********BLAKE
**********CLARK
**********SCOTT
***********REI
*********TURNER
**********ADAMS
**********JAMES
***********FORD
*********MILLER
ANALYSIS:
15 locais alocados para exibir ename, dos quais, nome está ocupando alguns
espaço e no espaço restante à esquerda do nome, preenchido com *.

ENTRADA

SQL>SELECIONE RPAD(5000,10,'*') DE DUAL;

OUTPUT:

5000******

48
SUBSTITUIR

[Link] três argumentos, o primeiro é a string a ser


onlaopicoãçuitiutbsam éiotO ú[Link]égeO [Link]
odaicnêrrocN
adU
cuoL
O
od,im
otirofom ugtnreaoriecretoS [Link]
pordauítiutbsénoãdeaqdauniocsegqpruadevsirtdqasouchrvape
[Link]

SYNTAX :

SUBSTITUIR(STRING,STRING_DE_BUSCA,STRING_DE_SUBSTITUICAO)

INPUT:

SQL> SELECIONE SUBSTITUIR ('RAMANA','MA', 'VI') DE DUAL;

SAÍDA

RAVINA

ENTRADA
SQL> SELECIONAR SUBSTITUIR(‘RAMANA’,’MA’) DE DUAL;

SAÍDA

RANA
ANÁLISE
Quando a string de substituição estiver ausente, a string de pesquisa será removida do dado
cadeia

ENTRADA
SQL> SELECT REPLACE ('RAMANA','MA', NULL) FROM DUAL;

SAÍDA

RANA

49
TRANSLATAR

A
ufnçãoTRANSLATE
êargstcauetimneirgnsdatodes:neoist,
DAstring,[Link]
O
Tehtni tm
nelegnidnopserrocehtotdetalsnarteragnirR
F
OM
ethst
.aiedac

INPUT:
RACANA
OUTPUT:
RDCDND

ANALYSIS

Notice that the function is case sensitive.


Quando a string de busca combina, ela substitui pela string de substituição correspondente e se qualquer
um caractere está correspondendo na string de pesquisa, ele é substituído pelo correspondente
character.

SUBSTR
Eufastnçãodêargsteumenoptsem
rqetuiveouerceim
rêtpedaçoduemavlo
oéom
[Link]égnirtsarm ierpA
gouarm
ceoiroO
éentkcoesdrnaoer.çãim
pdacotisrpei
nú[Link]

SINTAXE

SUBSTR(STRING, POSIÇÃO_INICIAL [, NÚMERO_DE_CARACTERES])

INPUT:
SQL>SELECIONE SUBSTR('RAMANA',1,3) DE DUAL;

SAÍDA:
RAM

ANÁLISE
Ele pega os primeiros 3 caracteres do primeiro caractere

50
INPUT:
SQL>SELECIONE SUBSTR(‘RAMANA’,3,3) DE DUAL;
OUTPUT:
HOMEM

ANÁLISE
Ele pega 3 caracteres a partir da terceira posição

INPUT:
SQL>SELECIONE SUBSTR(‘RAMANA’,-2,2) DA DUAL;
OUTPUT:
NA

ANÁLISE
Você usa um número negativo como o segundo argumento, o ponto de partida é
determinado contando para trás a partir do final.

INPUT:
SQL>SELECIONE SUBSTR('RAMANA',1,2) || SUBSTR('RAMANA',-
2,2) DE DUAL;
OUTPUT:
RANA

ANÁLISE
Os dois primeiros caracteres e os dois últimos caracteres são combinados como um
string única

INPUT:
SQL>SELECIONAR SUBSTR('RAMANA',3) DE DUAL;
OUTPUT:
MANA

ANÁLISE
Quando o terceiro argumento está ausente, ele pega todos os caracteres do início
posição

51
INPUT:
SQL>SELECIONE * DE EMP ONDE SUBSTR(HIREDATE,4,3) =
SUBSTR(SYSDATE,4,3);

SAÍDA:

ANALYSIS
Exibe todos os funcionários que ingressaram no mês atual
SYSDATE é uma função de linha única, que fornece a data atual.

INPUT:
SQL>SELECIONE SUBSTR(‘RAMANA’,1,2) || SUBSTR(‘RAMANA’,-
2,2) DE DUAL;
OUTPUT:

ANÁLISE
Os dois primeiros caracteres e os dois últimos caracteres são combinados como um
string única

INSTR

om
riN
eprIS
ueTuR
s.,erorcocifícpesoãum
dprangirm
etum
sondeariobcrsdeaP ra
O
[Link]
poaãdoiernétoent
O ectroeqsiuoastãronúmeorqsuerpersenatmondceomeçoahlerar
whichmatchtoreport.

Eesxtempoerltnruamnúmeorpersenatndopam
iroaericoêrndcaiO
e
m
odnucgeaçsoe

ENTRADA

SQL> SELECIONAR INSTR(‘RAMANA’,’A’) DO DUAL;

OUTPUT
2
ANÁLISE

Encontre a posição da primeira ocorrência da letra A

52
ENTRADA

SQL> SELECT INSTR(‘RAMANA’,’A’,1,2) FROM DUAL;

SAÍDA
4
ANÁLISE

Encontre a posição da segunda ocorrência da letra A a partir do início


da string.
O terceiro argumento representa a partir de qual posição, o quarto argumento representa,
qual ocorrência.

SQL> SELECIONAR INSTR ('RAMANA','a') DA DUAL;

SAÍDA
0
ANÁLISE

A função é sensível a maiúsculas e minúsculas; ela retorna 0 (zero) quando o caráter dado é
não encontrado.

ENTRADA

SQL> SELECT INSTR('RAMANA','A',3,2) FROM DUAL;

OUTPUT
6
ANÁLISE

Encontre a posição da segunda ocorrência da letra A a partir de 3rd


posição da string

53
FunçõesDeConversão

Esuafsnçõoefsnrecemummaanpacerdáitceonvuetrm
piotddeadopar
m
pnm
arcpislãnom
rE
eúfiuom
[Link]
. sotm
arof

TO_CHAR

OusopnircpdiT
aelO_CHARcéonvuetrmnúmeormumcarcetr.
Implementaçõesdiferentestambémpodemusá-loparaconverteroutrostiposdedados,como
Data,emumcaráter,ouparaincluirdiferentesargumentosdeformatação.

OseguneixtemuoaplrsitlopnircpdiaoT
lO_CHAR:
INPUT:

SQL>SELECIONE SAL, TO_CHAR(SAL) DE EMP;

OUTPUT:

SAL TO_CHAR(SAL)
---------- ----------------------------------------
800 800
1600 1600
1250 1250
2975 2975
1250 1250
2850 2850
2450 2450
3000 3000
5000 5000
1500 1500
1100 1100
950 950
3000 3000
1300 1300

ANÁLISE

Após a conversão, as informações convertidas são alinhadas à esquerda. Portanto, podemos dizer que
é uma string.

54
Opnircpuiasolduefastnçãom
éudoafrsmaodtsdenatúmeor
sotm
arof

INPUT:

SQL>SELECIONE SYSDATE,TO_CHAR(SYSDATE,'DD/MM/YYYY')
DE DUAL;

OUTPUT:
DATA DO SISTEMA
TO_CHAR(SYSDATE,'DD/MM/YYYY')
--------- ------------------------------
24-MAR-07 24/03/2007

ANÁLISE

Converta o formato de data padrão para o formato DD/MM/AAAA

INPUT:

SQL>SELECIONE SYSDATE,TO_CHAR(SYSDATE,'DD-MON-YY') DE
DUAL;

SAÍDA:
DATA_SISTEMA
TO_CHAR(SYSDATE,'DD-MON-YY')
--------- ------------------------------
24-MAR-07 24-MAR-07

INPUT:

SQL>SELECIONE SYSDATE,TO_CHAR(SYSDATE,'DY-MON-YY') DE
DUAL;

OUTPUT:
DATA DO SISTEMA
TO_CHAR(SYSDATE,'DY-MON-YY')
--------- ------------------------------
24-MAR-07 SÁB-MAR-07

ANALYSIS:
DY exibe as 3 primeiras letras do nome do dia

55
ENTRADA:

SQL>SELECIONE SYSDATE,TO_CHAR(SYSDATE,'DIA MÊS ANO')


DE DUAL;

OUTPUT:
DATA DO SISTEMA
TO_CHAR(SYSDATE,'DIA MÊS ANO')
--------- ------------------------------
24-MAR-07 SÁBADO, DOIS DE MARÇO DE DOIS MIL E SETE

ANALYSIS:
DIA dá o nome total do dia
MONTH dá o nome total do mês
YEAR escreve o número do ano por extenso

INPUT:

SQL>SELECIONE SYSDATE, TO_CHAR(SYSDATE, 'DDSPTH MÊS


ANO') DA DUAL;

OUTPUT:
DATAATUAL TO_CHAR(DATAATUAL,'DDSPTHMÊSANO')
--------- -------------------------------------------------------------------
24-MAR-07 VINTAVO DE MARÇO DOIS MIL E SETE

ANÁLISE:
DD dá o número do dia
DDSP Writes day number in words
TH é o formato. Depende do número, dá ST / RD / ST / ND
format

56
INPUT:

SQL> SELECIONE DATA_DE_CONTRATAÇÃO,TO_CHAR(DATA_DE_CONTRATAÇÃO,'DDSPTH MÊS ANO')


DA EMP;

OUTPUT:
DATA DE CONTRATAÇÃO TO_CHAR(DATA DE CONTRATAÇÃO,'DDSPTHMONTHYEAR')

--------- -------------------------------------------------------------------
17-DEZ-80 DEZESSETE DE DEZEMBRO DE MIL NOVECENTOS E OITENTA
20-FEV-81 VIGÉSIMO FEVEREIRO DE MIL NOVECENTOS E OITENTA E UM
22-FEV-81 VIGÉSIMO SEGUNDO DE FEVEREIRO DE MIL NOVECENTOS E OITENTA E UM
02-ABR-81 SEGUNDO DE ABRIL DE MIL NOVECENTOS E OITENTA E UM
28-SET-81 VINTAGE DE OITO DE NOVENTA E UM
01-MAI-81 PRIMEIRO DE MAIO MIL NOVECENTOS E OITENTA E UM
09-JUN-81 NONO DE JUNHO MIL NOVECENTOS E OITENTA E UM
09-DEZ-82 NONO DEZEMBRO DEZENOVE OITENTA E DOIS
17-NOV-81 DEZESSETE DE NOVEMBRO DE MIL NOVECENTOS E OITENTA E UM
08-SET-81 OITAVO SETEMBRO DE MIL NOVECENTOS E OITENTA E UM
12-JAN-83 DOZE DE JANEIRO DE MIL NOVECENTOS E OITENTA E TRÊS
03-DEL-81 TERCEIRO DEZEMBRO DEZENOVE OITENTA E UM
03-DEZ-81 TERCEIRO DEZEMBRO MIL NOVECENTOS E OITENTA E UM
23-JAN-82 VINTI E TRÊS DE JANEIRO DE MIL NOVECENTOS E OITENTA E DOIS

ANÁLISE:
Converts all hire dates in EMP table into Words

57
INPUT:

SQL>SELECIONAR TO_CHAR(SYSDATE,'HH:MI:SS AM') DE DUAL;

OUTPUT:
TO_CHAR(SYS
-----------
08:40:17 PM

ANALYSIS:

HH retorna Horas }
MI retorna Minutos } Retorna o tempo da data atual
SS returns Seconds }
AM retorna AM / PM depende do horário

INPUT:

SQL>SELECIONE TO_CHAR(SYSDATE,'HH24:MI:SS') DE DUAL;

OUTPUT:
TO_CHAR(
--------
20:43:12
ANALYSIS:

} horas
HH24 retorna Horas no formato de 24
MI retorna Minutos } Retorna o tempo a partir da data atual
SS retorna Segundos }

INPUT:

SQL>SELECIONAR TO_CHAR(12567,'99.999,99') DA DUAL;

OUTPUT:
TO_CHAR(12567,'99,999,99')
-----------------------------
12.567,00
58
ANALYSIS:

Converte o número dado para o formato com vírgula e duas casas decimais
INPUT:

SQL>SELECIONAR TO_CHAR(12567,'L99.999,99') DA DUAL;

OUTPUT:
TO_CHAR(12567,'L99.999,99')
-----------------------------
$12,567.00

ANALYSIS:

Exibir o símbolo da moeda local

INPUT:

SQL>SELECIONAR TO_CHAR(-12567,'L99.999,99PR') DA DUAL;

OUTPUT:
TO_CHAR(-12567,'L99.999,99PR')
-----------------------------------
<$12,567.00>

ANALYSIS:

PR Parêntese número negativo

59
FunçõesDeDataeHora
Vivemosemumacivilizaçãogovernadaportempoedatas,eamaioriadasprincipais
rap seõçnuf m
êt Q
LS ed seõçatnm
eelm
pi

ad e om
pet ed seõçnuf sa ar tsnm
oed elE

ADD_MONTHS
Eufastnçãoadcoinuamnúmeordm
eesueasmdaeastpceiacfdia.

um
parecm
aaiqufpom
eisaduncítepdocequainrtxsPgm
eaidocrlop,l
poeídrdom [Link]
aoetanrtduaitrdedoepoótsi

INPUT:
SQL>SELECIONAR ADD_MONTHS (SYSDATE, 6) DATA_DE_VENCIMENTO
DE DUAL;
OUTPUT:

MATURITY_DATE
--------------------
24-SEP-07

ANÁLISE
Adiciona 6 meses à data do sistema

INPUT:
SQL>SELECIONAR DATA_DE_ADMISSAO, ADICIONAR_MÊS(DATA_DE_ADMISSAO,33*12)

RETIRE_DATE FROM EMP;


SAÍDA:
HIREDATE RETIRE_DATE
--------- ---------------
17-DEC-80 17-DEC-13
20-FEB-81 20-FEB-14
22-FEB-81 22-FEB-14
02-ABR-81 02-ABR-14
28-SET-81 28-SET-14
01-MAI-81 01-MAI-14
09-JUN-81 09-JUN-14
09-DEC-82 09-DEC-15
17-NOV-81 17-NOV-14
08-SET-81 08-SET-14
12-JAN-83 12-JAN-16
03-DEC-81 03-DEC-14
03-DEC-81 03-DEC-14
23-JAN-82 23-JAN-15
60
ANÁLISE
Encontre a data de aposentadoria de um funcionário
Assume, 33 years of service from date of join is retirement date
INPUT:
SQL>SELECIONE DATA_DE_CONTRATAÇÃO,

TO_CHAR(ADD_MONTHS(HIREDATE,33*12),'DD/MM/YYYY')
DATA_DE_RETIRO DA EMP;
OUTPUT:

HIREDATE RETIRE_DATE
--------- ---------------
17-DEC-80 17/12/2013
20-FEV-81 20/02/2014
22-FEV-81 22/02/2014
02-APR-81 02/04/2014
28-SET-81 28/09/2014
01-MAI-81 01/05/2014
09-JUN-81 09/06/2014
09-DEZ-82 09/12/2015
17-NOV-81 17/11/2014
08-SET-81 08/09/2014
12-JAN-83 12/01/2016
03-DEZ-81 03/12/2014
03-DEC-81 03/12/2014
23-JAN-82 23/01/2015

ANÁLISE
Displaying the retirement date with century.

LAST_DAY

LAST_DAYerotnraom
úitlodaieummêespecifado.
m
doiadtioúêsléquablseraxsP
em
vpcoircêop,l

MONTHS_BETWEEN
Usadoparaencontraronúmerodemesesentredoismesesdados

INPUT:
SQL>SELECIONAR ULTIMO_DIA(SYSDATE) DO DUAL;
SAÍDA:

ÚLTIMO_DIA(SYSDATE)
-------------------------
31-MAR-07

ANÁLISE
Encontre a última data do mês
61
INPUT:
SQL>SELECIONE
ENAME,MESES_ENTRE(SYSDATE,DATA_DE_CONTRATAÇÃO)/12
EXPERIÊNCIA DE EMP;
OUTPUT:
ENAME EXPERIENCE
---------- ----------
SMITH 26.2713494
ALLEN 26.0966182
WARD 26.0912419
JONES 25.9783387
MARTIN 25.4917795
BLAKE 25.8976935
CLARK 25.7928548
SCOTT 24.2928548
REI 25.3546827
TURNER 25.545543
ADAMS 24.2014569
JAMES 25.3089838
FORD 25.3089838
MILLER 25.171887

ANÁLISE
Encontra o número de meses entre a data do sistema e a data de contratação. O resultado é dividido
with 12 to get the experience

62
FunçõesDiversas

Aquiestãotrêsfunçõesdiversasquevocêpodeacharúteis.
MAIOReMENOR

INPUT:
SQL>SELECIONE O MAIOR(10,1,83,2,9,67) DO DUAL;
OUTPUT:

MAIOR
---------
83
ANÁLISE

Exibe o maior dos valores fornecidos

A diferença entre GREATEST e MAX é


1) GREATEST É UMA FUNÇÃO DE LINHA ÚNICA, MAX É UM GRUPO
FUNÇÃO
2) MAIORES VALORES RETIRADOS DE DIFERENTES COLUNAS
DE CADA LINHA, ONDE O MÁXIMO RECEBE VALORES DE
LINHAS DIFERENTES DE UMA COLUNA.

Asumaquexseitumatbealdesutdanets
ESTUDANTE
ROLLNONAMESUB1SUB2SUB3SUB4
1 5 46RAV82I552
2 2 15KR65IS785
3 7 74 42 25 5UBAB
4 INPUT: 8 86UN65A 5 4 4
SQL>SELECIONAR NOME, SUB1, SUB2, SUB3, SUB4,
sanotm oriasrarEonct GREATEST(SUB1,SUB2,SUB3,SUB4) GREATEST_MARK,
senoersem
MENOR(SUB1,SUB2,SUB3,SUB4) MENOR_MARCAS DE ALUNO

OUTPUT:
ROLLNO NAME SUB1 SUB2 SUB3 SUB4 GREATEST LEAST
MARCA MARCA
1 RAVI 55 22 86
63 45 86 22
2 KRIS 78 55 65 12 78 12
3 BABU 55 22 44 77 77 22
4 ANU 44 55 66 88 88 44
64
USUÁRIO

USERretornaonomedocaracteredousuárioatualdobancodedados.

INPUT:
SQL>SELECIONE O USUÁRIO DO DUAL;
OUTPUT:

USUÁRIO
--------
SCOTT

ANÁLISE
Exibe o nome do usuário da sessão atual
Também podemos exibir o nome de usuário usando o comando de ambiente
SQL> MOSTRAR USUÁRIO

AFunçãoDECODE

A ufnçãoDECODEuémdocsomandom spasoideorsonsoSQL*P
eu-ls
vam
loetzposaindA
[Link]
padãdroS
oQL
caerdcpeorcedm
ienalt
ugni l m
e sadi tnoc oãtse euq seõçnuf
EDOCED o ã ç u r t s n i A
porgarmmniganlguO
[Link]éfedipcaneasáircdesicoaódisetrm
lespexlos,
DECODIFIQUEgeralmenteécapazdepreencheralacunaentreSQLeasfunçõesdeumprocedural
ngíua.l

SINTAXE:

DECODIFICAR (coluna1, valor1, saída1, valor2, saída2, saída3)

OexempodlnsaeitxezurfainlçãoDECODEncaoulna1.

1eulav ed rolavm
u revi t 1anuloc a eS
.luataorlva

2eulav ed rolavm
u revi t 1anuloc a eS
.luataorlva

neref id rolavm
u revi t 1anuloc a eS
da3em
í[Link]
65
ENTRADA
SQL> SELECT ENAME,JOB,DECODE(JOB,'CLERK','EXEC','SALESMAN',
'[Link]','ANALISTA','PM','GERENTE','VP',PROMOÇÃO DO EMP;

SAÍDA
ENAME JOB PROMOTION
---------- --------- ---------
SMITH CLERK EXEC
ALLEN VENDEDOR OFICIAL S.
WARD SALESMAN [Link]
JONES MANAGER VP
MARTIN VENDEDOR OFICIAL DE VENDAS
BLAKE MANAGER VP
CLARK MANAGER VP
SCOTT ANALISTA PM
REI PRESIDENTE PRESIDENTE
TURNER VENDEDOR OFICIAL
ADAMS CLERK EXEC
JAMES CLERK EXEC
FORD ANALYST PM
MILLER CLERK EXEC

ANÁLISE
Quando JOB tiver o valor CLERK, exiba EXEC em vez de CLERK
Quando JOB tiver o valor VENDEDOR, exiba S. OFICIAL em vez de VENDEDOR
Quando JOB tem o valor ANALISTA, então exiba PM em vez de ANALISTA
Quando JOB tiver o valor MANAGER, exiba VP em vez de MANAGER
CASO CONTRÁRIO, EXIBIR O MESMO TRABALHO

66
ENTRADA
SQL>SELECIONE ENAME, JOB, SAL, DECODE(JOB, 'CLERK', SAL*1.1, 'VENDEDOR',
SAL * 1.2, 'ANALISTA', SAL * 1.25, 'GERENTE', SAL * 1.3, SAL) NOVO_SAL DA EMP;
OUTPUT
ENAME JOB SAL NEW_SAL
---------- --------- ---------- ----------
SMITH CLERK 800 880
ALLEN SALESMAN 1600 1920
WARD SALESMAN 1250 1500
JONES MANAGER 2975 3867.5
MARTIN SALESMAN 1250 1500
BLAKE MANAGER 2850 3705
CLARK MANAGER 2450 3185
SCOTT ANALYST 3000 3750
KING PRESIDENT 5000 5000
TURNER SALESMAN 1500 1800
ADAMS CLERK 1100 1210
JAMES CLERK 950 1045
FORD ANALYST 3000 3750
MILLER CLERK 1300 1430
ANÁLISE
Quando o CARGO é EMPREGADO, então dá um aumento de 10%
Quando o CARGO tem o valor VENDEDOR, então dar um aumento de 20%
Quando o CARGO tem o valor ANALISTA, então dará um aumento de 25%
Quando o CARGO tiver o valor GESTOR, então conceder um aumento de 30%
CASO CONTRÁRIO, nenhum incremento

Suponhaquehajumatbealcomempnoen,amse,xo

ENTRADA
SQL> SELECIONE ENAME, SEXO, DECODE(SEXO, 'MASCULINO', 'SR.' || ENAME,
‘MS.’||ENAME) DE EMP;

ANÁLISE
Adicionar 'Sr.' ou 'Sra.' antes do nome com base no gênero deles.

67
68
CASO

ApadritoOracel9v,iocêpodeusarfunçãoCASEnoulgadreDECODEO
.CASE
esle,neht ,new
hsdrw
oyekehtsesunoi tcnuf
óc o ranrot edop euq o ,odiuges
DECODIFICAR.

Exempol

SQL> SELECIONE TRABALHO,


CASO TRABALHO
WHEN 'MANAGER' then 'VP'
WHEN 'CLERK' THEN 'EXEC'
WHEN 'SALESMAN' THEN '[Link]'
SE NÃO
JOB
FIM
DE EMP;

TRABALHO CASOTRABALHOWH
--------- ---------
CLERK EXEC
VENDEDOR [Link]
VENDAS S. OFICIAL
MANAGER VP
VENDEDOR OFICIAL DE VENDAS
MANAGER VP
MANAGER VP
ANALISTA ANALISTA
PRESIDENTE PRESIDENTE
VENDEDOR [Link]
CLERK EXEC
CLERK EXEC
ANALISTA ANALISTA
CLERK EXEC

ANÁLISE
Funciona de forma semelhante ao DECODE

69
NVL

ugi é oãçnuf atse N U


O
L
, rof rolav o eS
et i laebnacetut i [Link] lauqesinoi tcnufsiht
oucomaçã[Link]

NVLsinãosem il atianúmerosp,odeserusadocomCHARV
,ARCHAR2D
, ATE,
eopuirostdedadom
s,asvoaelrauçsãtidobestvemseormesmodyatpe.

SINTAXE NVL(valor, substituto)

ENTRADA

SQL> SELECIONE EMPNO, SAL, COMM, SAL + COMM TOTAL DO EMP;

SAÍDA
EMPNO SAL COMM TOTAL
---------- ---------- ---------- ----------
7369 800
7499 1600 300 1900
7521 1250 500 1750
7566 2975
7654 1250 1400 2650
7698 2850
7782 2450
7788 3000
7839 5000
7844 1500 0 1500
7876 1100
7900 950
7902 3000
7934 1300

ANÁLISE
A operação aritmética é possível apenas quando há valor em ambas as colunas.

70
INPUT

SQL> SELECIONAR EMPNO, SAL, COMM, SAL + NVL(COMM,0) TOTAL DE


EMP;

SAÍDA
EMPNO SAL COMM TOTAL
---------- ---------- ---------- ----------
7369 800 800
7499 1600 300 1900
7521 1250 500 1750
7566 2975 2975
7654 1250 1400 2650
7698 2850 2850
7782 2450 2450
7788 3000 3000
7839 5000 5000
7844 1500 0 1500
7876 1100 1100
7900 950 950
7902 3000 3000
7934 1300 1300

ANÁLISE
Usando NVL, estamos substituindo 0 se COMM for NULL.

ENTRADA
SQL>SELECIONE DEPTNO,SOMA(SAL),RÁCIO_PARA_RELATÓRIO(SOMA(SAL))
OVER() DO EMP GROUP BY DEPTNO;

OUTPUT
DEPTNO SOMA(SAL) RAZÃO_PARA_RELATÓRIO(SOMA(SAL)) SOBRE()
---------- ---------- -------------------------------
10 8750 .301464255
20 10875 .374677003
30 9400 .323858742

ANÁLISE
A FUNÇÃO RATIO_TO_REPORT ENCONTRA A RAZÃO SALARIAL DAQUELA DEPARTAMENTO
SOBRE O SALÁRIO TOTAL DE TODOS OS EMPREGADOS.

71
LENGTH
Enconoecrtompm
irenodtniaofm
r açãodada

SQL> SELECT ENAME,LENGTH(ENAME) FROM EMP;


SQL> SELECIONAR COMPRIMENTO(SYSDATE) DE EMP;
SQL> SELECIONAR SAL, COMPRIMENTO(SAL) DE EMP;

ASCI
EnconoevrtA
aolrSC
dIocarcedtrado

SQL> SELECT ASCII('A') FROM DUAL;

Exerccíoi

m
u.m
uaseretcaracedoãçiutitsbusaazilaeroãçnuf_
osnem
E
sotxroptircseorietnipsonaretboarapdasuénoitpom
rotaf_
ufnçãT
oO_CHAR.
seretcaracedsaiedacsaudrm
oancibarapodasuém oílobs_
O que acontece se "replacestring" não for fornecido para a função REPLACE
UmnúmeropodeserconvertidoparaDATA?
ConvertaovalordonomenatabelaEMPparaletrasminúsculas
Exibaosnomesdosfuncionáriosquetêmmaisde4caracteresno
nome.
mIm piraq*uanm otshelm
axstrinnoúmeor
Exibaonome,comissã[Link]ãoforNULA,imprimacomoNOCOMM
Adcioneonúmerodedaiàsdadtada
Exibaosdoisprimeiroseosdoisúltimoscaracteresdeumnomedadoecombine.
)snoi tcnufylnoeU s(gnirtselgnisam seaht
Encondaerftinçeandertuadsadtsadas
Exibatodososnomesquecontêmsublinhado
daaum tdadeamsedsenúm
orreiarubts

72
73
CLÁUSULAGROUPBY

Agruparpordeclaraçãoagrupatodasaslinhascomomesmovalordecoluna.
Usetogeneratesummaryoutputfromtheavailabledata.
Sempre que usamos uma função de grupo na declaração SQL, temos que usar um grupo
áuacsl

INPUT
SQL> SELECIONAR CARGO, CONTAR (*) DE FUNCIONARIOS AGRUPAR POR CARGO;

SAÍDA
JOB COUNT(*)
--------- ----------
ANALISTA 2
FUNCIONÁRIO 4
MANAGER 3
PRESIDENTE 1
SALESMAN 4

ANALYSIS
Conta o número de funcionários em cada um dos empregos.
Quando estamos agrupando por trabalho, inicialmente os trabalhos são colocados em ordem ascendente
pedido em um segmento temporário.
No segmento temporário, a cláusula group by é aplicada, de modo que em cada
função de contagem de trabalhos semelhantes aplicada.

ENTRADA
SQL> SELECIONE JOB, SOMA (SAL) DE EMP GRUPO POR JOB;

SAÍDA
JOB SUM(SAL)
--------- ----------
ANALYST 6000
ESCRITURÁRIO 4150
GERENTE 8275
PRESIDENT 5000
SALESMAN 5600

ANÁLISE

Com cada trabalho, ele encontra o salário total

74
75
ERROcomCLÁUSULAGROUPBY

Noat:

ApenascolunasagrupadassãopermitidasnacláusulaGROUPBY
WheneverweareusingagroupfunctionintheSQLstatement,wehaveto
usegroupbycaluse.

INPUT

SQL> SELECT JOB, COUNT(*) FROM EMP;

SAÍDA
SELECIONE CARGO, CONTAR(*) DE EMP
*
ERRO na linha 1:
ORA-00937: not a single-group group function

ANÁLISE
Isto resultado ocorre porque o grupo funções, tal como SOMA e
CONTAGEM são designados para lhe contar algo sobre um grupo ou linhas,
não as linhas individuais da tabela. Este erro é evitado utilizando
TRABALHO na cláusula GROUP BY, que força o COUNT a contar todos os
linhas agrupadas dentro de cada trabalho.

ENTRADA

SQL> SELECIONE CARGO, NOME, CONTAGEM(*) DE EMP GRUPO POR CARGO;

SÁIDA

SELECT JOB,ENAME,COUNT(*) FROM EMP GROUP BY JOB


*
ERRO na linha 1:
ORA-00979: não é uma expressão GROUP BY

ANÁLISE

Na consulta acima, JOB é apenas a coluna agrupada, enquanto ENAME


a coluna não é uma coluna agrupada.

Quaisquer que sejam as colunas que estamos agrupando, a mesma coluna é permitida.
exibir

76
ENTRADA
SQL> SELECIONE CARGO, MIN(SAL), MAX(SAL) DO EMP AGRUPAR POR CARGO;

OUTPUT
JOB MIN(SAL) MAX(SAL)
--------- ---------- ----------
ANALYST 3000 3000
CLERK 800 1300
MANAGER 2450 2975
PRESIDENT 5000 5000
SALESMAN 1250 1600

ANÁLISE
Com cada trabalho, encontra o SALÁRIO MÍNIMO E MÁXIMO

[Link]
aonrfuesim
raldoaeçtõresboxiPar

INPUT
SQL> SELECIONAR CARGO, SOMA(SAL), MÉDIA(SAL), MÍNIMO(SAL), MÁXIMO(SAL), CONTAR(*)
DE EMP GRUPAR POR TRABALHO;

SAÍDA
JOB SUM(SAL) AVG(SAL) MIN(SAL) MAX(SAL) COUNT(*)
--------- ---------- ---------- ---------- ---------- ----------
ANALYST 6000 3000 3000 3000 2
CLERK 4150 1037.5 800 1300 4
MANAGER 8275 2758.33333 2450 2975 3
PRESIDENT 5000 5000 5000 5000 1
SALESMAN 5600 1400 1250 1600 4

ANÁLISE

Com cada trabalho, encontre as informações totais do resumo.

77
seiralaslaotm
tew
D
stnterp,oiaw
siigtnaD
iputseohutytaplsT
odi
Com um relatório estilo matriz.

ENTRADA

SQL> SELECIONAR CARGO, SOMA(DECODE(DEPTNO,10,SAL)) DEPT10,


SUM(DECODE(DEPTNO,20,SAL)) DEPT20,
SUM(DECODE(DEPTNO,30,SAL)) DEPT30,
SOMA(SAL) TOTAL DE EMP GRUPADO POR CARGO;

SAÍDA

JOB DEPT10 DEPT20 DEPT30 TOTAL


--------- ---------- ---------- ---------- ----------
ANALYST 6000 6000
CLERK 1300 1900 950 4150
MANAGER 2450 2975 2850 8275
PRESIDENT 5000 5000
SALESMAN 5600 5600

ANALYSIS
Quando aplicamos o agrupamento, inicialmente todos os cargos são colocados em ordem crescente de
designações.
Então, a cláusula GROUP BY agrupa designações semelhantes, em seguida, a função DECODE (Único
a função de linha) se aplica em cada uma das linhas daquele grupo e verifica o DEPTNO. Se
DEPTNO=10, ele passa o salário correspondente como um argumento para SUM().

ENTRADA

SQL> SELECIONE DEPTNO, JOB, CONTAR(*) DE EMP AGRUPAR POR


DEPTNO,JOB;

SAÍDA
DEPTNO JOB COUNT(*)
---------- --------- ----------
10 SECRETÁRIO 1
10 GERENTE 1
10 PRESIDENTE 1
20 SECRETÁRIO 2
20 ANALISTA 2
20 GERENTE 1
30 OFICIAL 1
30 GERENTE 78
30 VENDEDOR 4

ANÁLISE
79
D
oEPT
urm
N
zvebiE
snpO
aexi

ENTRADA

SQL> QUEBRAR NO DEPTNO PULAR 1


SQL> SELECIONAR DEPTNO, JOB, CONTAR(*) DE EMP GRUPAR POR DEPTNO, JOB;

SAÍDA
DEPTNO JOB COUNT(*)
---------- --------- ----------
10 CLERK 1
GERENTE 1
PRESIDENTE

20 EMPREGADO 2
ANALISTA 2
GERENTE

30 FUNCIONÁRIO 1
GERENTE
VENDEDOR 4

ANÁLISE

Quebra é um comando de Ambiente, que interrompe a informação em repetição


coluna e exibe-os apenas uma vez.
SKIP 1 usado com BREAK para deixar uma linha em branco após a conclusão de cada
Deptno.

uA
m
[Link]
ornatedousbim
qeutos,daaqbuream
erorveaP
ra

SQL> LIMPAR QUEBRA;

80
funçãoCUBE

PodemosusarafunçãoCUBEparagerarsubtotaisparatodasascombinaçõesdosvalores
eU
PL
O
Re E
U
B
C( .yb puorg alusuálc an

ENTRADA
SQL> SELECIONE DEPTNO, JOB, CONTAR(*) DE EMP GRUPO POR
CUBE(DEPTNO,JOB);

OUTPUT
DEPTNO JOB COUNT(*)
---------- --------- ----------
14
ATENDENTE
ANALYST 2
GERENTE 3
VENDEDOR 4
PRESIDENTE
10 3
10 FUNCIONÁRIO 1
10 GERENTE 1
10 PRESIDENTE
20 5
20 SECRETÁRIO 2
20 ANALISTA 2
20 GERENTE 1
30 6
30 ATENDENTE 1
30 GERENTE 1

DEPTNO CARGO CONTAR(*)


---------- --------- ----------
30 VENDEDOR 4

ANÁLISE

O cubo exibe a saída com todas as permutações e combinações de todas as colunas


dada uma função CUBE.

81
82
FUNÇÃOROLLUP

C
U
B
Eoãçnuf ad oa etnahlm
ees É

ENTRADA
SQL> SELECIONE DEPTNO, JOB, CONTAR(*) DE EMP GRUPAR POR
ROLLUP(DEPTNO,JOB)

SAÍDA
DEPTNO JOB COUNT(*)
---------- --------- ----------
10 ATENDENTE 1
10 GERENTE 1
10 PRESIDENTE 1
10 3
20 FUNCIONÁRIO 2
20 ANALISTA 2
20 GERENTE 1
20 5
30 FUNCIONÁRIO 1
30 GERENTE
30 VENDEDOR 4
30 6
14

HAVINGCLAUSE

Sempre que estivermos usando uma função de grupo na condição, temos que usar having
GR
aO
ulsáU
B
lcY
Po.m
caountH
jA
adV
usN
lusáIG
élcA

gcoarporsaiotosiáralsrbexiP
em
paorop,l

ENTRADA
SQL> SELECIONAR CARGO,SOMA(SALÁRIO) DA EMP AGRUPAR POR CARGO;
SAÍDA
SQL> SELECT JOB,SUM(SAL) FROM EMP GROUP BY JOB;

JOB SUM(SAL)
--------- ----------
ANALYST 6000
SECRETÁRIO 4150
MANAGER 8275
PRESIDENT 5000
SALESMAN 5600

83
84
50aoriurpesélaottoirálasoujc,sõgeçnaisdesaqluaesnpaerbixieaP
ra

INPUT
SQL> SELECIONE CARGO, SOMA(SAL) DE EMP ONDE SOMA(SAL) > 5000
AGRUPAR POR CARGO;
SAÍDA
SELECIONE CARGO, SOMA(SAL) DE EMP ONDE SOMA(SAL) > 5000 AGRUPAR POR CARGO
*
ERRO na linha 1:
ORA-00934: função de grupo não é permitida aqui

ANÁLISE
A cláusula Where não permite usar função de grupo na condição.
Quando usamos a função de grupo na condição, devemos usar a cláusula having.

ENTRADA
SQL> SELECIONAR CARGO, SOMA(SAL) DE EMP GRUPO POR CARGO TENDO
SOMA(SAL) > 5000;

SAÍDA
JOB SUM(SAL)
--------- ----------
ANALYST 6000
GERENTE 8275
SALESMAN 5600

ANÁLISE

Exibe todas as designações cujo salário total é superior a 5000.

85
ENTRADA
SQL> SELECIONE JOB, CONTAGEM(*) DE EMP GRUPO POR JOB TENDO
CONTA(*) ENTRE 3 E 5;

OUTPUT
JOB COUNT(*)
--------- ----------
ATENDENTE 4
GERENTE 3
SALESMAN 4

ANÁLISE

Exibe todas as designações cujo número de empregados esteja entre 3 e 5

INPUT
SQL> SELECIONAR SAL DO EMP AGRUPAR POR SAL TENDO CONTAGEM(SAL) > 1;

SAÍDA
SAL
----------
1250
3000

ANALYSIS

Exibe todos os salários que aparecem mais de uma vez na tabela.

86
PONTOS A LEMBRAR

A cláusula WHERE pode ser usada para verificar condições baseadas em


valores de colunas e expressões, mas não o resultado de GROUP
funções.
A cláusula HAVING é especialmente projetada para avaliar as condições
que são baseadas em funções de grupo como SUM, COUNT, etc.
A cláusula HAVING só pode ser usada quando a cláusula GROUP BY está presente.
usado.

ORDEMDEEXECUÇÃO

Aqui estão as regras que o ORACLE usa para executar diferentes cláusulas dadas em SELECT
comando

. Seleciona linhas com base na cláusula Where


. Agrupa linhas com base na cláusula GROUP BY
. Calcula os resultados para cada grupo
. Eliminar grupos com base na cláusula HAVING
. Então ORDER BY é usado para ordenar os resultados
87
Exempol
INPUT
SQL> SELECIONE CARGO, SOMA(SAL) DE EMP ONDE CARGO != 'CLERK'
AGRUPAR POR CARGO TENDO SOMA(SAL) > 5000 ORDENAR POR CARGO DESC;

EXERCÍCIO

ANEXO–ACONSULTA2

SubconsultasAninhadas

Annihamenotéoaotdenicorporarumasubconsuatldenrtodeourtasubconsuatl.
SN
I TAXE

SELECT * FROM ALGO ONDE (SUBCONSULTA (SUBCONSULTA


(SUBQUERY)));

Sempre que informações particulares não estiverem acessíveis através de uma única consulta, então nós
etqrueescervecronsuatdslefiernuetsm
, naiculdíanaouart.

Subconsuatplsodemsearnnihadaãtsoprofundameneqtuanotsum
ai pelmenatçãodeSQLperm
.riti

Podemosescreverdiferentestiposdesubconsultas
Subconsuatdslnielhaúncia
Subconsultas de várias linhas
Subconsultas Multicolunas
Subconsultascorelacionadas.

88
Subconsuatd
lnielhaúncia
Uma subconsulta que retorna apenas um valor.
ENTRADA
PoerxeSQL>
mpol, SELECIONE ENAME, SAL DE EMP ONDE SAL = ( SELECIONE
MAX(SAL) DE EMP);
o?irálasm
oroianbdeocrátseqm
uedgoaeprreobtaP
ra
SAÍDA
ENAME SAL
------------ ----------
REI 5000

ANÁLISE 89
A consulta do lado direito é chamada de consulta filha e a consulta do lado esquerdo é chamada de consulta pai.
consulta. Em consultas aninhadas, a consulta filho é executada primeiro antes da execução da consulta pai
consulta.
ENTRADA
SQL> SELECIONE ENAME, DATA_DE_ADMISSAO DE EMP ONDE DATA_DE_ADMISSAO =
( SELECIONAR MÁXIMO(HIREDATE) DA EMP);

OUTPUT
ENAME HIREDATE
---------- ---------
ADAMS 12-JAN-83

ANÁLISE
Exibir o funcionário menos experiente

90
ENTRADA
SQL> SELECIONE ENAME, SAL DE EMP ONDE SAL < (SELECIONE
MÁX(SAL) DE EMP);

SAÍDA
ENAME SAL
---------- ----------
SMITH 800
ALLEN 1600
WARD 1250
JONES 2975
MARTIN 1250
BLAKE 2850
CLARK 2450
SCOTT 3000
TURNER 1500
ADAMS 1100
JAMES 950
FORD 3000
MILLER 1300

ANÁLISE

Exiba todos os funcionários cujo salário é menor que o


salário máximo de todos os funcionários.

Consulta

m
m
oxiám
oenioíernteoãtseosirálasosujcosiornáuincfosodst rbixieaPra
osirálas

ENTRADA

SQL> SELECIONE * DO EMP ONDE SAL ENTRE (SELECIONE MIN(SAL)


DE EMP) E (SELECIONAR MÁXIMO(SAL) DE EMP);

91
Displayaltheemployeeswhoaregetingmaximumcommissioninthe
zaçãgonri

SQL> SELECIONE * DA EMP ONDE COMM =


(SELECIONE MAX(COMM) DE EMP);

Consulta

Exibirtodososfuncionáriosdodepartamento30cujosalárioémenorqueomáximo
m
[Link]

SQL> SELECT EMPNO,ENAME,SAL FROM EMP WHERE DEPTNO=30


E SAL < (SELECIONE MÁXIMO (SAL) DE EMP ONDE DEPTNO = 20);

Subconsultas de várias linhas

Uma subconsulta que retorna mais de um valor.

ENTRADA
SQL>SELECIONE ENAME,SAL DO EMP ONDE SAL EM( SELECIONE
SAL DO GRUPO EMP POR SALTANDO HAVENDO CONTAGEM(*)> 1);

SAÍDA
ENAME SAL
---------- - ---------
ALA 1250
MARTIN 1250
SCOTT 3000
FORD 3000

ANÁLISE
Exibe todos os funcionários que estão recebendo salários semelhantes

When child query returns more than one value, we have to use IN operator for
comparação.

92
SubconsultasMulticoluna

Quando subconsultas retornam valores de colunas diferentes.


SQL> SELECIONE EMPNO, ENAME, DEPTNO, SAL DE EMP ONDE (DEPTNO, SAL)
IN (SELECIONAR DEPTNO, MÁX(SAL) DO EMP GRUPO POR DEPTNO);
SAÍDA
EMPNO ENAME DEPTNO SAL
---------- ---------- ---------- ----------
7839 REI 10 5000
7788 SCOTT 20 3000
7902 FORD 20 3000
7698 BLAKE 30 2850

ANÁLISE
Exibir todos os funcionários que estão recebendo os salários máximos em cada departamento

INSTRUÇÕESDMLEMSUBCONSULTAS

m
eap1lbeatnaaizvaalbeatdaosdnaicelesnshail rirensiaP
ra

INPUT
SQL> INSERIR EM EMP1
SELECIONE * DE EMP ;

ANÁLISE
EMP1 é uma tabela existente. Insere todas as linhas selecionadas na tabela EMP1.

93
Exerccíoi

odnebecer átse oi ránoicnufm


u ,02 otnm
eat rapedN o
om
aucjotsm
E
[Link]
dgesinaçãcombniandcom
dagesinaçãdoufonocinaom
cáira.

Exibatodososfuncionárioscujosalárioestádentrode±1000damédia
hm
[Link]

ExibaosfuncionáriosquereportaramaKING

Exibatodososfuncionárioscujosalárioéinferioraosaláriomínimode
GERENTES.

94
INTEGRITYCONSTRAINTS

Restriçõessãousadasparaimplementaregraspadrãoc,omoaexclusividadenachave.
O camerdgpnaerogcoóm
cis,coaulA
naGdE
ev,em
counm
ert1veno5raltr
e60ce.t

OservidorOraclegarantequeasrestriçõesnãosejamvioladassemprequeumalinhaé
dazi lauta uo odíulcxe ,odi resni

AsrestriçõesnormalmentesãodefinidasnomomentodacriaçãodatabelaM
. astambémé
[Link]ósõçseirtserrniidfevleípsoé

TYPESOFCONSTRAN
ITS

Asrestriçõessãoclassifcadasemdoistipos

T
çR
dõieabsretsl
RestriçõesdeColuna

RestrçiãoDeTabealUma restrição dada ao nível da tabela é chamada de Tabela


RestriçãoP
.odereferi-seamaisdeumacolunadatabela.

Um exemplo atípico é a restrição PRIMARY KEY que é usada para definir composite.
chavem
pira.áir

RestriçãoDeColunaUma restrição dada ao nível da coluna é chamada de Coluna


[Link]
podeoã[Link]
úniapraaguerm
rneD
[Link]
,odinifedátse lauqan ,anuloc a euq
Um exemplo atípico é a restrição PRIMARY KEY quando uma única coluna é a chave primária.
[Link]

Váporitosdsreçrstõid
en
sietgd
riade

PRM
I ARYKEY
ÚNICO
NOTNULL
VERIFICAÇÃO

95
tm
aum eavisulcxe raci fC
e sahni l etnm iH tneA
dV
iEP
aR
raIM

odaR
suIAÉ
émis,esuem dum
encoa,lrsaiatspconidsE
aelem [Link]áea
onuledaosnosdaeviium sxelcméaE
an(tlocm [Link]ám
avededa
.)sváietnioeãcasorvla

A
MIÁ
R
IR
PVE
H
A
C
O
=
N
U
LNÃ
O
+

N
I ,ajes uo
Auotmcaiytlceraetsunqiuenidexotenofcreunqiuenes.

ÚNICOValores únicos e NULL são aceitáveis.

OOraclecriaautomaticamenteumíndiceúnicoparaacoluna.

NÃONULOAexclusividadenãoémantidaevaloresnulosnãosãoaceitos.

DR
efiA
naCacoIndFiçãIoqRuEedVevesersatisfeitaantesdainserção
[Link]çeãlofi

DDL(LinguagemdeDefiniçãodeDados)
CreateA
, lterD
, rop

INSTRUÇÕES DDL COMPETEM AUTOMATICAMENTE. Existe


não é necessário salvar explicitamente.

CreateTable

CRIE A TABELA <NOME-DA-TABELA> (COLUNA


DEFINIÇÃO1, DEFINIÇÃO DA COLUNA2);

Sniatxe-:

ColumnDef:
<Nome>T
poiDeDadoV
ç[ãoP
iar<
laedtsãrno[]mçpeã>
oi]rdtesr

Noat=
:MniC
. oulnaniaátve=
l1

96
[Link]=1000

97
Regras:-

e m o n m U . 1

númerosnels
ã n s e l E . 2
ap etnm
elapicni rp sodasu oãs #,$ ,ajes uo

Exempol:

SQL>CRIAR TABELA EMPL47473 (EMPNO NÚMERO (3) CONSTRANGIMENTO


PK_EMPL47473_EMPNO CHAVE PRIMÁRIA, ENAME VARCHAR2 (10)
NÃO NULO, GÊNERO CHAR(1) RESTRIÇÃO
CHK_EMPL47473_SEXO VERIFICAR(UPPER (SEXO) EM
( ‘M’,’F’)), EMAIL_ID VARCHAR2 (30) ÚNICO, CARGO
VARCHAR2 (15), SALARY NUMBER (7,2) CHECK (SALARIO
ENTRE 10000 E 70000));

Nota:
Onomedarestriçãoéútiplaramanipulararestriçãodada.
Quando o nome da restrição não é dado no momento de definir as restrições,
nom
SY
om
ceS_C
oãç[Link]
rairm cetasis
Asrestriçõesdefinidasemumatabelaparticularsãoarmazenadasemumatabeladodicionáriodedados.
USER_CONSTRAINTS,USER_CONS_COLUMNS.
updnm
oA
aisberfm
taãsurolsiárazenaedm
asudom
canediU
báeaortslaSER_TABLES

SQL> DESCREVER USER_CONSTRAINTS


SQL> SELECIONE NOME_DA_CONSTRIÇÃO, TIPO_DE_CONSTRIÇÃO,
CONDIÇÃO_DE_BUSCA A PARTIR DE RESTRIÇÕES_DO_USUÁRIO
ONDE TABLE_NAME = 'EMPL47473';

SAÍDA
CONSTRAINT_NAME TIPODERESTRIÇÃO SEARCH_CONDITION
------------------------------ - ------------------------------------------------------------------------------
SYS_C003018 C "ENAME" NÃO É NULO

CHK_EMPL47473_GENDER C SUPERIOR (GÊNERO) EM ('M','F')

SYS_C003020 C SALÁRIO ENTRE 10000 E 70000

PK_EMPL47473_EMPNO P

SYS_C003022 Você

ANÁLISE

Descreve a estrutura da tabela do dicionário98de dados.


SQL> DESCREVER USER_CONS_COLUMNS
SQL> SELECIONE NOME_DA_RESTRIÇÃO,NOME_DA_COLUNA DE
USER_CONS_COLUMNS ONDE TABLE_NAME =
EMPL47473

SAÍDA
CONSTRAINT_NAME COLUMN_NAME
------------------------------ - --------------------------------
CHK_EMPL47473_GENDER GENDER

PK_EMPL47473_EMPNO EMPNO

SYS_C003018 ENAME

SYS_C003020 SALARY

SYS_C003022 EMAIL_ID

ANÁLISE

Descreve a estrutura de exibição da tabela do dicionário de dados.


A instrução SELECT é usada para visualizar as restrições definidas na coluna.

99
ALTERARTABELA
Usadoparamodificaraestruturadeumatabela

SINTAXE
ALTER TABLE <NOME_DA_TABELA> [ ADICIONAR | MODIFICAR |
DESCARTAR | RENOMEAR] ( COLUNA(S));

ADICIONAR - para adicionar novas colunas na tabela


MODIFICAR para modificar a estrutura das colunas
DELETAR - para remover uma coluna na tabela (8i)
RENOMEAR - para renomear o nome da coluna (apenas a partir do 9i)

SQL> ALTER TABLE EMPL47473 ADD (ENDEREÇO


VARCHAR2 (30), DOJ DATA,PINCODE VARCHAR2(7));
SQL> ALTER TABLE EMPL47473 MODIFY (ENAME
CHAR (15), NÚMERO DO SALÁRIO (8,2));
SQL> ALTER TABLE EMPL47473 REMOVER COLUNA
CÓDIGO PIN
SQL> ALTER TABLE EMPL47473 DROPAR
(DESIGNATION,ADDRESS);

SQL> ALTERAR TABELA EMPL47473 RENOMEAR COLUNA


ENAME TO EMPNAME

Nota:Estecomandotambéméútp
liaramanp
iualrrestrçiões

ENTRADA
SQL> ALTER TABLE EMPL47473 DROP PRIMARY KEY;

ANÁLISE
Para remover a chave primária da tabela. Outras restrições são removidas
apenas mencionando o nome da restrição.

INPUT
SQL>ALTER TABLE EMPL47473 ADD PRIMARY KEY(EMPNO);
ANALYSIS
Para adicionar uma chave primária na tabela sem
100nome de restrição. Ele cria
nome da restrição com SYS_Cn.
ENTRADA
SQL>ALTER TABLE EMPL47473 ADD CONSTRAINT
PK_EMPL47473_EMPNO CHAVE PRIMÁRIA(EMPNO);

ANÁLISE
To add primary key in the table with constraint name

MANIPULAÇÃODEDADOS

INSERINDOLINHAS

SINTAXE
INSERIR NA TABELA [ NOME DA COLUNA, NOME DA COLUNA,
….]
VALUES(VALUE1,VALUE2,VALUE3, …..);

SQL> INSERIR NA EMPL47473


VALORES(101,'RAVI','M',
‘RAMESH_B@[Link]’,5000,’10-JAN-2001’);
OU
SQL> INSERIR NO EMPL47473 VALORES(&EMPNO ,
'&EMPNAME','&GENDER','&EMAIL_ID',&SALARY,'&DOJ');

PARA INSERIR COLUNAS ESPECIFICADAS NA TABELA

SQL> INSERIR EM
EMPL47473(COD_EMP, NOME_EMP, SALÁRIO)
VALORES(101, 'RAVI', 5000);
OU
SQL>INSERIR EM
EMPL47473(CODIGO_DO_EMPREGADO, NOME_DO_EMPREGADO, SALARIO)
VALORES(&EMPNO,'7EMPNAME',&SALARY);

101
sodad ed ocnab on sat ief seõçaretN laotaAs
m
oarqusenõfçanvudm
oislaosm
cCndaO
oMMT
,I
ROLLBACKS .AVEPOINT(ChamadoscomoesatetmenstdeprocesamenotTransacoina)l

SQL>CONFIRMAR;

ANALYSIS

Informações da página sombra retornadas para a tabela e sombra


a página é destruída automaticamente.

SQL>RETORNAR;

ANÁLISE

A página sombra é destruída automaticamente sem transferência.


informação de volta à mesa.

PONTODESALVAMENTO

Podemosusarpontosdesalvamentoparareverterpartesdoseuconjuntoatualdetransações.

exPm
oropl

SQL> INSERIR EM EMPL47473


VALORES(105, 'KIRAN', 'M',
‘KIRAN_B@[Link]’,5000,’10-JAN-2001’);

SQL> SAVEPOINT A

SQL> INSERIR EM EMPL47473


VALORES(106,'LATHA','F',
‘LATHA_D@[Link]’,5000,’15-JAN-2002’);

SQL> SAVEPOINT B

102
SQL> INSERIR NA EMPL47473
VALORES(107, 'RADHA', 'F',
‘RADHA_V@[Link]’,15000,’15-JAN-2002’);

Quando selecionamos dados da tabela


SQL> SELECIONE * DE EMPL47473;

EMPNO EMPNAME G EMAIL_ID SALARY DOJ


---------- ---------- - ------------------ ---------- ---------
105 KIRAN M KIRAN_B@[Link] 5000 10-JAN-01
106 LATHA F LATHA_D@[Link] 5000 15-JAN-02
107 RADHA F RADHA_V@[Link] 15000 15-JAN-02

Asadím
aênorastosvoergsqtiuaedcoinamA
[Link],ptrenm
aoiústlo.
: t resni

SQL> ROLLBACK PARA B;

Aasçõeqsuofeçraãroumcompormsoiam
coe,resmosemsunirastçãoposaiur,
com
queralanD
d,ou)m
D
rçaocirm
sfLam
.entveqaluio(rais,rais

AUTORREVERSÃO

,seõçresni ed ei rés m
au uotelm poc êcov eS
ov e ,uetm eorm
poc so etnmeat ici lm pi
hebkcnaytunolcfmdeow
Ilyrtkm
.lortlacoim
uaietO
tlac,eruliaocm freput
quandoobancodemaqurinasocorre, ele fazesse trabalho de limpeza na próxima vez que o
[Link]éos

Nota:
103
Roblackfuncoinaapenasemdadosnãoconfrimados
A transação ADDL após uma transação DML é automaticamente confirmada.
Podemos usar um comando Environment SETVERIFYOFF para remover o antigo
novm
asensagdenardiosers.

104
CRIANDOUMATABELAAPARTIRDEOUTRATABELA

SINTAXE
CRIE A TABELA <TABLENAME> COMO SELECIONE <COLUMNS>
DE
<TABELA EXISTENTE> [ONDE <CONDIÇÃO>];

Exempol
SQL> CRIAR TABELA EMP47473 COMO SELECIONAR
EMPNO,ENAME,SAL,JOB
FROM EMP;

Adcoinau
rmanovacoulnanatbeal

SQL> ALTER TABLE EMP47473 ADD(SEXO CHAR(1));


SQL> SELECIONE * DA EMP47473;

ATUALIZANDOLINHAS

Ecesotmandouésadopam
r udoadrsadodastbaeal

SINTAXE

ATUALIZAR <TABLENAME> DEFINIR coluna1 = expressão, coluna2 =


expressão ONDE <condição>;

SQL> ATUALIZAR EMP47473 DEFINIR SAL = SAL*1.1;


SQL> CONFIRMAR / DESFAZER;
ANÁLISE
Dar aumentos uniformes a todos os funcionários

SQL> ATUALIZAR EMP47473 DEFINA SAL = DECODE (JOB, 'CLERK', SAL*1.1,


‘VENDEDOR’,SAL*1.2,SAL*1.15);
SQL> COMMIT / ROLLBACK;
105
`

106
SQL> ATUALIZAR EMP47473 DEFINIR SEXO = 'M' ONDE NOME EM
('REI','MILLER','BLAKE');
SQL> CONFIRMAR / DESFAZER;
SQL> SELECIONE * DO EMP47473;

SQL> ATUALIZAR EMP47473 DEFINIR SEXO = 'F' ONDE SEXO É


NULL;
SQL> COMMIT / ROLLBACK;
SQL> SELECIONE * DE EMP47473 ;

SQL> ATUALIZAR EMP47473 DEFINIR ENOME =


DECODIFICAR(SEXO, 'M', 'Sr.' || NOME, 'Sra.' || NOME);
SQL> COMPROMETER / REVERTER;
ANALYSIS
ADICIONE Sr. ou Sra. Antes do nome existente de acordo com o valor SEXO

107
EXCLUINDOLINHAS

SINTAXE

EXCLUIR DE <TABLENAME> ONDE <CONDITION>;

SQL> DELETAR DE EMP47473 ONDE SEXO = 'M';


SQL> CONFIRMAR | DESFAZER;

TRUNCANDOTABELA

SINTAXE

TRUNCAR TABELA <TABLENAME>

Nota: Remove todas as linhas da tabela. Excluindo


linhas especificadas é
Não é possível. Assim que a tabela é truncada, ela automaticamente
commits. É uma instrução DDL

Descartandotabela

SINTAXE
DELETAR TABELA <NOMEDATABELA>

Nota: A tabela é excluída permanentemente. É uma instrução DDL.


Remove os dados juntamente com as definições de tabela e a tabela.

108
RESTRIÇÕESDEINTEGRIDADEREFERENCIAL

Epçseiãarm
loútéitaernlçeãtrocomoautbarteal.

qdeupngairefotdV
lceisncoam
tirnsátsnO
uoasãroeacrl

Referêncais
Ondeletecascade

elaR
evahc rai rc arap l i tú etnm piecfenrêinrcpiasé
Areferêncaiésempredadapenasaoscampos-chavedeourtasatbeals.
Uma tabela pode ter quaisquer referências
AchavedereferêncaiceativaolresNULLedupcilados.

euq et m O
ocnodtenluetjecaodscaasudeé
irep elE . saicnêrefer m
Regsirtosdeatbealdecrainçaqs,uandoremovemosoregsirtodatbealmesrte.

Exemplo
Department47473 (Deptno , dname)

Employee47473 (Empno, ename, salary, dno)

O Deptno do Departamento47473 é uma chave primária


O Empno do Funcionário 47473 é uma chave primária
Dno do Funcionário47473 é uma chave de referência

Soulção

SQL>Criar tabela department47473 (deptno número(3) chave primária, dname


varchar2(20) Não nulo);

SQL>Criar tabela employee47473(empno número(3) chave primária, ename


varchar2(10)
Não nulo, salário número(7,2) verificação(salário > 0), dno número(3) referências
departamento47473(deptno) em delete cascade);

109
110
Asumaocasoondeosupermercadovendedviersoetsinseosceilnetsfazempeddios.
.snet i so

SQL> Criar tabela itemmaster (itemno número (3) chave primária, itemname
varchar2 (10), número de estoque (3) verificação (estoque > 0));

SQL>Criar tabela itemtran (trnno número (3), itemno número (3) referências
itemmaster (itemno), trndate data, trntype char (1) cheque (superior (trntype) em
(‘R’,’I’)), número da quantidade (3) verificar (estoque > 0), chave primária (trnno, itemno));

Mestre de Itens
Itemno itemname estoque
Itemtran
Trnno itemno trndate trntype quantidade

Suponha o caso em que a cada transação


cliente pede mais de um item.

DROP TABLE <TABLENAME> CASCATA RESTRIÇÕES


ANÁLISE
Excluindo a tabela juntamente com as restrições

ALTER TABLE <tablename> DROPAR CHAVE PRIMÁRIA CASCADE;

ANÁLISE
Removendo a chave primária junto com a chave de referência

111
ALTER TABLE <TABLENAME> DESABILITAR CHAVE PRIMÁRIA

ALTER TABLE <tablename> DESABILITAR CHAVE PRIMÁRIA CASCATA;

Nota: Não é possível ativar o uso em cascata.

Exerccíoi

Considereuminstiutodetreinamentoconduzindodiferentescursosn,oquaol
em
uqosacoem
uss-sea ,ossm
idéA
(l sosrucsoirávarapodnevrcsni esoãtsesonulaso
mepram
iscemudinesom
platdipeora)sucr
Oualnspoosdem paxteam garpacresl

e sotubi r ta ,salebat sa euqi f i tnedI

112
JUNTAS

Objetivos
m
.asbeqúvrlutdnoáeacm
dA
pênrosjum
çãielvrárti

UmadascaracterísticasmaispoderosasdoSQLésuacapacidadedereunire
[Link]
etqrueam
r azenoatrdooseslmenotdsedadonsecesáoirpsaarcadapcivaltoemum
odadm
som
seso ranem
zara airasicerpêcov ,sm
nouc salebatm
eS .alebat
.salbeat sairvá

snioj ed sopi t setneref id rasu sm


oedop ,elcaO
rN
o

Demsunçãojpendho
unçãojum
deãnouzar-R
ieal
naeruxntçãojEarxecut
m
aelm
esaabeltaaueJnt

Equjion
i

Exrtanidoasniformaçõesdemasideumaatbealcomparando(=)o
m
ocrnfõç[Link]
Todsp
ialycommoncoulmnniofrmaoitn

SQL> SELECIONE EMPNO, ENAME, JOB, SAL, DNAME DE EMP, DEPT


ONDE [Link] = [Link];
SAÍDA
EMPNO ENAME JOB SAL DNAME
---------- ---------- --------- ---------- --------------
7782 CLARK GERENTE 2450 CONTABILIDADE
7839 KING PRESIDENT 5000 ACCOUNTING
7934 MILLER AGENTE 1300 CONTABILIDADE
7369 SMITH EMPREGADO 800 PESQUISA
7876 ADAMS SECRETÁRIO 1100 PESQUISA
7902 FORD ANALISTA 3000 PESQUISA
7788 SCOTT ANALYST 3000 RESEARCH
7566 JONES GERENTE 2975 PESQUISA
7499 ALLEN VENDEDOR 1600 VENDAS
7698 BLAKE MANAGER 2850 SALES
7654 MARTIN SALESMAN 1250 SALES
7900 JAMES FUNCIONÁRIO 950 VENDAS
7844 TURNER SALESMAN 1500 SALES
7521 WARD SALESMAN 1250 SALES

ANALYSIS
A eficiência é maior quando comparamos as informações de dados inferiores
tabela (tabela principal) para tabela de dados superior (tabela filha).

Quando o Oracle processa várias tabelas, ele utiliza uma ordenação/mesclagem interna.
procedimento para juntar essas tabelas. Primeiro, ele escaneia e classifica a primeira tabela
(o especificado por último na cláusula FROM1
)1.3Em seguida, escaneia a segunda tabela
(o anterior ao último na cláusula FROM) e mescla todos os
recuperado da segunda tabela com aqueles recuperados da primeira
mesa. Leva cerca de 0,96 segundos
SQL> SELECIONE EMPNO, ENAME, JOB, SAL, DNAME DE
DEPT, EMP ON [Link] = [Link];

ANÁLISE

Aqui, a tabela de direção é EMP. Leva cerca de 26,09 segundos.


Então, a eficiência é menor.

Não-Equiouins

Obtendoinformaçõesdemaisdeumatabelasemusarcomparação
opa=
[Link]()

ENTRADA
SQL> SELECIONE * DOS DEPT ONDE DEPTNO NÃO ESTÁ EM
(SELECIONE DISTINTAMENTE DEPTNO DO EMP);
SAÍDA
DEPTNO DNAME LOC
---------- -------------- -------------
40 OPERAÇÕES BOSTON

ANÁLISE
Exibe os detalhes do departamento onde não há funcionários

Tambémpodemosobterasaídaacimausandooperadoresdeálgebrarelacional.

SQL> SELECIONE DEPTNO DE DEPT


MENOS
SELECIONE DEOTNO DA EMP;

SQL> SELECIONE DEPTNO DO DEPT


UNIÃO
SELECIONE DEOTNO DO EMP;
114
SQL> SELECIONE DEPTNO DO DEPT
UNIAO TODA
SELECIONE DEOTNO DO EMP;

JUNÇÃOEXTERNA

msalebat sai ráv etnm


eadaçrof atnuj euq ,niojm uÉ
+.pordanm
etsocrm
npefoãçariÉ
um.

SQL> SELECIONE EMPNO, ENAME, JOB, SAL, DNAME DE DEPT, EMP


ONDE [Link] = [Link](+);

SAÍDA
EMPNO ENAME JOB SAL DNAME
---------- ---------- --------- ---------- --------------
7782 CLARK GERENTE 2450 CONTABILIDADE
7839 KING PRESIDENT 5000 ACCOUNTING
7934 MILLER SECRETÁRIO 1300 CONTABILIDADE
7369 SMITH CLERK 800 PESQUISA
7876 ADAMS FUNCIONÁRIO 1100 PESQUISA
7902 FORD ANALISTA 3000 PESQUISA
7788 SCOTT ANALYST 3000 RESEARCH
7566 JONES MANAGER 2975 RESEARCH
7499 ALLEN VENDEDOR 1600 VENDAS
7698 BLAKE MANAGER 2850 SALES
7654 MARTIN SALESMAN 1250 SALES
7900 JAMES CLERK 950 SALES
7844 TURNER SALESMAN 1500 SALES
7521 WARD VENDEDOR 1250 VENDAS
OPERAÇÕES

115
AUTOJUNÇÃO

mism
edcheam
ébeltuanajoçã[Link]

SQL> SELECIONE [Link] || ' ESTÁ TRABALHANDO SOB ' ||


[Link] DE EMP FUNCIONÁRIO, EMP GERENTE
ONDE [Link] = [Link];
SAÍDA

O [Link] || 'ESTÁ TRABALHANDO SOB'|| GERENCIAR


--------------------------------------
SCOTT ESTÁ TRABALHANDO SOB JONES
FORD ESTÁ TRABALHANDO SOB JONES
ALLEN ESTÁ TRABALHANDO SOB BLAKE
WARD ESTÁ TRABALHANDO SOB BLAKE
JAMES ESTÁ TRABALHANDO SOB BLAKE
TURNER ESTÁ TRABALHANDO SOB BLAKE
MARTIN ESTÁ TRABALHANDO SOB BLAKE
MILLER ESTÁ TRABALHANDO SOB CLARK
ADAMS ESTÁ TRABALHANDO SOB SCOTT
JONES ESTÁ TRABALHANDO SOB O REI
CLARK IS WORKING UNDER KING
BLAKE ESTÁ TRABALHANDO SOB O REI
SMITH ESTÁ TRABALHANDO PARA A FORD

ANÁLISE
Ele mostra quem está trabalhando sob quem.
O número MGR que aparece contra o funcionário é o número do funcionário de
gerente

EXERCÍCIO

ANEXO CONSULTA III

116
OUTROSOBJETOS

OBJETODESEQUÊNCIA

Usadoparagerarsequência(Única)Inteirosparausodechavesprimárias.

SINTAXE

CRIAR SEQUÊNCIA
[INCREMENTAR EM n]
[COMEÇAR COMn]
[{VALORMÁXIMO| SEMVALORMÁXIMO}]
[{MINVALUEn| NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHEn| NOCACHE}];

Sequenceisthenameofthesequencegenerator

INCREMENT BYnspecifiestheintervalbetweensequencenumberswheren
nas i
aicnêuqes a ,adi t m
io rof alusuálc at seeS(or ietni
) .1ybs tnm
eercni

COMECE COM especifica o primeiro número de sequência a ser gerado (Se este
saulsálc
com
eqsaucoênm
i)aeç[Link],m
iti

MAXVALUE especifica o valor máximo que a sequência pode gerar

NOMAXVALUE especifica um valor máximo de 10^27 para um ascendente

eaqeuniêcs
oãdrpaoéeE
ts(entdecsdeaincquêesarpa1-
op)ção.

MINVALUEnespecificaovaleorminimodoasequência

117
NOMINVALUE especifica um valor mínimo de 1 para uma sequência ascendente

e–
1(0^2pse6qar)uêdnaeciporscE
(éeandãstro
op)ção.

CICLO | NOCICLO especifica se a sequência continua a gerar


m
ehpcageórsuem
osrm
vlaxáionuS mE(nioM
roívlaCILOé
dO eafutlop)int.

CACHEn| NOCACHEespecifiquequantosvaloresoServidordeOracle
poém
ar-lecaaném
tnm
aem
P
(paóoiaserovdO
ãiror,am
reclazenem
acach2e0
M
m
queneA
rosdX
veV
seoA
rvlaL
deU
oum
nO
tE
ocnjneo)[Link]

Exemplo
CRIE SEQUÊNCIA SQNO47473
COMECE COM 1
INCREMENTAR EM 1
VALOR MÁXIMO 10;

CRIE SEQUÊNCIA SQNO47473


COMECE COM 1
INCREMENTAR EM 1
MAVALUE10
CACHE 3
CYCLE;

NoatE :ssasequêncaisãoarmazenadasemumaatbealdedcioinároidedados
SEQUÊNCIAS_DO_USUÁRIO.
Eoestbeodjtsequênofcanirecdeuuafsnçõedsm
eemborpúcbials

NEXTVALeCURRVAL

NEXTVALéumafunçãoquegeraopróxm
i ovaolrdeumobejotdesequêncai
CURRVALéumafunçãoqueforneceovaloratualdoobjetodesequência

Asumqriuexseitumatbeal
SAMPLE47473
EMPNO ENAME SAL

Inseroivsaolren
satbeal

118
SQL> INSERIR EM SAMPLE47473 VALORES([Link],
'&ENAME', &SAL);

MODIFICAROOBJETOSEQUENCIAL

SQL>ALTERAR SEQUÊNCIA SQNO47473


INCREMENTAR EM 2
VALORMAX 40;

Nota: Não podemos mudar o valor inicial

Removeorbejotdesquêncai

SQL> REMOVER SEQUÊNCIA <NOME_DA_SEQUÊNCIA>;

VISTAS

Uma visão é um objeto, que é uma representação lógica de uma tabela


Uma visualização não contém dados por si só
salebat ed odavi redÉ
Asmudançasfeitasnastabelassãoautomaticamenterefletidasnasvistas
Asaveiwnãoarmazenadaotdosprobelmasderdundâncainão
.rgusir
Osdadoscríticosnatabelabasesãoprotegidosp,oisoacessoaessesdados
[Link]
at lusnoc ad edadixelm
poc a r izuder arap odasuÉ

w
seiv ed sopi t setneref id rai rc sm
oedop ,elcaO
rN
o

SM
I PLES COMPLEXO N
EILN
-I

SM
I PLEveiwéumavsãiqou,eécairdausandoapenausmatbeablase.

COMPLEXviewéumavista,queécriadausandomaisdeumatableou
usandofunçõesdegrupo

m
euqsm
euéoãneuqed(oãçi rcsnim
auodnasuadai rcéeuq,oãsivm
auw
éeiN
vEN
ILI
objeto.• É uma subconsulta nomeada na cláusula FROM da consulta principal. Geralmente
usado na Análise TOP N.

SINTAXE

119
CRIAR OU SUBSTITUIR [FORÇAR] VISÃO <VIEWNAME> COMO SELECIONAR
<COLUNAS> DE <TABELA> [COM SOMENTE LEITURA];

A
atbnealqauam
l vasãiobéaseadcéahamaddatbebealase
AopçãoFORCEpem rqetuviaseuziaçlãaocsedirjm
aesmoqaubtaelanseã[Link]
Noentanto,atabelabasedeveexistirantesqueavisualizaçãosejautilizada.

ObservaçãoE
:ssasvsiõesãoarmazenadasemumaatbealdedcioinároidedadosUSER_VIEWS

SQL> CRIAR OU SUBSTITUIR VISÃO TESTVIEW47473 COMO


SELECIONAR
EMPNO,ENAME,SAL DA EMP47473 COM SOMENTE LEITURA;

ANÁLISE

COMVERIFICAÇÃO

Eoastpçãouésadpaaeqrvtuiasqiueatreçlrõatbeàsbealasrevtédsvauizalção.
bat an sadi tm
irep oãs oãn oãçazi lauta e oãçresnI

SQL> CRIAR OU SUBSTITUIR VISUALIZAÇÃO CHKVIEW COMO SELECIONAR * DE EMP


ONDE DEPTNO = 20 COM OPÇÃO DE VERIFICAÇÃO;

m
[Link]
saonãocoçãn,dieuncoalazeiualatvoqcêuN em pertãoi
com
uonfsdicD
oáhrsealdetoE
saP
rnT
iqsvpm
uo2N
erdc0ê[Link]
irtfdi

Podemostambémcriarumavisãousandofunçõ[Link]õessãochamadasde
t iel etnm
eos ,oãrdap rop ,oãs salE N
.EN
ILI w
seiv A
s

SQL> CRIAR OU SUBSTITUIR VISÃO SIMPLEVIEW47473 COMO


SELECIONAR
SUBSTR(HIREDATE,-2) ANO, COUNT(*) NUMERO FROM EMP47473
AGRUPAR POR CARGO;

Para remover uma visualização

SQL> DROPAR VISÃO <VIEWNAME>;

120
ÍNDICE

OconcodnetidexaçãonoOaroém
cel esmoquuem
nídA
cvdieorle.m
sicomoum
nídcvdieorle
tnednecsam
edro an sodaci f i ssalc secidní so
éovrildoecnOdinuúeom
sí.eonurdamnopevcgtrálaiserc
.eO lcardeom R
acnçhsnO dileíW
eD
sI

Umnídciedeanáetmaé[Link]étmosvaolresdonídcie
[Link]çenodcrm
eountjednm
coestrana)sun(aocl
O endouhéibaesnçdrtlopaseoudocuonlR
aOWD
I.

PorQueUsarUmÍNDICE

OSÍNDICESNOORACLESÃOUSADOSPARADOISPROPÓSITOS

m
esdenpoheram
horm
leis,a,edoasdeoãçaurpcerararelecaaP ra
atconusl
deaviiusE
A
lxcraçFor

121
Noet-:AUNIQUEnidexsiauotmacitaylcreaetdwhenyouusePRIMARY
resrtçiõesdeCHAVEeÚNICA

Umnídciepodetarét32coulnas.

SINTAXE
CRIE ÍNDICE [ÚNICO] index_name NA tabela(coluna1,coluna2,…);

NoatO
: snídciesãoarmazenadosnaatbealdodcioinároidedadosUSER_INDEXES.

QuandoOOracleNaoUsaIndice

Oracleindexécompletamenteautomá[Link],vocênuncaprecisaabriroufecharum
onroxedninaesuot rehtew
hsedicedrevreselcaO
r .xedni

OsegunesiãtocsaoesmquoeOarN
celÃO
nzíiadlcuiet.

SELECTnãoconétmcálusualWHERE
Quando o tamanho dos dados é menor
SELECTconétmcálusualWHEREm, asacálusualWHEREnãosereferea
.adaxednianuloc
SELECIONEconétmcálusualWHEREeacálusualWHEREusanidexado
W
aH
ulsáE
lcRE
[Link]
féodidaxneiunaolcam
sa,sunaolc

RemovendoumÍndice

SINTAXE

REMOVER ÍNDICE <INDEXNAME>;

Removeurmnídcienãonivadilasapcilaçõesexsietnetps,orque
casçipõlensãoam
etsrdiendtependendstnom
cdíe,iasomem
seom
t ponão
eutrmnídciepodeaefaotdresempenho.

PSEUDOCOLUNA

122
Uma pseudo-coluna é uma coluna que gera um valor quando selecionada, mas que é
naoéumacoulnadoatbealvedradeari.

Exempol

ROWID
ROWNUM
SYADATE
PRÓXIMOVAL
CURRVAL
NULL

SãochamadasdePseudo-coulnas.

SELECIONARNÚMERODALINHAN
, ÚMERODOEMPREGADON
, OMEDOEMPREGADODAEMPRESA;

PARAEXIBIROS3MAISALTOSALARIOS

SQL> SELECIONAR ROWNUM,EMPNO,ENAME,SAL DE (SELECIONAR EMPNO,


NOME, SALARIO DE EMP ORDER BY SALARIO DESC
ONDE ROWNUM <= 3;

ANEXO

Tabel:Studeis

NAME NULO TIPO


(PNAME) NÃO NULO VARCHAR2(20) NAME
SPLACE NÃO NULO VARCHAR2(20) LUGAR ESTUDADO
COURSE NÃO NULO VARCHAR2(20) COURSE STUDIED

TABLE : SOFTWARE

123
NAME NULL ? TYPE
(PNOME) NÃO NULO VARCHAR2(20) NAME
TITLE NÃO NULO VARCHAR2(20) DESENVOLVIDO
NOME DO PROJETO
DEV_IN NÃO NULO VARCHAR2(10) IDIOMA
DESENVOLVIDO
SCOST NÚMERO(7,2) CUSTO DE SOFTWARE
DCOST NÚMERO(7,2) DESENVOLVIMENTO
COST
VENDIDO NÚMERO(4) Nº DE SOFTWARE
VENDIDO

DatainTable:STUDIES

NOME SPLACE CURSO COST


ANAND SABHARI PGDCA 45000
ALTAF COIT DCA 7200
JULIANA BITS MCA 22000
KAMALA PRAGATHI DCP 5000
MARIA SABHARI PGDCA 4600
NELSON PRAGATHI DAP 6200
PATRICK SABHARI DCA 5200
QADIR MAÇÃ HDCP 14000
RAMESH SABHARI PGDCA 4500
REBECCA BPILLANI DCA 11000
REMITHA BDPS DCS 6000
REVATHI SABHARI DAP 5000
VIJAYA BDPS DCA 48000

TABLE:SOFTWARE

PNAME TITLE DEV_IN SCOST DCOST VENDIDO


ANAND Paraquedas BÁSICO 399 6000 43
ANANDA PACOTE DE TITULAÇÃO DE VÍDEO
PASCAL 7500 16000 9
JULIANA CONTROLE DE ESTOQUE COBOL 3000 3500 0
KAMALA PACOTEDEFOLHADEPAGAMENTO
DBASE 9000 20000 7
MARY SISTEMA DE CONTABILIDADE FINANCEIRA
ORACLE 18000 85000 4
124
PATRICK GERAÇÃO DE CÓDIGO COBOL 4500 20000 23
QADIR LEIA-ME C++ 300 1200 84
QADIR BOMBASACAMINHO
MONTAGEM 750 5000 11
QADIR VACINAS C 1900 3400 21
RAMESH GESTÃO HOTELEIRA DBASE 12000 3500 4
RAMESH LEE MORTO PASCAL 599 4500 73
REMITHA UTILITÁRIOS DE PC
C 725 5000 51
REMITHA PACOTE DE AJUDA TSR MONTAGEM 2500 6000 6
REVATHI HOSPITAL PASCAL 1100 75000 2
GESTÃO
REVATHI MESTRE DO QUIZ BÁSICO 3200 2100 15
VIJAYA EDIÇÃO ISR C 900 700 6

DatainTable:PROGRAMMER

PNAME DOB DepartamentoS de PROF1


Justiça PROF2 SALARY
E
X
ANAND 21-APR-66 21-ABR-92 M PASCAL BÁSICO 3200
ALTAF 02-JUL-64 13-NOV-90 M CLIPPER COBOL 2800
JULIANA 31-JAN-68 21-APR-90 F COBOL DBASE 3000
KAMALA 30-OCT-68 02-JAN-92 F C DBASE 2900
MARY 24-JUN-70 01-FEB-91 F C++ ORACLE 4500
NELSON 11-SEP-85 11-OCT-89 M COBOL DBASE 2500
PATRICK 10-NOV-65 21-ABR-90 M PASCAL CLIPPER 2800
QADIR 31-AUG-65 21-APR-91 M ASSEMBLY C 3000
RAMESH 03-MAY-67 28-FEB-91 M PASCAL DBASE 3200
REBECCA 01-JAN-67 01-DEC-90 F BÁSICO COBOL 2500
REMITHA 19-APR-70 20-APR-93 F C ASSEMBLEIA 3600
REVATHI 02-DEC-69 02-JAN-92 F PASCAL BÁSICO 3700
VIJAYA 14-DEC-65 02-MAY-92 F FOXPRO C 3500

QUERY–I

Descuboacruom
stédodiveendpaapracoedtsesenvovdlioesmPasca.l
Exibirosnomeseidadesdetodososprogramadores
ExibaosnomesdaquelesquefizeramocursoDAP
Qual é o maior número de cópias vendidas por um pacote

125
Exibaosnomesedatasdenascimentodetodososprogramadoresnascidosem
Janorei
Exibiromenorvalordocurso
QuantosprogramadoresfizeramocursodePGDCA
Quantodereceitafoiobtidoatravésdavendadepacotes
desnvovdleiom C
ExibaosoftwaredesenvolvidoporRamesh
QuantosprogramadoresestudaramnaSabhari?
Exibaosdetalhesdospacotescujasvendasultrapassaramamarcade2000.
Descuboanrúmeordceópaqisudeevemvserendiapsar
.eotcpadacdem
ovintevolsdedeotuscoraurpcer
Exibirosdetalhesdospacotesparaosquaisoscustosdedesenvolvimentoforam
[Link]
Qual é o preço do software mais caro desenvolvido em BASIC
QuantospacotesforamdesenvolvidosnoDBASE?
QuantosprogramadoresestudaramnaPragathi?
Quantosprogramadorespagaramde5000a10000peloseucurso?
Qual é a taxa média do curso?
ExibaosdetalhesdosprogramadoresqueconhecemC
QuantosprogramadoresconhecemCOBOLouPASCAL?
QuantosprogramadoresnãoconhecemPASCALeC?
Qualéaidadedoprogramadormasculinomaisvelho?
Qual é a idade média das programadoras?
Calculatetheexperienceinyearsforeachprogrammeranddisplay
coum
njtom esdoerm
,[Link]
Quem são os programadores que celebram seu aniversário durante o
m h?nteontrurc
Quantasprogramadorasexistem?
Quais são as linguagens conhecidas pelos programadores homens
Qual é o salário médio
Quantaspessoasdesenhamde2000a4000?
ExibaosdetalhesdaquelesquenãoconhecemClipper,COBOLouPascal
Exibirosdetalhesdaquelesquecompletarão2anosdeserviço
?ona etse
Calculeovaloraserecuperadoparaaquelespacotescujo
cudosetsenvovm lienaoiedtrncauoãfpieardo?
pqonacusdeoiL
afãm
rtsoivaegnéoda?trois
Descuboacruodstosw tfaderesenvovdliopoM r ayr?
Exibaosnomesdasinstituiçõesdatabeladeestúdiossemo
ducpaistl
Quantoscursosdiferentessãomencionadosnatabeladoestudo?
Exibaosnomesdosprogramadorescujosnomescontêm2
A'arteldasaniêcrocr

126
Exibaosnomesdosprogramadorescujosnomescontêm5
sneganosrep
QuantasprogramadorasqueconhecemCOBOLtêmmaisde2
xeulasaniêcixepr
Qual é o comprimento do nome mais curto na tabela de programadores
Qual é o custo médio de desenvolvimento de um pacote desenvolvido em
COBOL
Displaythename,sex,dob(dd/mm/yyformat),DOJ(dd/mm/yy
serodm
aargorp so sodot arap )otm arof
Qual é o valor pago em salários dos programadores masculinos que
C neãsiO
oBOL
Displaythetitle,scost,dcostanddifferencebetweenscostanddcost
açneref id ed etnecsercedm edro
Exibaosnomesdospacotescujosnomescontêmmaisde1
palavra
Displaythename,dob,dojofthosemonthofbirthandmonthof
m
easeragninioj

QUERY–II

Exibaocustodopacotedesenvolvidoporcadaprogramador
Exibaosvaloresdevendasdospacotesdesenvolvidosporcadaum
porgarmador
Exibaonúmerodepacotesvendidosporcadaprogramador
Exibaocustodevendasdospacotesdesenvolvidosporcadaprogramador
Exibaonomedecadalínguacomocustomédiodedesenvolvimento,média
opycrpeciprgearvnedatonsgcilles

Displayeachprogrammer’sname,costliestpackageandcheapest
[Link]/dpolisr
Displayeachinstitutenamewithnumberofcourses,averagecostper
osucr
DisplayeachInstitutenamewithnumberofstudents
Exibaosnomesdeprogramadoresmasculinosefemininos
Exibaonomedoprogramadoreseuspacotes
Exibaonúmerodepacotesemcadalinguagem,excetoCeC++
Mostreonúmerodepacotesemcadaidiomaparaoqual
ocudosetsenvovm lim
eénotenqou1re000
ExibaadiferençamédiaentreSCOSTeDCOSTparacada
anlguage
ExibaototaldeSCOST,DCOSTeovaloraserrecuperadoparacadaum
porgarmadoprarqusceuolstnãoêm tercupeardos
Displaythehighest,lowestandaveragesalariesforthoseearning
mais de 2000

127

Você também pode gostar