Escolar Documentos
Profissional Documentos
Cultura Documentos
favorito(21)
marcarcomolido
tirardvidas
(39) (0)
AlinguagemSQLfoicriadacomoobjetivodepadronizaroscomandosde
manipulaodedadosemSGBDs.Hojeemdia,apesardealinguagempossuiruma
quantidadeconsiderveldeextenseseimplementaesproprietrias,podese
afirmarqueametafoialcanada.Conhecendobemalinguagempossvelacessaros
recursosbsicosdequalquerbancorelacional,comoOracle,SQLServerouMySQL,
sempraticamentenenhumamudana.
VeremosnesseartigoumpequenoguiadeconsultasparaocomandoSELECT,um
dosmaisimportantesdalinguagemSQL.
SELECT simples
OcomandoSELECTpermiterecuperarosdadosdeumobjetodobancodedados,
comoumatabela,viewe,emalgunscasos,umastoredprocedure(algunsbancosde
dadospermitemacriaodeprocedimentosqueretornamvalor).Asintaxemais
bsicadocomando:
SELECT
FROM
Exemplo:
SELECTCODIGO,NOMEFROMCLIENTES
SELECT*FROMCLIENTES
Ocaractere*representatodososcampos.Apesardeprtico,estecaractereno
muitoutilizado,pois,paraoSGBDmaisrpidoreceberocomandocomtodosos
camposexplicitados.Ousodo*obrigaoservidoraconsultarquaissooscampos
antesdeefetuarabuscadosdados,criandomaisumpassonoprocesso.
COMANDO WHERE
AclusulaWherepermiteaocomandoSQLpassarcondiesdefiltragem.Vejao
exemplodaListagem1.
Listagem1.Exemplowhere
SELECTCODIGO,NOMEFROMCLIENTES
WHERECODIGO=10
SELECTCODIGO,NOMEFROMCLIENTES
WHEREUF=RJ
SELECTCODIGO,NOMEFROMCLIENTES
WHERECODIGO>=100ANDCODIGO<=500
SELECTCODIGO,NOMEFROMCLIENTES
WHEREUF=MGORUF=SP
Osparntesescorretamenteutilizadosdomaispoderasconsultas,conforme
exemploabaixo:
SELECTCODIGO,NOMEFROMCLIENTES
WHEREUF=RJOR(UF=SPANDATIVO=N)
NestecomandotodososclientesdoRiodeJaneiroeapenasosclientesinativosde
SoPauloseriamcapturados.
Agoravejaoexemploaseguir:
SELECTCODIGO,NOMEFROMCLIENTES
WHERE(ENDERECOISNULL)OR(CIDADEISNULL)
Aqui,todososclientesquenopossuemendereooucidadecadastradasero
selecionados.
FILTRO DE TEXTO
Parabuscaparcialdestring,oSELECTforneceooperadorLIKE.Vejaoexemplo
abaixo:
SELECTCODIGO,NOMEFROMCLIENTES
WHERENOMELIKEMARIA%
Nestecomando,todososclientescujosnomesiniciamcomMariaseroretornados.
SequisermosretornarosnomesquecontenhamMARIAtambmnomeio,podemos
BaixeoAPP
Login
DEVMEDIA
alterarparaoexemploaseguir:
SELECTCODIGO,NOMEFROMCLIENTES
WHERENOMELIKE%MARIA%
Ousodemscaranoincioenofimdastringfornecemaiorpoderdebusca,mas
causaconsidervelperdadeperformance.Esterecursodeveserutilizadocomcritrio.
Umaobservao:emalgunsbancosdedados,amscaradefiltronorepresentada
por%.Consultearefernciadobancoparaverificarocaracterecorreto.
Porpadro,aSQLdiferenciacaixabaixadecaixaalta.Paraeliminaressadiferena,
utilizaafunoUPPER.Vejaabaixo:
SELECTCODIGO,NOMEFROMCLIENTES
WHEREUPPER(NOME)LIKEMARIA%SILVA%
ORDENAO
AordenaopodeserdefinidacomocomandoORDERBY.Assimcomonocomando
WHERE,ocampodeordenaonoprecisaestarlistadocomocampode
visualizao.VejaoexemplodaListagem2.
Listagem2.Exemploorderby
SELECTCODIGO,NOMEFROMCLIENTES
ORDERBYNOME
SELECTCODIGO,NOMEFROMCLIENTES
ORDERBYUF,NOME
Inner:1600x731
Outer:1600x860
AutilizaodapalavraDESCgaranteaordenaoinvertida:
SELECTCODIGO,NOMEFROMCLIENTES
ORDERBYNOMEDESC
SELECTCODIGO,NOMEFROMCLIENTES
ORDERBYUFDESC
JUNO DE TABELAS
OSELECTpermitejuntarduasoumaistabelasnomesmoresultado.Issopodeser
feitodevriasformas.Umadelassegueabaixo:
SELECTCLIENTES.CODIGO,CLIENTES.NOME,PEDIDOS.DATA
FROMCLIENTES,PEDIDOS
WHERECLIENTES.CODIGO=PEDIDOS.CODCLIENTE
NestalinhaastabelasrelacionadasCLIENTESePEDIDOSsounificadasatravsdo
campochave,emumaoperaodeigualdade.Reparequeosnomesdoscampos
passamaserprefixadospelonomedastabelas,resolvendoduplicidades.Umaverso
resumidadessecomandopodesercomoabaixo:
SELECTA.CODIGO,A.NOME,B.DATA,B.VALOR
FROMCLIENTESA,PEDIDOSB
WHEREA.CODIGO=B.CODCLIENTE
OusodealiasesnocdigoSQLtornaamanutenomaissimples.
Nocomandoabaixotemosvriastabelasunificadasemumamesmaclusula.Vejaa
Listagem3.
Listagem3.Exemplodetabelasunificadas
SELECTA.CODIGO,A.NOME,B.DATA,B.VALOR,C.QTD,D.DESCRIC
FROMCLIENTESA,PEDIDOSB,ITENSC,PRODUTOSD
WHEREA.CODIGO=B.CODCLIENTE
ANDB.CODIGO=C.CODPEDIDO
ANDC.CODPRODUTO=D.CODIGO
NestecomandounificamosastabelasrelacionadasCLIENTES,PEDIDOS,ITENSe
PRODUTOS.Vejamaisesteexemplo:
SELECTA.CODIGO,A.NOME,B.DATA,B.VALOR
FROMCLIENTESA,PEDIDOSB
WHEREA.CODIGO=B.CODCLIENTE
ANDA.UF=RJ
Observequeajunoatravsdaigualdadedecampostrazcomoresultadosomente
osregistrosquepossuemrefernciasnasduastabelas.Observeocomandoabaixo:
SELECTA.CODIGO,A.DESCRICAO,B.DESCRICAO
FROMPROUTOSA,COMPONENTESB
WHEREA.CODIGO=B.CODPRODUTO
Osprodutosquenopossuemcomponentesnososelecionados,casoseja
necessriocriarumalistagemincluindotambmosregistrosquenopossuem
correspondncia,deveseutilizarocomandoJOIN.
COMANDO JOIN
AjunodetabelasnocomandoSELECTtambmpodeserfeitacomocomando
JOIN.EstecomandodeveserutilizadocomapalavrareservadaINNERoucoma
palavraOUTER:
INNER:Semelhanteaousodooperador=najunodetabelas.Aquiosregistros
semcorrespondnciasnosoincludos.Estaclusulaopcionalepodeseromitida
nocomandoJOIN.
OUTER:Osregistrosquenoserelacionamtambmsoexibidos.Nestecaso,
possveldefinirqualtabelaserincludanaseleo,mesmonotendo
correspondncia.
Paraexemplificar,temosastabelasabaixo:
Observeosexemploseoresultadoproduzido:
SELECTA.CODIGO,A.DESCRICAO,B.DESCRICAO,B.QTD
FROMPRODUTOSA
INNERJOINCOMPONENTESB
ON(A.CODIGO=B.CODPRODUTO)
Estecomandopodeserescritonaversoresumidaabaixo:
SELECTA.CODIGO,A.DESCRICAO,B.DESCRICAO
FROMPRODUTOSA
JOINCOMPONENTESB
ON(A.CODIGO=B.CODPRODUTO)
Comomostradonoresultado1,osprodutosquenopossuemcomponentesnoso
includosnaseleo.
SELECTA.CODIGO,A.DESCRICAO,B.DESCRICAO,B.QTDE
FROMPRODUTOSA
LEFTOUTERJOINCOMPONENTESB
ON(A.CODIGO=B.CODPRODUTO)
Nestecomandotodososprodutosseroincludosnaseleo,independentede
possuremumcomponente.ObservequeapalavraLEFTserefereprimeiratabela
dorelacionamento.OmesmocomandopoderiaserdescritocomonaListagem4.
Listagem4.Exemplodapalavraleft
SELECTA.CODIGO,A.DESCRICAO,B.DESCRICAO
FROMCOMPONENTESA
RIGHTOUTERJOINPRODUTOSB
ON(A.CODIGO=B.CODPRODUTO)
Aordemdastabelasfoiinvertidamasoresultadoomesmo.Observemaisalguns
exemplos:
SELECTA.CODIGO,A.DESCRICAO,B.DESCRICAO,B.QTDE
FROMPRODUTOSA
JOINCOMPONENTESB
ON(A.CODIGO=B.CODPRODUTO)
WHEREA.CATEGORIA=1
Agoravejaocdigoqreproduzoresultado4:
SELECTA.CODIGO,A.DESCRICAO,B.DESCRICAO
FROMPRODUTOSAJOINCOMPONENTESB
ON(A.CODIGO=B.CODPRODUTO)
WHEREA.CATEGORIA=1ORA.CATEGORIA=2
ORDERBYA.CATEGORIA,A.DESCRICAO
OUTERJOIN.Nestecaso,todososregistrosdasduastabelasenvolvidassero
exibidos,tendoounorelacionamento.Observe:
UNION
ExisteaindaumasegundaformadejuntartabelascomocomandoSELECT.Atravs
doparmetroUNION,possvelcolarocontedodeduastabelas.Vejaoexemplo:
SELECTCODIGO,NOMEFROMCLIENTES
UNION
SELECTCODIGO.NOMEFROMFUNCIONARIOS
Oresultadodestecomandoalistagemdetodososclientesealistagemdetodosos
funcionrios,dentrodomesmoresultset.ReparequenocomandoJOINunio
horizontalenoUNIONauniovertical.
Pordefault,osregistrosduplicadossoeliminadosnaclusulaUNION.Noexemplo
anterior,setivssemosumclientecomomesmonomeecdigodeumfuncionrio,
apenasoregistrodaprimeiratabelaseriaexibido.Paraincluirtodososregistros,
independentededuplicidade,utilizeapalavraALL:
SELECTCODIGO,NOMEFROMCLIENTES
UNIONALL
SELECTCODIGO,NOMEFROMFUNCIONARIOS
FUNES DE AGRUPAMENTO
Socincoasfunesbsicasdeagrupamento:
AVG:Retornaamdiadocampoespecificado
SELECTAVG(VALOR)FROMPEDIDOS
MIN/MAX/SUM:Respectivamenteretornaomenorvalor,omaioreosomatrio
deumgrupoderegistros:
SELECTMIN(VALOR)FROMPEDIDOS
SELECTMAX(VALOR)FROMPEDIDOS
SELECTAVG(VALOR)FROMPEDIDOS
COUNT:Retornaaquantidadedeitensdaseleo
Umexemplodeusooquepodeservistoabaixo:
SELECTCOUNT(CODIGO)FROMCLIENTES
AGRUPAMENTO
UmpoderosorecursodocomandoSELECToparmetroGROUPYBY.Atravsdele
podemosretornarinformaesagrupadasdeumconjuntoderegistros,estabelecendo
umacondiodeagrupamento.umrecursomuitoutilizadonacriaoderelatrios.
Paraexemplificar,temosastabelasCLIENTESEPEDIDOSaseguir.
SELECTCODCLIENTE,MAX(VALOR)
FROMPEDIDOS
GROUPBYCODCLIENTE
Ocomandoacimaretornaomaiorvalordepedidodecadacliente.Observeo
resultado:
SELECTCODCLIENTE,COUNT(*)
FROMPEDIDOS
GROUPYBYCODCLIENTE
Abaixovemosquantospedidosforamfeitosporcadacliente.
HAVING
AtravsdocomandoHAVINGpodemosfiltraraclusulaGROUPBY.Observeo
comandoabaixo:
SELECTCODCLIENTE,COUNT(*)
FROMPEDIDOS
GROUPYBYCODCLIENTE
HAVINGCOUNT(*)>=2
Somenteosclientescom2oumaispedidosseroselecionados.Reparequeo
HAVINGutilizado,geralmentecomalgumafunodeagrupamento.Parafiltros
normais,podeseutilizarocomandoWHERE.Observeoexemploabaixo:
SELECTCODCLIENTE,COUNT(*)
FROMPEDIDOS
WHEREDATA>06/10/2002
GROUPYBYCODCLIENTE
HAVINGCOUNT(*)>=2
Reparequeoclientenmero3apresentouapenasdoispedidos,vistoqueoprimeiro
nopossuidatamaiorque06/10.
ComesseartigovoltadoaopblicomaisinicianteemSQLconseguimossolucionar
muitasdvidassobrecomoefetuarconsultasusandoocomandoSelect.
Esperoquetenhamgostadoeatoprximoartigo.
PublicadonoCanalBancodedados
porRicardoArrigoni
Bancodedados&BigDataexpert
Ajudenosaevoluir:vocgostoudopost?
(39) (0)
Compartilhe:
Ficoucomalgumadvida?
Postaquisuadvidaoucomentrioquenossaequiperesponderomais
rpidopossvel.
WilsonLeo
Ol,boatarde,precisosabercomobuscarinformaesemumatabelaeaps
executaralgunsclculosinserirasinformaesemoutratabela,nomesmoforme
emtempodeexecuo.EstouusandoSQLcomVB6.Sepudermeajudar,
agradeodesdej.
h4dias
Adicionarumcomentrio...
KevinBortoli
Eugostariadesabercomofaoumapesquisausandoapenasoanode
nascimentodedeterminadaspessoasporexemplo:
Querosaberquaispessoasnasceramnoanode1995.
Porfavormeajudeeuestousemsabercomofazer.
DesdejGrato.
KevinDeBortoli
h+1ms
JoelRodriguesh+1ms
Ol,Kevin.Dependedobancoquevocestejausando,masnoSQLServere
MySQLvocpodeusaroseguinte:
SELECTCOUNT*FROMPESSOASWHEREYEAR(DATA_NASCIMENTO)=1995
NoOracleePostgreSQLvocpodefazeralgodaseguinteforma:
SELECTCOUNT*FROMPESSOASWHEREEXTRACT(YEARFROMDATA_NASCIMENTO)=199
Abrao.
Adicionarumcomentrio...
WallasFaria
Muitobomopost,euestavaprecisandodesseHAVINGenosabiaonome.
h+1ano
[autor]RicardoArrigonih+1ano
FicofelizquetenhateajudadoWallas:)
Adicionarumcomentrio...
ClaudioShigemi
Ol!anoquevemvouteradisciplinadebancodedados!
Gostariadesaberqual(s)livro(s)vocsmerecomendamsobrebancodedados?
Desdejagradeo!
AtenciosamenteCludio!
h+1ano
[autor]RicardoArrigonih+1ano
OlClaudio,eunocostumolermuitoslivrosno,prefirosemprequetenhouma
dvidarecorrerainternet.SugiroqueleiasempreaSQLMagazine,temvrios
artigosmuitolegaisnelahttp://www.devmedia.com.br/revistasqlmagazinee
tambmficarligadonosartigosquepublicamosaquinaDevMedia.Tendoalguma
dvida,postanofrumqueagalerasempreajudaporl.
ClaudioShigemih+1ano
quecomoaindanovinadasobresql!ficadificildeacompanharocontedo
dealgoqueeunosei!
Mas,obrigado!ireidarumaolhadanelassim!
[autor]RicardoArrigonih+1ano
Entendo,paracomearachoqueserialegallerodafamlia"UseaCabea",
existeumdeSQLquemepareceserbemlegal,mascomonochegueialer,
nopossodizercom100%decerteza.:)umpreobememcontaeum
excelentematerialdeapoio.
ClaudioShigemih+1ano
value!voudarumaprocuradapora!paraverseachoele!
Adicionarumcomentrio...
AdrianaSilva
Gosteidasexplicaes,Ricardo!Voajudarmuitonomeutrabalho.Parabnspelo
artigo!
h+1ano
[autor]RicardoArrigonih+1ano
MuitoobrigadopelocomentrioAdriana,ficofelizquetenhasidotilparavoc.
Adicionarumcomentrio...
RubensNeto
Parabns!Artigoescritocombastanteconhecimentodoassuntoemuita
sobriedade.
h+1ano
[autor]RicardoArrigonih+1ano
ObrigadoRubens,ficofelizemajudaraspessoaspassandoopouco
conhecimentoquetenho:)
Adicionarumcomentrio...
AntonioRuotolo
Artigobom,masotextoestcheiodeerrosdeportugus.Issomefazduvidar
dacapacidadedoautor,prejudicaacompreenso.
h+1ano
[autor]RicardoArrigonih+1ano
OpaAntonio,obrigadopeloseucomentrio.Essetipodecrticamuito
importanteparapodermosevoluir.Voudarmaisumarevisadanocontedodo
artigo.
Adicionarumcomentrio...
EzequielDaniel
Muitobom,bemexplicado.Parabns..
h+1ano
[autor]RicardoArrigonih+1ano
Quebomquegostou.:)
Adicionarumcomentrio...
EzequielDaniel
Muitobom,bemexplicado.Parabns..
h+1ano
Adicionarumcomentrio...
Maisposts
Artigo
DevMedia
CurtirPgina
108milcurtidas
2amigoscurtiramisso
HospedagemwebporPorta80WebHosting