Sie sind auf Seite 1von 23

Buscar

favorito(21)

marcarcomolido

tirardvidas

SQL Select: Guia para Iniciantes


Este artigo tem como principal interesse ajudar estudantes que
tenham interesse em trabalhar com banco de dados, aprendendo o
principal comando: SELECT.

(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

FULL OUTER JOIN


PodemosaindacombinarousodeINNEReOUTERatravsdocomandoFULL

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

Corrigindo o problema de usurios rfos no SQL Server


E-Book/Apostila

Guia de Referncia SQL Server para DBAs


E-Book/Apostila

Guia de Referncia Introduo ao SQL Server


E-Book/Apostila

Guia de Referncia Modelagem de Dados


Revista

Revista SQL Magazine 140


Listar mais contedo

Publique | Assine | Faleconosco

DevMedia
CurtirPgina

108milcurtidas

2amigoscurtiramisso

HospedagemwebporPorta80WebHosting