Você está na página 1de 491

O guia amigo do seu cérebro

Use a Cabeça! ( Head First)

.Ajude Greg a
melhorar seus
relacionamentos
com seus dados,
com este livro Carregue importantes
ganhador do conceitos sobre query
prêmio JOLT 200 diretamente para
dentro do seu cérebro

Evite os
embaraçosos
Nunca mais você cenários
irá posicionar de ALTER
forma errada suas
chaves primária e
estrangeira

Coloque seu
conhecimento sobre
Finalmente SQL em cheque com
sinta-se capaz dezenas de exercícios
de explicar
coisas normais
Use a Cabeça! (HeadF""' SQL
Banco de.: Dados/ QL
www.baixebr.org
O que você irá aprender com este livro?
o mundo de hoje, dados é poder, mas o verdadeiro segredo do sucesso
é ter poder obre seus dado . Use a Cabeça SQL leva você ao coração d a
linguagem SQL, da sintaxe básica d as querie , u a ndo I SERT e
SELECT, à dureza da manipulação do banco de d ad os com subque-
ries, joins e transactions. A med ida q ue você ava nça n a leitura,
enLenderá efetiva e eficientemente o p roj eto e a cri ação de banco de
dados, uti lizando queries, normatização e j oin ing. Você será então o
verdadeiro mestre dos seus dados!

s.,•• o 3"( I•~ co"' 3"( ""'


op(r•tlol' s!j• (Sf>(CJ-.1.

b(scv•r• •s k~:C.-.s
tlu ~~'•j~S ""'t.ff-
hkl•.
........ .._
-

Por que este livro parece tão diferente?


Nó acreditamos que seu tempo é muito valioso para ·er desperdiçado.
Tendo como base a última pesquisa em neurobiologia, ciência cognitiva
c teoria do aprend izado, Use a Cabeça SQL tem um visual r ico, proj etado
na forma como seu cérebro fu nciona; não se trata de uma abordagem
pesada que faz com que você caia em sono profundo.

ALTA BOOKS
& O ITO l A

Rua Viúva Claudio, 291 - Jacaré


Rio de Janeiro CEP 20970-031
Tel: 21 3278-8069/ Fax 3277-1253
www.altabooks.com.br
altabooks@altabooks.com.br O'REILLY•
Elogios a outros livros da série Use a Cabeça
"Eu acabei de ler ll~r a Cabc~·a OOA&D c amei o li\To! O que mai~ gostei neste li\To foi o íoco no
porquê de uúlÍ7ÂllllO~ 001\&D - para fazer ótimo~ prog-rama~."
- Kyle Brown, Engenheiro conceituado, mM.

"Eu decorei l '1oe a Cahe(a HT:\IL com CSS & XH TM L - ele emina tudo o que ,·ocê precisa ~aher com
um formato di\'ertido de cita(ôl'' ".
- Sally Applin, Designer e Artista da UI, http:j jsally.com

Elogios para a abordagem de Use a Cabeça


"E rápido, im~\'erente, di\'c1tirlo e cmpolg;mte. Cuidado! Pode ser que vorê realmente aprenda alg11ma c<>il>a".
- Ken Arnold, Ex-Engenheiro Chefe da Sun Microsystems
Co-autor (junto com James Gosling de Java), Tbe Java Progranuning
Language

"Eu senú como ~e I 000 quilo' de liwo), arabas~cm de :.er levantados ele rima da minha eabe~·a. •·
- Ward Cunningham, Inventor da Wiki e fundador do Grupo Hillside.

"E.\te li\TO é o mais próximo da perlê.:içiio, tendo em \'Í),ta a mm1eim como combina técnic·a c facilicladc ele
leitura. E.lc lida com autoridade e a leitura é linda",
-David Galernter, Professor de Ciências da Computação, Universidade
Yale.

"Este é o rom exato p;mt o g1u·u da pro~:,rr;umtç-ào nerd-cxtrovc.:rtido, clewolado-caMtal que existe em todo-.
nó~. ~: a referência certa p;mt a' estratégia:. prá6ca:. ele clesen\'olvimcuto. Acekra llll' tt cérebro sem ter qut·
I<L~tcjar pelo di~curso can\aclo e enfcn·ltiado da aula de um profeswr".

- Travis Kalanick, Fundador da Scour and Red Swoosh e membro da MIT


TRlOO

"A combinação do humor, ilttstrac,·::-to, batntS latcrai~ e redundância, com uma abonlagent lówra para
apre;enl;u· o~ comando~ hft,in); e exemplos ~ubst<mciais de como usá-lo~ far;i, cspe•~uu;o),;unentc. com
que os lcitOI'C\ se prend;un de tal forma qw.: ele), nem pcrcebatll que c~tào aprendendo por c:-tarcm ~c
di,·ertindo tamo".
- Stephen Chapman, Fellgall.com
www.baixebr.org
Elogios de Especialistas para Use a Cabeça SQL
~J.,t,tt.·m MIUde~ lino!> que \'O<'t' compn1, liHo~ que n>Cê gu;u-cla, linm qm: H){'ê deixa na sua nwsa, t.
;1 eqUipt: do l'1oc a cahc~·a, ha uma penúhima ratcg01ia. os h\l'o' da série l'se a Cahe~·a. Ele-. 'ão o'
s.:ra~·a, ...
hn m com orelha!>, u:.ados c t·a•• t'!f<Him p;u-;1 todo!> os laclm. l rse a Cabeça SQL está no topo ela miuha
pilha. Pu\a, ale a versão PDF que h'lltlrdo para reyisão cst;í ga!>IO de tauto uso".
- Bill Sawyer, Gerente de currículos, Oracle

~Lstl' hHo não t' 'obre tomar <iQL t;·,ril, 111.1' tomiÍ-Io de,afiadm, tu ma-lo mtcre!>'iulle. torna-lo di\ e1tido.
h 'o ate.: rcsp<mdc aquela pergunta ;mtu;.t Tomo cminar com.uha' nito rdacionad~ !>em pcnk·r a \ontadc
ck \i\ CI :>' Lsta c a fom1a nmt·ta dt· aprt.·mler - é fácil, c \ibrantc, t.' tem uma aparência innwd...
- Andrew Cnmming, Autor de SQ.L Hacks, mantenedor do sqlzoo.net

"Fa,ómmtt'l Quero dizer, SQL c uma lillh'tlagem de computador, n·rtoi1 Logo, lh1·os sobre SQL dcvnümt
tt
st·r l'MTitm para computaclorc,, ttiio adta:> l fse a Cahc~·a é oll\·imllt'ttll' e~crito para scrc!> hunuttto~>! Como
é <Jlll' 1'(0 é JlOSSJ\'cl?"
- Dan Tow, autor de SQL Tuning

I'

11

A série Use a Cabeça

v ......... VMaCia'be9al

.Aná.llse e Projeto Servlets & JSP


Orientado ao Objeto
a

%_-=
g

Use a Cabeça Java 2a Ed. Use 1 Cabeça Anêllaa e Projeto Use a Cabeça Padr6es do Use a Cabeça Servleta
Kethy Stllrra e Bllrt Bates Ortontado ao Objeto Projetos 2a Ed. &JPS
496 pgs McLsughlm, Polllc. & Wast Fte6msn e Fte6mon Bss/tam. Stllrra e & res
FomlliiO 21x28cm 472 pgs 496 pgs S1Spgs
ISBN 978-8>7608-173-9 Formato 21x28cm Formato 21K28cm Formato 21x28cm
ISBN 978-85-7608-145-6 ISBN 978-85-7608-174-8 ISBN 8>76()8.()85-0

...........com CS8
v ... ea,.,....

r-
I!IXHTML
:=::;:
-
-
Vae a cabeça Eatatílltica
Use a Cabeça l!IJll
- Vae a cabeça O#
- V se a cabeça JavaScript
- Vae a cabeça J'iaica
- vae a cabeça Procraman4o
- Vae a cabeça Duenvolvimenw
de Software
UM 1 Cabeça PMP, 2" Ed. UM 1 Cabeça (lnlcla~o Rjpida) UM a Cabeça HTML com
G-eSteilmen Ajax 2a Ed CSS&XHTML - 11ae a cabeça Ajax
624 pgs Bnttr McLsughtm Fte6man e Fte6mon
- Vae a cabeça Servleta & JSP
Fonnato 21x28cm 344 pgs 504 pgs
ISBN 978-85-7608-309-2 Formato 21x28cm Formato 21K28cm
ISBN 978-85·7608·193-7 ISBN 8>7608·10>9
Elogios a outros livros da série Use a Cabeça

• A admirán:l clareza. humor e do~<.:s subwmciais de esperteza tomam e:. te o tipo de liVTo ()UC ajuda mc~mo a() nele!. qut·
não são programadores a pensar :.obre solu~·ão de problemas".

- Cory Doctorow, Co-editor de Boing Boing


Autor de Down and out in the Magic Kingdom (Triste e Cabisbaixo no Reino da
Fantasia) e Someone Comes to Town, Someone Leaves Town (Alguém Vem até a
Cidade, Outro Alguém Sai)

"Se voce pensou ()ue . \j;Lx era ciência de loguett•:., c~te li\TO é pra você. H ead Rush Ajax o coloca diver~a~ experiência~
dini'm1ica:. e tocantes c!t:nlro da realidade de cada progTcunador em web".

- Jesse James Garret, Caminho Adaptado.

'"Eu recebi o li\TO ontem c comecei a lê-lo... e n~to con~egui parar. f.~te é, com certez..'l. um livro muito legal. t diwr1ido,
ma& ele~ aborchm1 diversas áreas e vão d ireto ao assunto. Estou realmente impressionado".

- Eric Gamma, Engenheiro conceituado e co-autor de Padrões de Design.

"l:se a Cabeça P adrôcs de Desigu t·ou!.eguiu uma criar uma mistura ele diversão, gargalhadas. proftmdidadc de contcudo
c h'l·cu1de~ con~elhos práúcos em uma leitura d ivertida e instigante. Quiçá mcê ~cja novo em padrõc1> de dcsigu ou a.\ tem
UJ>ado por ;mos, com ccrtcta. aprender;í alj.{Uma t·oisa se 'isitar Vila do Objeto''.

- Richard Helm, Co-autor de Padrões de design.

"Pm clm mai!> Li\Tos rnai' intdígenks e engraçadoi> sobre dc~ign dt' solhvm·c que cu já li".

- Aaron LaBerge, Vice-Presidente de Tecnologia, ESPN .com


Use a Cabeça SQL

Não seria um sonho se existisse um


livro que pudesse me ensinar SQL sem
que me desse vontade de querer mudar
para uma ilha deserta do Pacífico onde não
existam bancos de dados? Provavelmente

Iõmn Beighley

ALTA BOOKS
EDITORA
Rio de Janeiro. 2010
Use a Cabeça! (Head Fi rst) SQL

Do onginal Head First SQL Copyright © 2008 da Editora Alta Books Ltda.
Authorized translation from English language edition, entitled Head First SQL, ISBN 0-596-52684-9, by Lyn Beighley,
published by O'Reilly Media, Inc. Copyright © 2007 by O'Reilly Media, In ..
PORTUGUESE language edition published by Editora Alta Books, Copyright © 2008 by Editora Alta Books.

Todos os direitos reservados e protegidos pela Lei 5988 de 14/12/73. Nenhuma parte deste livro, sem autorização prévia
por escrito da editora, poderá ser reproduzida ou transmitida sejam quais forem os meios empregados: eletrônico.
mecânico, fotográfico, gravação ou quaisquer outros. Todo o esforço foi feito para fornecer a mais completa e adequada
informação, contudo a editora e o(s) autor(es) não assumem responsabilidade pelos resultados e usos da informação
fornecida. Recomendamos aos leitores testar a informação, bem como tomar todos os cuidados necessários (como o
backup), antes da efetiva utilização. Este livro não contém CO-ROM, disquete ou qualquer outra mídia.

Erratas e atualizações: Sempre nos esforçamos para entregar a você, leitor, um livro livre de erros técnicos ou de
conteúdo; porém, nem sempre isso é conseguido, seja por motivo de alteração de software, interpretação ou mesmo
quando alguns deslizes constam na versão original de alguns livros que traduzimos. Sendo assim, criamos em nosso
site, www.altabooks.com.br, a seção Erratas, onde relataremos, com a devida correção, qualquer erro encontrado em
nossos livros.

Avisos e Renúncia de Direitos: Este livro é vendido como está , sem garantia de qualquer tipo, seja expressa ou
tmplicita.

Marcas Registradas: Todos os termos mencionados e reconhecidos como Marca Registrada e/ou comercial são de
responsabilidade de seus proprietários. A Editora informa não estar associada a nenhum produto e/ou fornecedor
apresentado no livro. No decorrer da obra, imagens, nomes de produtos e fabricantes podem ter sido utilizados, e desde já
a Editora informa que o uso é apenas ilustrativo e/ou educativo, não visando ao lucro, favorecimento ou desmerecimento
do produto/fabricante.

Produção Editorial: Editora Alta Books


Coordenação Editorial: Thalita Aragão Ramalho
Tradução: leopoldino Machado
Revisão: Romulo l eite da Cunha
Revisão Técnica: Anderson Bastos e Ivan Mecenas
Diagramação : Renan Salgado
2' Reimpressão 201 O

Impresso no Brasil

O código de propriedade intelectual de 1° de Julho de 1992 proíbe expressamente o uso coletivo sem autorização dos
detentores do direito autoral da obra, bem como a cópia ilegal do original. Esta prática generalizada nos estabelecimentos
de ensino, provoca uma brutal baixa nas vendas dos livros a ponto de impossibilitar os autores de criarem novas
obras.

ALTA BOOKS
lDITOR.\

Rua \'hh o Claudio, 291 -.Jacar é


Rio de Jnnelro - RJ
CEP: 20020-100
Tel: 21 3278-11069/ Fa<: J277-12SJ
www. all!tbOO~.cum.br,
~-mall: nllshook~ru nllabooks.com.br
Para o nosso mundo, em um mar de dados.
E para você, que quer rcimu· sobre este mar.
Autora de Use a Cabeça SQL

Lynn é uma c~critora dt· fin;iio t'm lllH corpo de t'~critora de livro
técnico .. \pó-, descobrir que t'StTe\Tr liwos técnicos n:nde um bom
dinheiro. ela aprt'ndeu a act'Íiar e-,te fato t' a gostar disso.
,\pós \'ohar para a escola c conseguir seu mestrado em ciências da
compulac;ito, da trabalhou para as !>igla~ ~ RL e LA ::o\L. Ent;'u) ela
conh<.'t'cr o Flash c escre\'cu seu primeiro best-scller.
/f vrsh J•j•,t 1•
l 'ma vítima da hora errada, ela mudou-se do Vale de Silício um Jf! '-J""·
pouco <mtes da quebradeira. Ela passou \'ários <mos trabalh;mdo
para o Yahoo! e e\cre,·cndo outros livros e cursos de trcimuncnlo.
Finalmente se entre~-:-:mdo ao seu lado criativo de escritora, da mudou-
se para ~O\'a York para comcguir um ~l FA (lórmac;ào para escritores)
em esnita criat.i,·a.
Sua primeira lese em estilo ( 'se a Cabec;a foi exposta em uma ~ala
lotada de profe1.sores e colcg;L' estudantes. A tese foi extremamente
bem recebida e Lynn concluiu seu p1imeiro nH:su·ado, terminou o
h\'ro l ' M.' a Cabe<;a SQL c nào ,.ê a hora de come~·ar a estTC\'Cr seu
próX-imo li\'l·o.
Lynn ama 'i<~jar. co.1.inl•ar c im·t'nt;u· estórias bem elaboradas ~obre
pc>s<><L'> desconhecida~>. Ela tem um pouco de medo de pa ll ~<l\'<>~.
sumário

intl1ce (Sumá.t'l9)
lntro \\\

Dado~ L' Tabela~: lm lu~rar pa1<1 çada roisa


O comando SELECT: Abcnc;oaclo rc~tauraclor dl· dado~ 17
DELI-:TE c l 'PD,\TE: lfma muuança t;tr.i bem a locl- !17
Pmjl'lm de Tabelas i•rtcligenles: Por que :-.er normal:' 1a.~

.) AI TER: lkc~crevendo o p;~~ado l.i!l


(i SELECI' amnc;aclo: \'c r os seus dadm com noms olhos IH7
7 Prqjeto ele Banco de dado, nmhi-tahclas: Povoando sua tabela '227
X Conc:o;ôcs e Opcra~·ôcs de multi-tabelas: ;\/;lo podemos todos nns entender:' '277
Cj Suhcomultas: Corhuhao, (kntro de Com.uha.,
lO Com"\Ões e:.. lema'>, intraconexôes e uniôes: l\'01 as manohr~1s
II Con,trainls, I'Íell s c tmmactiou~: Cotinh;~r clcm;LÍs pode estra~ç,u o banco de dados
1'2 Sej.\uram:a: protegendo 'lla' riquc;,a, Wl

lntro
Seu cérebro em SQL. Aqui está você, tentando aprender alguma
coisa, enquanto aqui seu cérebro está fazendo um favor certificando-se de que o

aprendizado não se fixe. Seu cérebro está pensando:"Melhor deixar mais espaço

para coisas mais importantes, tipo qual animal selvagem deve-se evitar e em
quais situações esquiar nu é uma má idéia. Então como você despista seu cérebro
fazendo ele pensar que sua vida depende de saber SQL?"

Para quem é ('ssc liln>:'


Saht·mos o que 1-ocê está pcns;urdo X X\1

:-.1cta('O,L,"ni(;ro: Pen;,;mdn sohrt• o pc.:lhar \\1\

C'ur\'c o seu rérc.:hro à suhmi;,sào \XXI

Leia-me " \ \11

O time de rolaho1~\~·ão lél'llita \\\111

Al,'l'itckci mt'llllh \\\1\

IX
sumário

dad9s e tabelas
Um lugar para cada coisa

1
Você simplesmente não odeia perder as coisas?
Seja a chave do seu carro, ou aquele cupom de 25% de desconto da
sua loja de departamentos preferida, ou os dados de seus aplicativos,
não há nada pior que não poder guardar aquilo que você precisa...
quando você precisa. E quando o assunto é seus aplicativos, não há
lugar melhor para armazenar informações importantes do que uma
tabela. Entao vire a página. entre, e viaje pelo mundo dos bancos de
dados relacionais.

Ddinindo '-t'U' d<tdo' :!


( )lht> para seu' d<tdm cm l'iltegona' h

() que fira t:m um hanro de d;uJo,:1 7


11
Seu banco de dado, vi,to alra\1~~ dl.' uma 1 l';io raiO·\...

Banco' dt' clacl1h collll'lll dado' intcd•~;ulo, li


\·.,,·.o <.lt> l~llo: l';1l>t.·l;" I~

rornc o n>manclo! Ib
l'lq>ar;mclo a tahda: o nunanclo CHie.\ rl I \Bl.L IH

Cn;mdo uma tahda um pouro mai, l'omphr<tda 19

Vt'ja t·omo (· latilc,nl'l'cr t'm SQL 20


hnalmentc. rnando a 1;1hda meu<._rontato' ~I

'lua tabela e'ta Jlllllll<t 2~

Pn<mlbul;mdo pm ;u 1:~

'iua tabela DI·.)Cnta 'lh


\ 'oc(· não potk liTI Ial uma lahda ou han!'o ck daclmj:i t::\1\ll'llll'! :lH
For.t 1 nm a tabela ;ulll)(<t, pra clcmro !'0111 a 1111\a :211

l'ar.t in,crir dadm na tahda. 1ocê u,ara o n>m;uulo 1\~ERT :~1

Cn;mdo o wmando "'lLHT :~:{

\ <ll1aç<X:, par.• u nuu.uuln 1:'\SERT :li

Coluna.' 'em valo1c' :u~

l!:.'pic \lia tahcla rom o !'on1;u1do SEI.U I' :N


SQI. npo,tn 10
Contrnl;mdn 'cu '\ I '1 L mll'lior 111
'\OT '\ll.l ap;ul·n· em Dl~'IC I~

l'll.TilCha u ... l'\pa~·o, l'lll branrn l'lllll DL!· \I I I n


Sua cai\a de ft' ITallll'lll:t SQL II

X
sumário

o c9mand9 SELECr
Abençoado restaurador de dados

2 Fala sério, é melhor dar do que restaurar?


assunto é bancos de dados. as chances são de que você terá que dar os
Quando o

seus dados na mesma freqüência que as insere. É aí que este capitulo entra:
você conhecerá o poderoso comando SELECT e aprender como ganhar
acesso àquela importante informação que tem inserido nas tabelas. E ainda
vai aprender como usar WHERE, ANO e OR para acessar suas tabelas e
ainda evitar a exibição de dados de que não precisa.

Marcar ou não mm·t<lr um encontro:• ~R

l lm SELECT melhor .íO


Que • é esta!' .) I
Como liv:er con~ulta; no> ;cu> tipo~ de dado:. .'ili
Mais problemas de pontua<;~to .íG
A'pas simpks incompatí,·cis .17
A:.pa; simples são c;u·actercs esptciai.., 58
1:"\SERT (Insira) dados com aspa.'> ~impk, nele :í9
SELECT (~clt:cionar) colunas específica; para limitar o., re.,uhacJo.-. 63
SELEC~r (!.elccionc) coluna' cspccílit<L' pm<l re>ultados ma.is rápidm Wl
Combinando sua~ consulta~ li?
Encontrando valores numérico., 70
Operadore; de comparação >C~ ma.' 7'2
EncontraJI(Io dados numéricos com opcradorc'> de comparaç·ào 7~
Amarrando o~ dado> em lC.\ lo com Operadore; de Comparaçiio 77
Ser OR (ou) não ser 78
A difcnmça entre AND c OH 1-10
lhando IS Nl ' LL para enconu-ar Nl' LL 82
1-Á·onomi;_.,ndo tempo com uma simplc; pal;l\'ld·dlavc: LIKE ~H

O chamado do Coringa R~
Sekriomu1do ak;mcc usando ANO c opc:r;ulurc:~ de comparação H7
Bem BETWI::EN (entre) nós ... há um jeito melhor 87
Depois dos ennmLro~. mcê c;lá IN... l-\9
...ou você cMá , OT IN 89
Mais ;"1/0T 90
Sua caixa de IC1Tamenta SQL 9I

XI
sumário

DELETE e VPDAJE
3 Uma mudança fará bem a você
Você muda de opinião constantemente? Agora está
tudo bem! Com os comandos que você está prestes a conhecer- DELETE
e UPDATE - você não mais precisará ficar preso a uma decisão que tomou há
seis meses atrás, quando inseriu dados dizendo que calça boca-de-sino logo
estaria de volta à moda. Com UPDATE, você pode mudar os dados, e DELETE
permite eliminar os dados que não precisar mais. Mas não estamos apenas
lhe dando as ferramentas; neste capitulo, você aprenderá a ser mais seleto com
seus novos poderes e a evitar que suma com arquivos que realmente precise.

Palha~·m ~;io a~SU\tadort·~:· CJH

Haslreador de palhaço'
{» pall•a~·o, l'stào em 11101 lllWIIlo 100
Como m. nossm, dados de palhaços são in~eridos:• !OI
Bonm, nó' temos um problema IO.i
Elimin<u•do um rt:I;Ístro com DELETE IOii
l 'sando 11oss;a nma 111s1ru~·ão DELETE 107

Ht•t,"'"' do D ELF.TE !OH


( >s dois p<t\sos do I ~SEHT <.: DELETL 111
Cuidado com o Sl'll DELETE llli
O problema com DELETE imprl'CÍ'>O I I !I
Altere seus dadm rom I 'PD,\TE 1~0

Regras do l PD. \TE 1~1

l ' PD.\ TE t.' o nmo 1:'\SEHT-DELETl·


l 'PDATE <.:m a~·ão 1~:~

:\lli<tlizando m mmim<.:nlo\ dos palhaços 121


l 1PI)i\TE (atuali;c} seu' p1-c~·os

Tudo o que prcci,amo'> t.' um l 'PD.\Tl


Sua GlÍ\ll ele rerrallll'lllil S(JL

XII
sumário

ft9jet9s de Tabelas Ínteli_gentes


Por que ser normal?

4 Você tem criado tabelas sem dar muita atenção


a elas. Tudo bem quanto a isso, elas funcionam. Você pode usar o
SELECT, INSERT, DELETE e UPDATE nelas. Mas, à medida que você
insere mais dados, começa a ver coisas que vai desejar ter feito para
que a sua cláusula WHERE fosse mais simples. Você precisa é fazer
suas tabelas mais normais.

Dua, tahd;a, de llt''\~tclore' 1'1 1


l lllilliiiKI;t(l'lllllldO a \lT l'Oill ll'l,tliOil,lflll'lllth, lati

Dadm ;at(nmrm 1'111

Rl•ga;l, do d;ulo' atômico' I IJ

H:vút'' p;aaa 'l't nomtal I 1:1


O hcnd~rto de talx:l;" noamai' I li

\kt.tdl do t·;umnho p<u<t I'\ F I Ht

Hl'l,'lih d.t ( 11.\\ L PRI\1.\RI \ I Ih


Ftt<tudo 'OR\1.\L IIH
('onwa t;mdo a tahd<t do Grl't.: I IH
O mm;utdo ('lU:.. \TE T ,\BLI-. qlll' uo' l'\Ul'll.'llln' I 111
tabela
1\lmlll'·JIIl' o !~> !.)()
Contaudn para eronomia de tentpo l.iO
O CIU.H\1 L: '1.\BLE wm um;t (li\\ I I' lU \I.\ RI.\ I.i I
I. 1. { ...• ullo iun l'lltelllilllclo l.i2
\dtnou;uulo um<t (li.\\ ~. PIU \1.\IU \ " um.t t<~IX'I<t e\.t,teme I ~.i
\1 II·.H I \BI.I .l· adtl'ionar uma PHI\1 \H\ 1\.L\ l.ih
Espere um segundo Jd tenho uma lobeJo ehe.oo de
dados Va<i nclo pode UIC1' I"C4lmen!t querendo ~llilloiÍ\.1 dt krr.tmenta SQL l.i7
que w use o c.-.do DRoP T1181.€ como foz no
o ccpítufo l e d•g•te• todos aque.lu dedos ooVOtMnte,
apenas poro CI'IOI' umo chove pnm6r10 poro codo
dado gravado

XIII
sumário

ALTER
Reescreven do o passado

5 Você gostaria corrigir os erros do seu passado?


é sua chance. Apenas usando o comando ALTER, você pode aplicar a todas as
Bem, agora

lições que tem aprendido sobre as tabelas que criou há dias, meses e até anos
atrás. Melhor ainda, você pode fazer isso sem alterar seus dados. No momento que
tiver passado por aqui, você saberá o que o normal realmente significa, e estará
apto a aplicar isso em todas as suas tabelas, passadas ou presentes.

J()()
\Jú~ precisamos 1;1/l'l •tl).,'lllll<L' mudanças
,\Iterações de tólhd;ts J() 1

tnt01l <k t<~hda.s J(~j


lkcon~tru~·ào
J(~j
Rcnome;mdo a l<thd"
:'\ós prcó;.amm latt'l ai).,'UII' plancjmnentm 1{)7

lkiusU1tmcntalit.ando nos,<ts c.:oluna.o., lli7


~luda11~·as estruturais WH
.\LTER e CJ-1.\:\Cl· !liH
•\Itere dua., coluua' t·mu apc.~nas um <·om.mdo ~QL I@

ltapido! Lar),'lll' l'sla rolun01! tn


I Im olhar de pt·tto para a coluna n;io-a!ónu('a "lol'al" 177
Pr<x·un· por padri>t's 17H
t\IJ.,'ltmas fun~·ôc.:' dt• tc\to muito úteis I iH

( uli;c uma coluua <llual p<U<t preenche• uma nma coluna !IH
Como funciona lllh\0 tombo l 'PD.\TL. I SI r.' 1H2

Su.t caixa de femum·nta SQI. PH

XIV
sumário

SELECravançad9
Vendo sua tabela com novos olhos

6 É hora de incrementar a sua caixa de ferramentas com


um pouco de fi nesse. Você já sabe como utilizar as cláusulas WHERE
e o comando SELECT. Mas, às vezes, precisa de mais exatidão que o SELECT
e o PROVI DE oferece. Neste capítulo, você aprenderá como ordenar e agrupar
seus dados, bem como realizar operações matemáticas nos seus resultados.

Dataville Vídeo está se reorganizando IHH


Problema' t·onr no,,a tabela at11al f H9
Combinando dados existentes 190
Povoando ~ua nova coluna I!JO
UPD ATE com uma e:...pres,ào CASE 19:~

Parece que temo' um problema 195


~~ tabelas podem lic;u· hem hal,"lrnçada.~ f9!J
Nós precisamos de uma maneira ck Off.,'<lnizar os dado;, que selccionaJllO> 200
Tente um simpb ORDER RY 20:1
ORDER (Ordcnc) uma sô coluna 20 ~
ORDEH com duaJ> coluna~ 207
ORDER com colunas múltiplas 207
l lm;r tahela_filme orJ,f.Ulií'A1da 209
lrwer1a o comando O HDEH com DESC 210
O problema da líder de \'endas de bi~coitos da Bandeirantes 212
SlTM pode somá-las par<~ nós. 211
SI IM (some) todas de uma vez com CHOl 'P BY 215
A \'C combinada com GROl ' l' BY 216
~ IIN e MAX 2f7
COUNT (conte) os dia' 217
SF.LEtvr DI~'TT 1C1' (>elecionc difereules) v.-..lores 2f9
LIMIT (limite} o número de resultados 221
Ll:\IIT (limite) apcnaJ> para a ~cgtmda colocada 222
Sua e<úxa de ferramenta SQL 221

XV
sumário

ft9jet9 de bqnc9s de da.d9s multl-ta.bela.s


Povoando sua tabela

1 Às vezes sua tabela única já não é grande o bastante.


Seus dados se tornaram mais complexos, e aquela tabela única que você tem
utilizado, já não vai mais servir. Sua tabela é cheia de dados redundantes,
gastando espaço e reduzindo a velocidade de suas consultas. Você já foi o mais
longe que podia com uma tabela só. Há um mundo grande lá fora e, às vezes, é
preciso mais de uma tabela para conter dados, controlar e, principalmente, ser
o mestre de seu próprio banco de dados.

Encontrando uma n<Ullorada p;u~t :\'igd \12X


Tudo foi em \ào ...... \(ao, e~pere 2:-17
l'en~c: al(·l11 da tabela únin1 2:-l!\
U h;uKo de dado~ 1astrc:ador de palha<;o'> de múltipla, tahc:l;b 2:-l!l
O C:Mflll.'ma do h;mto de dados ra'>tTeador_palilaro 2W
Como ir dc: uma tahc:la para <lua' 2 II
Cmtect;uldn >Ua~ tahda' 21:-l
lk~uin~,rindo sua chm e c:xtt·ma 21ti
l'or quc '>1.' impo1iar com chaH'' t:\ll<tn~c:Ítot:• 21ti
CRL\TE u1na tahl.'la com um<t CIL\ \ 'E F.STit \~GI·:uv. 'll-7

lklaciommlento> cntre tahda'


Padrôc:~ de dado>: um-a-um
l'adrõc:' de rladm: quando U'<U' tabela> 11111-a-um 'l.iO
.... . fh!W.... od-
........_......... I

_-
-t+ ld~ I Patlrúc> de dado>: um-p;u~t-muito> 150
1........._.. I ............. I 2:il
Padtút'' de dado': du:gando au muitos-para-muito'>
.... Padrtl(''> ele dado': nó> precisamo' dc: uma .JUIItllou tahlc:
id- ~
Padri>t•, de da1lo'>: muitm.-p;u~l-lllUito' 1.i I
....
......_ ,... _ _fi-"'-lo<al- :l.íX
........ Finahnctllt' I NF

-
l-lo id~
I Cita\'!.:> c-ompo,l<L' utili/.;un múltipla.-. colum"
id_lo<ol~
r """ 1 21i0
:\ota' dt! ;~talho

Dc:pcnclí'·ncia Funcional Parcial


Dcpc:ttdência Funriomtl Tramitória
Segunda F01111a i'\1>nnal
Tctceira Forma N01mal (linalnu:ntc) 270
E. cntáo, Regis k ,_,.,·c~~_li,l) \i\'ct<un ICJi;c, par;~ t-t:mpre 27'2

Sua caix<~ de ferramenta SQL 273

XVI
sumário

C9nex9es e 9petaç-9es de multi-tabelas


Não podemos todos nos entender?

8 Bem-vindos a um mundo multi-tabela. É ótimo ter mais de uma tabela em


seu banco de dados, mas você terá algumas novas técnicas e ferramentas para trabalhar
com elas. Com as múltiplas tabelas vem também confusão, então precisará de aliases
(apelidos) para manter sua tabela correta. E conexões ajudam você a juntar tabelas, para
que possa pegar todos os dados que espalhou. Prepare-se, é hora de tomar o controle do
seu banco de dados novamente.

Ainda rcpct.indo, rcpct.imlo ... 2/H


Pré-pm-oando su;t, tabt:fa, 27~)

Nô' tocamm o "unha .. c:,ta tabela não é fácil de: norm;uiüu·" 2Rl
(h inlc:rc,,c~ c'pc:ciai' (coluna) 2RJ
1\lantcnha-'c intcrc"ado 2R2
l 1PD,\TE todo, ~eu' intcre,,c, 2R:1
1\:g;mdo todo> o' inlcrc>'c' 2HI
Muitos c;uninho> para um 'ó lug<u· 2H.>
C REATE, SELEC.T, e Ii'\SERT a (qua,c) o mc,mo lt'mpo 2H.I
CRE.. \TE. SELEC.T c INSEHT ao mc,nao tempo. 2RG
O que: há com c>~c AS:' 2Rii
J>,cudônimo' de coluna 2R7
P,cudtmiuw' de tabela,, quem prcá,a dele,:• 2RR
Tudo o que você g<»taria de 'ahcr M>hrc concxôc' interna' 2RH
Conexão c;u1csi;ma 2R9
Lihl'r<mdo 'ua concx;-to interna 29:-l
A conexão intema em a~·ão: a equijoin 29:{
A conexão interna e na a~·ào: a nào-cquijoin 291i
A últ.ima conexão in tema: a conexào natural 2!JR
Consulta' conectadas:• :1oa
l''cudônimos de Colunas c Tabelas Re,cJados aot
Sua caixa de lerrament<L~ SQL :{0,)

XVII
sumário

Subc~msultas

Consu ltas dentro de consu ltas

9 Sim, Jack, eu gostaria de uma pergunta de duas partes,


por favor. Conexões são ótimas, mas às vezes você precisa perguntar ao seu
banco de dados mais que uma pergunta Ou pegar o resultado de uma consulta e
usà-lo como entrada para outra consulta. ~ai que as subconsultas entram. Elas
irão ajudar a evitar dados duplicados, fazer suas consultas ma1s dinâmicas, e ainda
fazer com que você tenha acesso aos concertos carissimos depois da festa. (Bem,
na verdade não, mas duas de três coisas jà não é nada mal!)

Grcg l'lllJ<tuo ncgúno de l'l'nlll<unent o lahm••l


li,tlica com mai' 1ahá1' i\09
,\ J.,'l'CI\'
.{ )
Grcg uuluA uma c·ont·\ào mtt·nm
:\[a, ell· qut-rll'lll<ll .1lguma\ ou11a' con,ufi,J, :m
Suht·omufta , aL
'\o, t·omhmamo ' ,J, dua, l'll1 uma COII\IIha <om um.1 'ubnllhllh<t
Como \t' 11111a comultajá niio lo,,c o ha,lanll', •onht·~o·a a 'uhcoll\llll.l
l' ma ,u)K<>I1'uha t'111 ação
Hegra' )Mia 'nhnm,ulta ,
Rq.:ra' para ~uh('()muh;L' :~ 18

l 'm a('ompa11hamu1to na ('011\llll(,'ào de 11111.1 'ul><:o11'11lta ;{)

I ma ,uhnm,uh•• <·omo uma rohma no <·oma11do ~L u :cr :i~

Outm t'\t'mplo: Suhcon>tJIIa ('0111 uma <'OI1l'\<"to IMllll <li :~2.

l ' 11M t'Oihlllta nào-nmTian oiMda :~~~

l ' ma \uhro11~ulta na<H'OITl'l;u·ionatla wm multiplo' \;tlmc': 1:\, '\0 I 1:\ :!:ti

SuhcOJI\ltlta\ l'OITl'ial'ionatla' a.~2

·~ .
I ' n1<1 'uht·on.,ulta <·om:lacion•ul.• Cútil) rom :\ OT I \I 'I l"i
EXISTS c NOT I.X I ST~ ;{:-!.f.
.\ ClllJlll''a de Ca·g p;u;t \l'l' 1(,'0' de rnnllamcnt o t•,tá .Jlx:rta p;u;1 nc:góóo,. :t{l

•\o canunho da f(. ,1,1 :nJ

XVIII
sumário

C9nex9es externas, int:tél.C9nex9es e uni9es


Novas manobras

1o Você só sabe metade da história sobre conexões.


conexões cruzadas que retornam todas as linhas possíveis e consultas internas que
retornam valores de ambas as tabelas onde há uma combinação. Mas o que ainda não
as consultas externas que retornam as linhas que não possuem duplicatas compatíveis
você já viu

na outra tabela, intraconexão que (por mais estranho que pareça) conecta uma só
tabela a ela mesma, e uniões que combinam resultados de consultas. Uma vez que
tenha aprendido esses truques, você será capaz de acessar todos os seus dados
exatamente da forma que precisar (e nós não esquecemos sobre expor a verdade sobre
30H subconsultas!)
ao~> Limpando os dados anü~to'
3 10 I~ uma quc;tão de c'querda c direita
:·\11 Aqui c;tá uma conexão externa c'qucrda
3 12 Conc:xôes externa> c comhimt~·ôe> múltipla;
:1 1 ~ Cont•xào externa direita
31.5 Enquanto \'od' c>lal<l conn·tando extt>m;u11ente...
:31.í Nó> poderíamos c1iar uma nova tabel<t
Como a nol'a tahda 'c ent<ti xa
I 1m a chave ntema auto-referenciada
CC"J6S t/6 Conecte uma tabela a ela mc,ma
t-.,.rt!o_
:-.Jó., prcci>amos de uma autoeoncxào (SELF-JOI:\')
tlts!jclio
Outra forma de obter infc>nlla(ôe> muhi-tahcla.,
Você pode utilizar uma 1':-.JION (I ' NIÀO) 3.í I
l 'NIOt'\ é limitado a.).;
Hc:1,"'L' do t lN IO N em a~·iio
lTNIO:--J t\LL :151)
Os ccr!"s tlevt~t~ Crie uma tabela a pa~tir da 'ua { ' ;\TIO~ :lí7
u-hr t~t~ c~t~bcs
INSTL~RSJ::lT e F..'\.CEPr :~57
cs idtl.s ,..,..
strt~t~ txt'~t'ti6S, Nó; já ÜWIIIO> o >uliciente de couc\Ões, hor.t de i1 para
Suhcomulta.., t• concxôcs comparada'
CCrj6S t/o Tra1hlünnando uma suhc()ll'.uha em uma conexào
1:( t-.,."tJ6-
I r ma auto n:laciomu11cnto como uma ~ubcon~ulta
tltsrictlo
. \ companhia do C reg e~tá cn:~cl'ndo
Sua c:Li\a de fen<tmcnta" SQL

~vc1:S&vtr ccr,os &Vt


ts.ftYt,.tltl tltl Clti~CS U
,.. I J
+cít/CS Stf'U tXc/VIiJ6S ..,c
h~tlc.
sumárío

C9nsttaJnts . ..f'íeWs e ttéU1Sélctl9ns:


Cozinhar demais pode estragar o banco de dados

11 Seu banco de dados cresceu, e outras pessoas precisam


utilizá-lo. O problema é que alguns deles não serão tão hábeis como você é com
SQL. Você precisa de algumas maneiras de impedi-los de acessar dados errados,
técnicas para permiti-los visualizar somente parte dos dados, e maneiras de pisarem
um nos outros ao tentarem acessar os mesmos dados ao mesmo tempo. Neste
capitulo, começamos a proteger nossos dados do erro de outros. Bem-vindo aos Bancos
de dados defensivos, Parte 1.

Cn:g <·onll<ttou iljuda :-liO


l'rinH:iro dia dt·Jim: Jm.crindo nmumo clie111c :-!7 1
.Jim evita r'\l ·u . :-m
,\ utecipamlo trê~ me~l'' :n2
CI !ECK, por lamr: .\dicion;mdo uma <.'I TE< 'K CO~STRAI NT <Resu·idio C I! El'l\l :-li:l
CIII·:CI\ando o M;xo :n I
O 11~1balhu de Frallk licou tt•dio,o :-J7.i
Cri;u1do uma 1in1 :~7i

\'i~ualit.ando ~ua~ I'Ít:ll~ Hi7


O que ,ua 1it:w t:>lá rt•almcnte là/.cndo :Hll
U que~· uma IÍl'll' Hi!l
lmt·rindo, ;,mali.--andn c cldetanclo rom 1ie11'' :-!H2
O ;,egrcdo é Jingir que a l'il'll' l' uma tabela dc \'crclacle :-lH2
\ 'iew com Cl IECI\ ()JYrJ()i'\ :-JH.i
Sua vie11 pode ser atualit.ál'l'l. se.... :-!H.i
Quando \'ocê l.ÍI c r terminado com ;.ua 1it'\1 :-!86
Qu;mdo coi'a' ruim acontctTIII com hmh hant·o, de d:tdo' :-l8i
O quc acontcceu dcutro do caixa l'ietninic:o:l ;{Rl\
Mai> problenta;, no C.\JX,\ ELETRÜJ'\ICO :-lll9
bto não L' um >oullo, e uma tramaçfto :-!90
O teste dassico ACI D :-!91
S(Jl. ajuda a ~l'l enciar ~uas ll<llt\ac;úl'' :W2
() que clc1 e ria tl'r amntccido dentro do (';ú\a cleu·tmico :-l!J:l
Como litZer a'> li<U1.,açôe~ luuciouan:m com ~lySQL :-!91
.\1{01~1 ll'llll' I'O('ê mesmo a!l.1
Sua t·.ú~a de ll-1 r;unenta' SQL :~flll

XX
sumáno

Seguranyél
t»S Protegendo suas riquezas

·em
12 Você gastou uma enorme quantidade de tempo e energia
para criar seu banco de dados. E ficana devastado se alguma coisa
acontecesse com ela. Você também teve que dar acesso a seus dados para outras
pessoas, e estava preocupado com o que eles pudessem inserir ou atualizar algo
incorretamente. ou ainda pior, detetar dados errados. Você está prestes a aprender
como os bancos de dados e os objetos inseridos nele podem ter mais segurança e como
1COS
se pode ter um completo controle sobre quem pode fazer o quê com seus dados.

Problema de tl'oll<nlo' 102


[\Íiando CITO' 110 haiKO d1• d.1do' Ja\lll',UIOI d1• JMIIJ;I~·o,
Proteja a null.t dt tNJ.trÍo' 1.111 1111
.\diciont· um 11o\o U\U<U io I li.i
Detida l 'l.alamenlt o qut o thii<IIIO 111'1 l'"lla l(l,;

l 111 ,jmple' t·om;uHio C R.\'\ I 1()(,

\'ana~·f>e, do com;uHio (,H.\'\ I I\!' I


RI:\'C >KE <R E\ OCl U P•" 1k~1o' li()
IH \'OG.\ '\DO 11111a CH \ Yl <Wll< )'\ u'ad<~ li()
IU.\'0(;.\:\1)() comma1' pn·t·l'"" 111
O problema com t·onl,l\ pa111lh.ula' 111
.~7!1
l 'tili/;u1do 'ua roit' ll.i
Elimin;uHio 1 ole' I! li
l 'tjli1anclo "la role \\' ITIJ ,\1)\11'\ ( )IYIJO:\ (nlllt op~·iu• JMI<L admini,tradm) 117
Comlllmmdo CHt.\TL l Sl·.H rom C: H\'\ I 1:.11
,\ li'la de C reg <11\<>r<t é glohal!
Sua cai'a dt· làr.unenta' ~QL 111
()que adta de ler uma (,lt·g\ IJ,t llil '11" t·id.tCit·.' l~h

l tili1c ~QI.cm 'l'\1' prop11m Jlloit-to,, l ' \IKt' t.u11lx'm J><xkna linu ll.,'llal ao Clt~

raiz dengoso mestre


r r
dunga zangado feliz soneca atchim

XXI
sumário

s9btéls
Os tópicos top 10 (que não cobrimos)

"I Mesmo depois de tudo isso, ainda há mais um pouco.


Há apenas mais algumas coisas que acreditamos que você precisa saber.
Não nos sentiríamos bem em ignorá-las, ainda que elas precisam de apenas
uma pequena menção. Então antes de encostar o livro, leia estas pequenas,
mas importantes m igalhas.
Além disso, quando tiver acabado aqui, tudo que falta são dois apêndices... e
o índice...e talvez alguns anúncios ...e então você terá realmente acabado.
Nós prometemos!

::-\''. I Pq.,"llt' um (;{1 [ para 'l'll 'ii,luna


'JV. ~ l'alaiT<L\ Re,t'IYada.., l' (';u ;Jlll'll'' l·.... pl't'iai ...
'\".;{.\LI.. .\:'\'Y e so~a.

V ' I \la1' Ti1x>' de Dadm


' ..'i rahda.... ll'llljx>r;ina ...
' . Ci \lolde \l'lh dado'
\;". 7 (Jut·m 0: '<.x:ê :> (Jue hm '"" \iio:'
\/". X Fun~·út•, numcrica' ,.lll'Í'

N''. !I Indexando para dei'l.ar '" coi..,,,, 1mu' rap1diL\


:'\". I() PI IP/ \ IyS(JL em doi, minuto-

~ .te'fõ<* N1D A:~M~• ......... ._,...,ft ALtM AUo AW«Aft Al.TD ND Nlf .t.lll lollllAf U
-.ICA.MUI'J'1 0.14.T~&.4,.1CIIt

~
> atLICT CUIUI.KHT- DATE f

·----·-···---·
I CI1MD'I' _DAT& I
·-·----····- .......
I 2007 · 07 · 26 I
..............................
1 row 1n ••t {0 . 00 ••c)

~
> SELICT CIJitlllDn_'ti.- :
...........................
I CtJMDtT_ n iC I
.............................
I 11 2 ' 41 I
.. ...............................
1 z-ov 1A ••t CO 00 aec)

~
JILECT CU~tAJ:NT_OSP. : _
t - - - - - - · - - · - - ......... ...
I CIJMZ><T_ UI D I
+·--·-----------..
I rootl loca l hoat I
·----------------+
1 lft ••t t O. OO
CO'W ••c:)

XXII
sumário

instalaçã9 do MySQ.L
Tente você mesmo
co. 00 Todos as suas novas habilidades não farão muito
r.
11 sem um lugar para aplicá-las. Este apêndice contém
instruções para instalar seu próprio Sistema SOL para que você possa
tnas, trabalhar.

Coml·n · logo!
>••• e l n~tnu;ê><' ' <' Solu~·ao cll- l'mhll·ulil\.
). l'a"o' pam imtal<ll ~hSQl.no \ \'indm1'
Pa,\o., para in ... talar ~hSQLt• m \ lar O~.\

c9mpilaçã9 Je -Çenamenta.'5
Todas as suas novas ferramentas SQL
000 Aqui todas as suas ferramentas SQL estão em
111 um só lugar pela primeira vez, por apenas uma
noite (brincadeirinha)! Esta é uma compilação de todas
as ferramentas que abordamos. Gaste alguns minutos para analisar
a lista e poder se sentir o máximo - pois você aprendeu todas

Símbolo' ~IH

.\ -c IIX
D-L 1111
G- \I l.iO
'\-~ 1.1 I
T- \\' l.i:l

XXIII
C9m9 usar este 11v't9
Introdução

IJuh st.~i4J ,~s rt.sp411it."'4S • (111\41 pt.r5t1,./-• ,.,&tl'·t.-1-•~:


p41' Jtlt. t.ft.S C414C411'4111\ 41J(Ii/4 (.11\ (111\ /i'/1'4 S41JI't. .5$/.,?
Como usar este livro

Para quem é este livro?


Se você puder responder "sim" para todas essas perguntas:

Você tem acesso a um computador com um RDBMS


instalado, como Oracle, MS SQL, ou MySQL? Ou um AJ.' .
~s "'tii14S 1-t ~tllift• ~ 4prt;,Jtr 4S
computador onde possa instalar o MySQL ou outro RD-
BMS? C4;rctl-l-4s t st;,·hxt tlll S~L lit VIII~
® Você quer aprender, entender e lembrar c omo criar ~ ~~~~;,ti'r~ 3t1t litll;,l-/-'lvc~ttt~ ler:
tabelas, bancos de dados, e escrever consultas
usando os m ais novos e modernos padrões?
+v"" ~t~Ct$ l:cn pr~ V4ct t~#Jiitr t lit
le-I" vs:r S~L txch~ttt;,-/-t ""jtl-!-4
® Você prefere uma festa estimulante com jantar
ao i nvés de palestras secas, desanimadas e
3vt V4ct prtcisc vs~r.

acadêmicas?

Elttl' livro é para você.

Quem deveria se afastar deste livro, provavelmente? ls


In
Se \'ocê responder ''sim" a qualquer uma destas per~,runlas:
/Li.cs S't 3tlt$tr tlltt ltlllirt-1-t t #Jtl;rcc
t#J-/-t;,Jtvl4r~ttul:rt4s #14r 11141s
G) Você está completamente confortável em iniciar a , ~
t C4#1tle4'ts 11111-p~rc-11111,-.;.4 s t
sintaxe SQL e procurar algo que realmente irá ajudá-lo~
com o design de bancos de dados avançados? C4#ftiCC4 ts3vtrlic tx-1-tr;,c ts-1-t
J• ~
'1Vr4 P""t ~vlicr.
® Você já é um programador em SQL avançado e está
procurando um livro para referências em SQL?

® Você tem medo de tentar algo novo? Você prefere


ter que fazer um canal no dente a usar roupa xadrez
com listras?
rc
\(

Este Ji,To não é para você.

Sabemos o que você está pensando


"Como es~c pode ~e r um livro l!ério sobre SQI ."
~Por que tanta ilustraç~io"

"Será que po~so reaJmente aprender deste jeito?''

XXVI introdução
a mtrodução

Esabemos o que seu cérebro está pensando


St·u n;n·hro ;uheia por nm·idadc. Ele nt;í ~emprc procur;mdo, t:M'iiiH.';mdo,
nprr.mdo por algo diferente. Ek lo a fl·ito pra isto, o que <\iuda a mantê-lo vivo.
lJIIào o que 'cu cérebro fiv com tudo que (· rotineiro, comum, roi'>a'> noamai'>
wm a' qu;Ú' nx:ê '>C depara:> Tudo que de pode f:v:er para qut.• l''>ta' coi'><L'> não
mtllllllliJl<Ull o \'Crdadeiro tnlbalho do rerebro - s,.rravar coisa' C(lll' llliJ><>rt;un. Ele
n:i.o -.c.· pacorupa em armazcn;u '" coi'>a'> dmtas, poi' ela' nuawa pa.,.,am pdo filtro
·a,tn ohi'Í<Uut·ntc não é impon;ultc".
Como o 'C li rercbro ~abe o qut.· c impoa t;mtci> Suponha que vocC: tirou fols,'<l
p..r.tld/~1 trilha c um tigre pula na 'ua fi-calle, o que acontcct· dt•ntro ele sua
ml>t'(il c do ~cu corpo?
(h nl'umnio' '>e disparam. ,\s l'lll<><;ôt''> '><>hem. Surge a química.

La.,.,im que '>l'U cérebro sabe ...

Isto deve ser importante! Não se esqueça!


lana~o,~nl', JX>rt.uato, você em casa ou em uma biblioteca. f: um lugar seguro,
,lqu<•ndo c M..'guro contra ti~-,rrcs. Você <.'st;\ estud;u1do, se preparando para uma
pro1<1. Ou ainda. tentando aprender aiJ.,"tllll a'>sunto técnico hem maçante que
'l'll chdi.• l'\j(tiu que \'OCê e~Ü\'C\\C hem afiado em uma semana ou dt•t dia~. no
m.himo.
Só um problema. Seu t·érchro c~t;í tentando fazer um grande bwot. Ek t'\t{a
tu atando t;v:cr com que este a" unto oh' ia mente nada imcn.·~,antt' niio onape
rn ur'o' e'ra,\O\. Rcntr~o' qut.· 'iio .L,'<l\lO'- annazcnando S,'1<lllcle' <"OI'>iL\. Como
U~ll''· ou o pcri~o que o fo~o pode oll.·rt·n·r, por exemplo, como HK'C: nunca
mai' podl•r.i praticar ~no\\'hoanling dt• l!horL'>.
I nito ha nenhuma fonna !>impl<:~ de dit.cr ao seu cérebro, ''Ei, c(Td)l'(>, muito
Ótimo. Somente mais
ulma.rttdo, ma' nào importa o qui'to nu>nútono e~te livro é, c o quanto t•stou
ll'Jll'tr;mclo na c'cala Richtcr emocional nc\lt' momento, rcalllll'llll.' quno que 450 páginas deste livro
seco, monótono e chato.
HX't' m;mtcnha cs-.as infonna<·õc' an·l'~-.Í\ c i'".

Vocé está aqw ~ XXVII


l1vro
Como us ar es te

pt a e de po is
gu m a co is a? Pr im ei ro, vo cê ca
re nd er al ra de nt ro de
ec is o pa ra se ap a fo rç ar fa to s pa
En tã o o qu e é pr ec er. Nã o di z re sp ei to
ur ob io lo gi a e
rti fiq ue de qu e nã o irá es qu s so br e ci ên ci a co gn iti va , ne
se ce as pe sq ui sa pá gi na . Nó s
a ca be ça . Co m ba se na s úl tim m ui to m ai s qu e te xt os em um a
su er de m an da
ac io na l, ap re nd
ps ic ol og ia ed uc
o.
lig a o se u cé re br
sa be m os o qu e ic as de
pr in ci pa is té cn
A lg um as da s :
U se a ca be ça
ap re nd iz ad o de
ráv eis qu e
lon ge mais me mo
alg o ilu str ad o. Im ag en s sao de nte (até 89%
Faça mu ito mais efi cie
ras ap en as e faz o ap re nd iza do z tam bé m
palav transferência). Fa
o em es tud os de recordação e ra s de nt ro
de progress Co loq ue as pa lav
s se jam ma is compreensíveis. ou ate em
co m qu e as coisa invés de ao final
,
s qu e se rel ac ionam ao tex to ao ble ma s
ico tos a resolver pro
ou pe rto de gr áf as vezes ma1s ap
es es tar ão du
os aprendiz
ou tra pa gin a, e
ad os aq ue le co nte úd o.
relaCion
ss oa l.
de co nv er sa pe
Us e um es til o rfo rm an ce em 40
% nos
pe
au me nta ra m sua do a pn me ira
tes, es tud an tes nte ao lei tor , us an
Em es tud os recen se expre o dir eta me
ss
nte úd o fos ao invés de
diz ad o se o co l. Cont e estarias
testes pó s-a pr en es de op tar po r um to m forma prestaria ma1s
de dia log o, ao mv ce
pessoa, em es tilo sério. Em qu al vo
Nã o lev e vo cê me sm o mu ito a
gu ag em casual. a palestra?
palestrar. Use lin mp an hia ou um
nta r co m div er tid O co m um a co
ate nç ão: um Ja tras palavras, a nã
o ser qu e
m ai s pr of un da m en te . Em ou ca be ça. Um lei to r de
ve
iz a pe ns ar coisa de ntr o de
sua
Le ve o ap re nd urón1os, nã o ac on tec e mu ita
s e ge ra r no vo
va me nte seus ne eg ar a conclusõe
voce fle xio na ati rado a res olv
er problemas, ch
rio so e ms p~ an tes e ati vid ad es qu e
partiCipante, cu e questões Int rig
es tar mo tiv ad o, fio s, ex erc íci os
precisa de desa
E. para isso. vo cê
conheCimento. ro e mú ltip las se
nsações.
reb
s os lados do cé le ito r. Nós todos

en vo lva m am bo
e- e- m an te nh a a at en çã o do o. ma s nã o
Pe gu ist
preciso aprender
os a ex pe né nc ia: eu realmente reb ro pre sta
tivem página um~ Seu

1g o fic ar ac ord ado até o final da es tra nh as .
cons m interessantes,
ào a co isa s qu e sao fora do co mu ten so as su nto
atenç novo, técnico e ex
an tes e ine sp era das. Aprender um o for .
cativ idamente se nã o
der mu ito mais rap
a ser ch ato . Se u cérebro vai apren
nã o prec1s
de para
s qu e sua ha bil ida
oç õe s de le s. Agora ja sabemo al.
To qu e as em úd o em oc ion
en te de seu co nte
pla me nte de pe nd lem br a qu an do
t:m
lem br ar alg o é am . Vo cê
ilo co m o qu e sem im po rta
Você se lem br a
da qu oti va s
ias melosas e em
tam os fal an do de estór
sente alg o. Nao,
nã o es ta1s qua1s
do de emoçóes o
orr o. Estamos fal an sou
sobre um ga ro to
e se u ca ch nto de qu e Eu
ão , es pa nto ! e o se nti me ns a qu e é dif íci l,
s1dade. divers e to do mu nd o pe
a surpresa, curio ra -ca be ça . ap ren de r alg o qu .
resolver um qu eb nharia, nã o sa be
cara! ' qu e ve m ao ' e o Bob, da Enge
e •eu so u ma is téc nic o qu e vo cê
sabe alg o qu
ou pe rce be r qu e

XX VIII mtrodução
a introdução

Metacognição: Pensando sobre o pensar


Se realmente quer aprender, c mai~ r{qJido c profi.md;unente, pre~tc ateução em
como você presta atençfto. Peme solm: como \'ocê pema. Aprenda como você
aprende.

A mai01ia da gente nunca te\'e aula de met<tcog.tição ou teoria do aprendiz<tdo,


enquanto crescíamos. !:.ramos cobrados a aprender, ma~ muito raramente cnsiuadol>
a aprender.
~fas pre~tmlimos que ~e você c~t;'t ~egunmdo e~te li\To, você realmente quer aprender
sobre SQL e provavelmente não quer que le\'C muito tempo. E já que vai fazer um
te~te sobre isto, precisa ~>e lcmbr;u· do que lê. E para is1>0 você tem que entender.
!'ara extrair o máximo desse li\TO, ou qualquer outro livro ou de uma
experiência de aprendizado, asl>uma a responsabilidade p<n<l seu
ct'rebro. Seu cérebro neste conteúdo.
O tmque eslá em f:ver com que seu cérebro enxergue um novo
material que está aprendendo como sendo realmente muito importante.
Cmcial para Mia exil>tência. Tão impot1Rnte quanto o t.igrc. Ou de outra
lonm, cst<n'á em uma batalha const;mtt·, com seu cérebro que faz o
possiwl para C\Ítnr que um no\'O ~~ia armazenado.

Então o que devo fazer para que meu cérebro


pense que SQL é um tigre faminto?
Há o método lento c tcdio~o. ou o método mai~ rápido e mais
rliraz. O jeito lento é repetição. Você obviamente sahe que C:· capaz
ele aprender e relembrar até do mai~ chato a~sunto ~t· ricru· constantemente jog;Uldo e:-.tas
infom1açõe~ p<n<t ~cu cérebro. Com a quantidade suficiente de rcpetiçfto. :,cu cérebro diz:
"Isto não me p;m:ce imp011rulle, ma:, de fica pen~ando nel>ta me~ma coisa várias c \'{u·ia:. e
\'i!J'Ía\ vet.e~, euttio acho que deve ser".

O modo rápido é fazer qualquer coisa que aumente a atividade cerebral.


c>J>enalmente upos dilercntes de atividade. As coi\al> da página anterior ~tio boa p<n·te da
'oluçào e da~ todas são soluçôc~ comprovada!> a ~judar seu cérebro a trabalhar em :,eu
faror. Por exemplo, estudol> mo:,u·run que colocar as palmTas dt·ntro de figura!. que elas
c~vrc>sam (ao contrário de qualquer outro lugar da página, çomo no topo. ou dentro de
um p;u<Í),•ralo) causa seu cérebro a tentar fazer sentido entre a palavra c a ilustraçào com
da relacionada. e nes~cs C'élSOs mais neurônios irão disparar, mais neurônios disparando
maJ~ ch;mces de seu cérebro entender que is~o é algo que vale a pena prestar atenção c
po~~i1clmcnte gravá-lo.

l'm estilo de conversa ajuda porque as pessoa,~ Lendcm ;t prcst;u· mais at<.·n~·ào qmmdo
ela~ percebem que e~Lão em um diálogo, onde se espera do ouu·o o acompau hamenlo
e a e~pcra até o linal do asswllo. l ima coisa mamvilhosa é, seu cérebro não precisa
necessariamente se importar que a conver!.a seja enu·e você e um livro! Por ouu·o lado, se
u c,tilo de esni1<1 for lom1al e seco, seu cérebro captru'á do mesmo modo que \'Ocê o faria
tm uma palestra chata, sentado junto a uma porção de obserYadorc.:s pas~i\'os. ~à o há nem
como ficar acordado.

~la~ figuras e Cl>Úio de com·c.:rsação são a pena:-. o começ-o.

Você esta aqui • XXIX


Como usar este livro

Aqui está o que fizemos:


;-../ós us;unm ilustraçôc~ porque seu cérebro tende p<u-<l o visual e não o textual. Até onde
~cu cérebro sabe, uma figura vale mais que mil palavra~. E quando texto c figura trabalham
JUntos, fix.;unos o texto em ligmas porque seu cérebro trab;tllm mais elicientemente quando
o texto e~tá dcnu·o de algo ao qual c~tc texto st: refere, ao contrário de colocá-la no topo ou
enterrado em mn p<U'ágrafo qualquer.
l !:,;uno~ a redundâ ncia. dit.cndo a me~ ma coisa dt: diferentes formas e com tipos
tliftrente~ tipo~ de mídias e com múhiplo5 sentidos para aumentar a chance de que o
conteúdo se <1~rcgue a mais de uma área de ~eu cérebro.
lls;uno~ conceitos e figuras de fmmas inesperadas porque seu cérebro está afinado
a nm;dades, e nós usamos figuras c idéias com pelo menos um pouco de conteúdo
emocional, porque seu cérebro está afinado p;u·a prestar atenção à bioquímica da~
emoçõe>. ~: o que provoca \'ocê a sentir algo mais provável a ser lembrado, ainda que e~ta
emoção .,eja nada mais que um pouco ele humor, surpresa e interesse.
U!>a.mo:-. um estilo de conversa pessoal porque ~cu cérebro está alinado a apreuder e
lembrar mais qmUldu você faz coisas do que qu<Uldo lê sobre coisas. E Jizemos exercícios
dc&aliadore~. porém possíveis de serem feitos. porque é o que a maioria das pes~mu, pretere.

l 'samo!'t múltiplos estilos de aprendizado, porque você pode preferir um


procedimento pas!'to-a-passo enquanto outra pessoa prefere entender de fonna generalizado
ptimeiro, e .iá out.ra pessoa quer apena~ ver tull exemplo. Mas, a despeito do ~eu t•stilo Bate-papo
preferido de aprcndi;r_,aclo, todo5 l!erào bendiciados em ler o mesmo conteúdo representado
rlt' ' 'árias funna;;.
~~
~
lncluímol> conteúdo para ambos os lados de seu cérebro porque quanto mais você
em·olvc ~cu cérebro. mais pro\'avclmente aprenderá c lembrará, c mais tempo consq,rttirá
finu· concentTado. funda que trah;tlhar apt·mts um lado do cérebro i: a oportunidade de dcix;u·
o outTo lado dcsc<U15ar, você tci'á um aprendit""l.do muito mais produtivo c por um maior
peliodo.
E induimo~ estórias e exercícios que apresentam mais de um ponto de vista, porque
seu cérebro está ali nado para aprender m;ús prol'undru11ente qu<U1do forçado a fazer ;málises c PONTOS DI BAlA
ju]g<UllCII!OS.

lnduímos desafios <lU'avés de exercícios e fizemos per~nlas que nem sempre têm uma
re~posta direta, porque !-.CU cérebro e!>tá afinado a aprender c lembrar qu<Ulrlo está ocupado
com algo. Pense ni~to - você não consegue ficar em form<1 apcna~ nssistimlo pessoa~ fazendo
exercícios, mas fizemos o melhor possh·el p;u·a tcm1m certeza ele que quando você está
trahalh;mdo ardmuncntc, está fazendo as coisas certas. ou seja, não está gastando um
dendrito extra apcna1-o pensando em exemplos incomprcensí\'cis ou extremamente
difíceis, ou com jargões técnicos, ou ainda, muito prolixos.
l samos pessoas na!> estóriru., nos exemplos. ilustrações, ele., porque, bem, porque você é
uma pe-;~oa. c ~eu cérebro presta m<Ús atenção em pessoa-; do que em coisas.

XXX introdução
a introdução

, Curve seu cérebro à submissão


Ent;ao, lizcmm nos:.a parte, o resto é com você. Estas
dicas são um ponto de pm·úda; escute o que seu cérebro e::
descubra o que funciona c o que não. Tente coisas 110\·as.

•·9•roto
Vá devagar, quanto mais você aprende,
menos tem que decorar.
® AFale sobre isso. Em voz alta.
fala ativa uma parte diferente do cérebro. Se
Não leia apenas, pare e pense. Quando o livro ,·ocê está tentando entender algo ou aumentar
faz uma pergunta, não \'á direto para a resposta. sua~ ch;tllces de lembrar algo mai~ tarde, làlc em
lmiJh>ine que alguém realmente está fazendo uma ,·oz alta. Melhor ainda, tente explicar em \'OZ alta
pergunta. Quanto mais prolund:m1ente você para uma outra pe~soa. \' ocê aprenderá mais
forçar seu cérebro para pensar, melhor a rha.nce rapidamente e:: pode ainda ITYelar idéia~ que uão
de aprender c relembrar. sabia que estavru11 lá quando iniciou a leitura
sobre o assunto.

® Faça os exercícios, escreva suas


próprias anotações.
Escute o seu cérebro.
Pre!->tc atenção em quru1elo o seu cérebro cl>Úvcr
Nós colocamos à di~posiçào, mas !le o llzermos,
finmdo sobrecarregado. Se perceber que ~cu
~erá como ler alguém para malhar por \'Ocê
cérebro está começando a pairar pela supcrfíci<.: do
na academia. E não fique só olh<mdo pm·a os
livro ou c~quecer o que acabou de ler, é hora de
exercícios. Use um lápis. I l;i uma porção de
mna pau!>a. Quando você atinge certo ponto, não
evidências que a ati,idade nsica pode aumcnt<u·
vai aprender mais só porque está temando soterrar
o aprendizado cnqu;mto se aprende.
mrús infonnaçõc~. c pode ;únda, afetar o procc:-so.

® Leia o quadro "Não existem perguntas


idiotas" ® Sinta alguma coisa!
Isto quer dizer todas elas. Elas não são barra.~ Seu cérebro precisa saber que isto importa. Envolva-
laterais opcionais - elas são parte do se com as e:.tória.~. Inwntc ~ua própria legenda p;Lra
conteúdo central! Não pule! as fotos. Suspirar por causa dt· uma piada ruim é
melhor que não sentir nada. de modo algum.

Faça com que este seja a última coisa


que você leia antes de ir para cama. Ou
ao menos, a última coisa desafiadora. ® Crie alguma coisa!
Parte do aprendizado (especialmente a Aplique isto para seu trabalha diáiio; l 1~e o que
tramferência para a mcmóaia de longa-duração) \'ocê está aprendendo para tomru· decisões no!>
acontece depois que você encosta seu livro. seus prqjetos. Apenas faça algwna coi!>a p;u-a obter
Seu cérebro precisa de um tempo só dele para alguma experiência além dos exercícios e at:i,idade:.
trabalhar mais. Se in~erir algo novo nesse período, deste li\TO. Tudo que você preci~a é de um lápi'>
pru·tc do que você já ha\'Ía estudado irá se perder. c um problema a ser solucionado... um problema
CJUe pode até ser resolvido ao usar remunenla~ c
récnicas que está usru1do pru·a o exru11e.
@ Beba bastante água.
Seu cérebro traba.lhru· ao máximo mergulhado em
uma boa qum1tidade de lluído. Desidratação (que
pode ocorrer illltes de \'Ocê sentir sede) diminui a
função co~niti\'a.

Você está aqui ..,.. XXXI


Como usar este livro

Leia-me
IMITt.'Ü<I dl
L\t,l l.' unw l'\Jll'lll'Jlna dl .lpn:nditado, nào um h' to dl.' rdc1 i· una. ;\.ó~ ;u1 ;mr<mlo' tudo o lJlll.' podt'llil 'c r uma
prt•c·i~a romc~·ar do
;IJucncleJ aquilo em qm· t•,tamos trabalhando u;1qude ponto do livro. b pda prime::int Wt a\~Ímilado. \OCê
IIIIUO, JlOI CJIIl O li \TO 'liJlOl' que \'llC'I:' j;~ \ i11 011 flj)ll'lldeu 0' a"lllltO~ alltl'l ÍOI'l''·

Iniciamos com as sintaxes básicas SQL, então conceitos de design de bancos de dados, e
então consultas avançada s.
l.nquanto l 1111pon:mtt ntar tabd.1, ht. 111 de~t.·m oh ldit,, anil'' que \'C){'l' po""· <: prl'n'o t.'nll'ndu ;1 \lnta.'l.e dl' ">Ql..
Então 111in;
\ocê pode ttntar por'' (JIOJllio .. \"1111, po<k lllll'diat;ulll'lltt .· later al.l{o com SQL, c c·ontl'\ará a 'l
<otnl·ornatHio ' SQL ((lll'
unpnll{ar 'ohll' i~,o. Ent:1o, um pouco ckpoi~ no 11\'ro. nú.r- 111mtr;11l'lllll~ boas pr;ítica~ l'lll de~ellnll\'111\ento <k
tahda\. Alt'lllilolr
lllllil ctllllJlll'l'll\ito 'olida da~ 'inta'l.l'' qut.· H>c(· pn·c·l\a '>aht'l, l' poderá focalit,ar l'lll .lptt·nckr m, C'OIH'l'ltoo,.

Nós não cobrimos cada comando, função ou palavra-ch ave em SQL.


que H>rr
l.nqu:Uito podt'llaJllO' tc·1 colocado cada comando. l'unç;-lo ou palana-d1an· SQL em partinu;u lll''lt' li\l'o, pc1"a111m
funçôt.·~ l p;tJa,·J~I~-dl.t\l ' maÍ,Importa mc .... 'o'
pll'il'I'Üia tll umlino po"t'd de \l'l canl'~tclo l' qut•t·nsin;ut;J o' roman<lo\,
qul' ,.Ot'l' tl'o<ll a em !l,j por rento do lt.' tnJX>. l· qu.mclo tn c r lido todo o h\I o.
oll'll't emoo, ii<JIIdc~ qul' 'ocê Jll'lTI,.t .,,lhl'r, aqud<•,
a conlianc;a de procm;u aquda hmc;f•o q11c preci ... ar;í par<~ terminar aquela ron~uh<~ que acabou dt· l''(Tl'' l'r.

Não nos referimos à espécie de Sistema de gestão de bases de dados relacionai s (RDBMS).
E\t\lt' Standanl SQL. :\ lvSQL, Orack, MS SQL St'IYl'I', Pmtgrn~SQL. D B~ c nmi' 11111a por,·;io ck Sistema~ dt•
);l''ol:'lo de ha'c'
111:1" p:l!l'Ína.... \~
dadm. rd.t<'IOIIai' pm ai. St· rohri''l'IIHJ~ cada ,·;mac;:"to de 'inta\l' para cada rom;mclo lll''tl' liHo, dl' tni.t nnnto
tl'n<kntt• para ~ l ySQ I . Tod<h o' l'\l'mploo, no hm
~o,tamo' de .in·ore'>. t'lll<io l''tamo' lc)(',mdo en1 St;md;u·cl SQI com um 10111
lll<l' de J.;l'\l[l() de ba'l'' clt: d.tclth n:lanonai ... (RL)B\f~
lloiCI funcion;u ('<>111 \1\SQL. }:, a llloUOII<l t'uncÍ<>IICIIõlelll q11alqlll'l do' ')i,tt

ti ... tado' acin1a .•\inda kn1l>1~t daquele li\To dt• rl'lnência qut· '111\l'timo... qlll' vocé cotnpra,~l.':) Compn• um para
o St,lt'llla SQL
t·~pt't ílico qut· 'orê u ..a. da ;dia hook' prd<.·rctH·ialn ll'nte.

As atividades não são opcionais .


( h l' \l'I'CI<'IO' l ,ttiYidac k' nfto s;''to ad inon;tis; c Ic' ..,;io pm1c do rontl'udo n·nt ral dc,ll: li' ro. Alt,'tlll' 'ao p.tr;t ;qudar rotn a
11\l'lllÍlll
c·nlt.4Jda-. ,;10 ,.,
.tiL,'tlll' pam cntl'n<lmll'llt o l' aiJ.,'tlll'o .t)udarào \'Ol'l' a aplicar o qUl' aprendeu. ,,..,o pull o' l'\l'H'JCÍo,, \, p;tla\1<1'
lcmto' IJill'
llllll'a' l'OI'·'' qut· \'CKl' n.h> pteC'I~<t livt·•. ma., 'ào o11111:1~ em da1 <to \t'U <"l'll'im> tunarhancc de J>Cil'><U na' pala\t<l\l'
.tpll'IH.Üdo l'lll lllll COJill':\111 clifáentl'.

A redundãn cia é intencion al e important e.


no li\To I \c ;1 Cabc~·a l' que no~ qut·rcnlo~ qut \orê realmt•nte entendam. E <[lll.'lt'tllm que tellllllll
l ' n~a diltTt.'tH;a ~i~'llilicalltl·
o li' 10 lc:mlu.u•clo-,t · do qu<: aprcndt.·u. ,\maioria elo' li,To., dt.· rderência n;u> tem o oh)l'll\'O dt· linn;u conheciment o ou ai11da
tdtmhm-lo. ma~ c~tt· h\ 1o l .,ohrt• apll'lldÍ/.aclo, tllli-to n>c(• \ll~t ;tlh'llll' 11\l '>1110~ coiKt'ito\ ap;ul'<'t'lt'lll maí' ele uma \Cl.

Os exemplos são os mais enxutos possíveis.


'o"o~ ll'IIOil' 11th nmt;un que e lnt'll~lllll' st.· ;u ra\taremem :lOOiinha' clt t''l.l'tnplo, pronu<utdo
pd<•' dua ... lính.. ., que dt.·.,
prtTI,am <.: ntttldl't. \ nttuoria do., l''l.llllplo~ nt·,tt· hno é mo't 1 ada dt·ntl c 1 elo., mai, dmunuto' l'OIIIl''l.to' po"h ,.,,, p;u~t <JIIl .1 J1
que \ocê t''t.i tt'Jilanclo ;tpleiJ(ll'r liqlll' dara e ;.Í111plc:'>. Não l'~Jll'll' qut· todo., o' l':\l'lllJ>lO., .,eja111 mhn ... to., ou llll'\llto co•npll'lo, .
l ko, ';'io c~n llo' C'>j)l'I'Íalnlentl' pm~t aprendit.l(lo t.· nem 'l'IIIJlll' 'ào inte,l.(l.llllll'lllt: futwionai!>.

'o' m'emno' mtnto' elo' 1·om:mclo., 11<1 \\"eh p;u a qnl' \OC'l po,.,.t tiver do" nload no 'lll romputado1 c C'1ia1 '.u to' b;mco clt•
c
nultzado' nnte capít11lo. \ od: u~ enfoutrar;í em http:J j www.altab ooks.com. br

Os exercício s "Poder do cérebro" não têm respostas.


P;u~l al~'llll'> dt ~e,. n;io h.1 um,1 re.,po.,t;t nHTet;l, t' pam outm,, partt· da t.'\Pt'liC:·nria cl~_· aptt.ndit.ado d ......1tindack' do Pock1 clu
Ct'l'dJI'o C: pa1.1 C(lll.' \OI't' ckcida 't' t quando ~m" ll'~posta~ t•,tflo cotTCltt\. l-:111 al),'llll' do' l''l.l'r<'Íl'ln' elo Poder do t'lT('bro. \Otl'
llll'OIIlt~ll.lJl'''·''p;u a d11tnoná-lo ao lm ;J c·ont·to.

XXXII mtrodução
o time de revisão

OTime de Colaboração Técnica

iamos

o tcrit

>, lcr.:i
'\
Ct.cvctr l.tlpttl-/-66 ,

'dlc
~ó;, Nossos maravilhosos colaboradores:
TO
IS) Enonne~ agradccimcntm p;mt nOS\O Time de Colabora- ele talllbém pode ~t'l' encontrado em casa rom -.cu~ gatos
dores Técnicos. Ek·~ capturaram erros gros~ciro~ c sulis, e Ralph e Squeak.
cn·o~ de digitação patéticos. Sem eles, este li\To não eslaria
"Shelley" Moira Michelle Rheams. l\H:.Cl {i\ lc,tre
tito perto do correio como está. Eles lizenm1 um seni~·o
em Educação), l\1CP O"rofis~ional Certificado pela
romplcto em diminar o~ erros deste livro.
l\licrosofl), MCSE (Engenheiro de Sistema-. Certificado
Cary Collett colocou à di;,posi~·ào ~cus 15 anos de pela Microsoll), leciona c gcrem·ia o Prognuna de
ória,
experiência trabalhando em desem·oh'imcnto, laboratórios Educação de Inlància prccocc ua Faruldacle Comunit<uia
I:OYcmamentais e, atualmente, no setor limmcciro para d(· Delgado, em :'llc11· Orleans, Campus \\'c~l Bank.
elem
usá-los ao revisar este li\TO, c está <Utsioso em volt;u· a liucr Atualmente da ama disponibiliz;u· cursos online par~t
su~ atividades não-empregatícias como cozinhar, fazer irem ao encontro das muda.n ças na conmnidade de
ui lha c atcrTorÍú'lr seus cachorTos. t\cw Orlca.tts pós-Kau·ina, c nó.., a agradecemo-. por csl;u·
disponível c nos encaixar em sua agenda super lc)tada.
LuAnn Ma.zza cnconu·ou tempo cm sua "ida profissional
em Illinoi:. como programadora c arlalista de sistemas par-a Jamie Henderson é un•a n:tcr<ula ;u·quiteta de
làzcr alguma~ reúsôcs innivclmenlc dclalhadas e rápidas. sistemas que ostenla seu cabelo roxo e di,·idc o tempo lint·
;\ós estamos fclv..t·s porque ela agora pode gasr<u· seu tempo entre seu violonrclo, leitura, vídeo g;unc-. c assistir a filmes
linc apro,·cit<Uldo seus hobbies indtúndo ciclismo, fotogra.lia, em DVD .
computadores, música e tênis.
Este tjme l:mtáMico é a razão pela qual os exercícios dc;,tc
Qum1do Steve Milano nào está prog1·arnando em meia li\TO f'arào O que de fitlO sàO seus propósilo'i C o porquê,
dúáa de dikrcnlcs linl,"llétgcm no seu trabalho diário, c qu<mdo você terminar· a leitura deste li\To, '>crá um
ar1e làzrudo um c\relcntc tTabalho de revisão de Use a Cabeça programador em SQL conli;mtc. A atenção deles aos
SQL. ou tocando rock punk com sua banda Onion detalhe.., nos mantém disLantcs de \cnnm J.,•racio'o' dcma1..,,
l~avored Ring~ c·m porõc~ sem vcnl.ilaç;io ao redor da terra, martdôcs demais ou, às vezes, muito c~qui~itôcs.
lados

Você está aqui ..,. XXXIII


Como usar este liVro

Agradecimentos
Meus editores:
Pnme1ramentc. eu quno a~deccr ao mc..·u editm, Brett McLaughlin,
não ~ú po1 um, ma' por doi~ ac;unpamt·nto~ de rccn.ll:l\ ele l l~e a Cabeça.
Breu loi mai' que 11111 t•ditor - el<: foi uma combinaç:"lO de om~ntc dt•
minha' •ele: i;~,, e wrpa. '\ào há alholutamente nenhum jeito de que e~tc
li\To fo"l' l'~crilO \t'm \Ua direc;ào, apo1o c inrcrc,,t.. Ele não !>Ó mt• p~:~ou
dl',dc a primeira entn·' ''ta. ma' \U<I adnuraçào pelo meu, por muita'
W/l'' humor exag<:raclo que fez dc~lt' li'ro a mdho1 experiência como
e\nitora que já pudt• lei. Ele me deu u•n monte de ronsclhos, dica~
c m;u, do que um pouco de rrein:um·nto atran~-. dt• todo o proce\\O.
Obtig;tclo, Breu!

8rH-I- ~cLcv$1./t, ~
Editora Catherine Nolan tem uma enorme úkcrél a~ora.
~.,.,,,~·as a alguma~ das inacreditáwi~ onda~ de m;í--.ortc que ti\ t'
perto do final do processo cditonal. Ela é a nvào pela qual
e-.w li \To não saiu em 2007, c tah cz a I<Wlo pda qual ele l(>i
publicado de fato. Foi meio como malabarismo c:om lilhote~
no linal, ela não deixou cair •wnhum. Eu prtTisci muito de
uma a~cnda, t' Catherinc é a mdhor organit<tdora de horário
que Ja pude encontrar. E pen.,o q11<: fui ~cu ma10r dc..,alio ;lf('
então. \ 'amo~ torcer para que -.c.:u próximo pn~Jclo corTa tudo
mai~ tranqüjlo, da merece mai~ do que ninJ.,'llém.

O time O ' Reilly:


Eclitm.t ck De'i~1 Louise Barr tt·m \Ido tanto uma J..'l<Utcle muil\il t' uma de'iJ..'llt'l J.,'l<ilira
mm,'lHiira. De alJ.,'l.llll .Jtllo ela foi rap;v de rm1aJitar nunha:. idC:ia.., maluca\ em uma "'te
impll'"IOIIaiiiC qut· IC.·; o' ronn:ito' dif•rei:. parcn:rt•m muito dam\. Todo e~tc gr.mdt•
dc\IJ-,'11 c dela, c nào tenho dú,·ida que t'lll muito~ n1omcnto~ 1\C\tt· li\'ro, ,·on: tamht·m , ·ai
qm'l'l'l ilJ..'l'adern a da tamhC:m.

:\{a\ lt'll.lmo:, pubht ;ulo ('0111 Ullla lç.lllla de CITO\ \t' não fo.,...e pelo llllll' de I'C\Í,ão tt•rnÍca
l: Sanders K.Jeinfeld que fet um trabalho excelente como echtm de produ~·ào, ,,o

pn:p;11ar C\IC h\To pa1.1 t•cli~·ào. Ek· foi mai' além, 111\lilo mais aiC:m que o chamado do cJc,·cr,
ele oh\t'IY<>ll ali-,'1.111\ ahi ... mo.., conceituai~ que rcalnwnlt: precisavam 'tTli~;ado..,. Ohngado, S;mdt•r,!
hnalnwntl', quero a19ackrer a Kathy Sierra l' Bert Bates pm ni:ul'm e ... ta mara\'ilhosa ..c:rie
e pdo' melhore .... mtnt.us e de,afiadorc-. treinmut·nto\ que tiw no llll'll pnmeiro uc..·in;uncnto dl'
rernua-. pra l 'se a Caht·~·a. Sem aqud~:' trê"> dia.,, ht•m, cu não quero nem pcma1 'ohrt• o quáo diliul
Lc1 ia ~H lo 'em ele.... to~ çomentiuim ~:ditmiai~ li na" Ioram dolormam~:nte apurado~. e ;unplalllL'llll
melhorado ne~tc li\ ro.

XXXIV introdução
1 Dad9s e tabelas

Um lugar para todas as coisas

*
Eu costumava manter uma lista de todos
os meus pacientes no papel. mas eu as
esquecia constantemente! Finalmente
aprendi SQL e agora não perco uma
alma. Aprender sobre tabelas não vai
doer nodal

Você simplesmente não odeia esquecer as coisas? Seja a chave do seu carro, ou aquele
cupom de 25% de desconto da sua loja de departamentos preferida, ou os dados de seus aplicativos, não há
nada pior do que não poder guardar aquilo que precisa ...e quando precisa. E quando o assunto é seus
aplicativos, não há lugar melhor para armazenar informações importantes do que uma tabela. Então vire a
página, entre, e viaje pelo mundo dos bancos de dados relacionais.

este é um novo capitulo 1


Use a Cabeça SQL

Definindo seus dados


Greg conhece muitas pessoas solteiras. Ele gosta de estar por dentro sobre o
que seus amigos andam fazendo, c apresentá-los uns aos outros. Ele tem várias
informações sobre seus amigos em anotações garranchosas naquelas anotações
adesivas como esta:

Greg tem usado este sistema por bastante tempo. Semana passada ele expandiu
seus contatos, incluindo pessoas que estão procurando por emprego, assim sua lista
cresceu rapidamente. Muito rapidamente....

2 Capitulo 1
dados e tabelas

--
........ -- -
--.;:
-- -
..
~

-
--
.....___ - ---·
·- ---...J ---·-
--
,..._------- --
..._

---_
... -- -
--· -
..._

----

_._

___..
·-----
: ::.-
~-
----
---- -·
,_...J,-
---~
--~
~
_.-
---
---...--. --
--- --.---------~
=-- I
--_·
-~
.._.

-- ....
:::-~

------ ---- --
t? -~
-·------- _....,. __

~ OPODEit
~ DO CÉREBitO
Há uma maneira melhor de organizar esta informação?
O que você faria?

Correto. Um banco de dados é tudo que


precisamos.
Mas antes de sair criando bancos de dados, você
precisará ter uma idéia melhor de quais tipos de
dados irá querer armazenar e algumas maneiras
de categorizd-los.

voce esta aqui .,. 3


Us a Cabeça SQL

informações
Aqui estão algum as das anotações de Greg. Procure por
u sobre cada pessoa . Dê a cada pedaço de
simila res que Greg coleto
um nome que descre va a catego ria de inform ação que ela é,
dados
então anote estes rót ulos nos espaços abaixo .

f},, $ra"s ""


f},lvtr s:r,.": OI/07//9(.2- Ja~it llalf\lll-""
f.,5t,l.tt"r4 llt .56/.f wart A,tvtr s:r,iJ ; /O/09// 9('-/
S 4t-/-tt"r4J ~•s c"Mf~'"~("/-,'11 •
4 1},.,,-s~-. Jt s,~...s
M 4 ,+,.,;, Vt·twJ C/} S"t..ft,,."
,.,,,-~. 4 arJs-r-IJS,C4~ sii,"J v•tt) CA
I,-h ru su: C"ltctiJ,al' li4,-/-l4Htt!r@Jrta.t1Jt!c.tpi}}•·c6~
/lV1'4SJ /dl'lCA5';4flt cti'V~AJ I,,tr usu : 'f;l/1."; tscrt vtr.
t!JIIt·fa5';4, Pr~Jcllra: A ..,-,"sJ /..{ 11tl.trts
Pr~Jcllra: u~ ,~JV4 t!Mfl't!j" p•r• rtlacl""•~t,-/-6

j
fi.6C III'I l

1},5tt,;,• Mt"ll"~'
/},tvtr s:r,iJ: /9{08// 979
Ccsall•
Sa, Fra,cisc"J C/}
~J-,,tlt;,a@s-l-arlll~~c"lltt.c~J~
I,,tr usts : A-1-varJ 11•"5"~'·
p,.6CI/I'A; A}6V6 t!Mfl't!j4

4 Capitul o 1
dados e tabelas

Ar9nte seu IárYs


es S9]uyâ9 Aqui estão algumas das anotações de Greg. Procure por informações similares que
je Greg coletou sobre cada pessoa. Dê a cada pedaço de dados um nome que descreva
é, a categoria de informação que ela é, então anote estes rótulos nos espaços abaixo.

~ A;61'41 3ll~j: U'ÍC*'6S '16SSU


cc-h56rt"aSJ p6/(~..,os 4r5•"t3•r
'16SS6S /(cJ4S,
" ~6rcitS~>'I
A-,tvtrs:rio: 0//07//9,2.
f., ,l.ttro Jt Sol.fwcrt
........___ .5offft"r6 lf\U C61111f1"61f\~"'6 •
J,t6 ,.fc,;, Vi•twJ CA-
Cititl'~•ocrJs-r-vs.colfl
I~rtssts: ColtdoitCI" ltvrosJ
fdrtc•{Ão Jt ctrv!i•J tavth{ão.
Procl/rC: ulf\ '16V6 t1111fl"t'6

AJ;s Jtvtilt-...os 4 ,4..,~ ~..,


'14*'~ ~ sdr~"4*'~· IsJ..4 vct
-h ~vJcr 1. s~p•r•r os JaJos
..,.,"s J..~.rJ~.
Primeirtl nome
~~~r.~~~'!'.~.............................................. A-1•, Sovl:vp
fo,tv~rs:rto: 01/07//9,,
Aniversário fi.oft"ss44 ~ f., ~,J.~tl'4 •~ro,:vhc4
·································································· 5
C.s•Jo
P.r.~f#~!.~.................................................. L6clll ~ s., fo,./-4'JIOJ rx..

Ellatlo civil s6 vl:vp@•r~•l:,~cl:pt~~··c4*'


f...,.,., ~ I,ffr~ssts: Jt.P6J pr4jr•..,•{;o,
Local fl.6ct1r1.: Al•l(•

fm.~f! ...................................................... .
lnter.e.1ses............................................... .
Procura

fo,5~,,.,. ,t{~,J434
fo,tvus:r,o: 19/08/1979
C.scl(•
s., fra,ct"sc4J Cfo
fo,5~/íítl.@ sJ..ar•v33coff~~.c6*'
6r~5j: I.I.Vt"a J1.J6 ,o..,~ •
I,ffr~ss~s: A--1-v•rJ J•,s•r. •'}v..,as c•-h5ort"asJ C4*'4
fl.6ctlrl.: A16V6 ~""fr~56 ~ !f,tv~rs:r,'OJ ,;,-hr~ssts ~
Pr6cvrc ~.., svu ,,oJ..•s4~s.

você está aqui • 5


Us Cabeça SQL

Olhe para seus dados em categorias


Vamos olhar para seus dados tiL uma forma cliferente. Se \ oct- cortar cada anotação em pedaços c espalhar os pedaçm \nt
horizontalmente irá obter algo parecido com isto:
nos

1J

I. se, então, cortar outra anotação adesh·a com as categ< mas tlue identificou e colocá-las. em pedaços acima da tnformas·ão
co rrespondente. você tc.:rá algo parecido com isto:

f.s·htlo
Crvrl
l Loccl ( f.lt\ci/ Jli,.ftrtsstsT Proctll'f

A}IJV• (.,.,
/UvcrJ Jc~tjCI'
CcscJ• .Sa.., f'l.a..,clsco ·~tlt.,.@
CA sJ..,. ll}}c•lltt.c-
1

~~

AtJUÍ está essa mesma informação disposta em uma TAB ElA em linhas e colunas.

o c

~\~~
sobrenome primeiro_nome em ali aniversario profissao local estado_ civil interesses procura

Branson Ann annie@boards- 01/07/1962 Engenhe1ro San Antonio, Solteiro, mas RPG. Novo E'"'i
r-us.com aeronáutiCO TX comprometido programação
\
Hamilton Jamie dontbother@ 10/09/1964 Analista de Sunnyvale, Solte1ro Trilha. Am1gos.
eakneckpizza. Sistemas CA escrever Mulherespr
com racionamen'

Soukup Alan soukup@ 02/12/1975 Engenheiro San Antonio. Casado RPG, Nada

l
breakneckpizza. aeronáutico TX programação
com

Mendoza Angelina angehna@ 19/08/1979 Administrador San Casada Atuar, Novoe1


starbuzzcoffee. Un1x System Francisco. dançar
ciom CA
I

6 Capitulo 1
Volta pel9 Banco de Dados
Oque fica em um banco de dados?
\ntes de entrarmos em detalhes sobre o que são tabelas, linhas e colunas, vamos
nos afastar e ter uma visão panorâmica. A primeira estrurura SQL que você precisa
conhecer é o contêiner que guarda todas as tabelas, conhecida como banco de
dados.

······· ·· ······ ·· ···· ··········· ··· ····· ·················· ·· ··· ··· ····························· ·····
Um banco de dados é o contêiner que guarda todas as tabelas
e outras estruturas SQL relacionadas àquelas tabelas .
• • • o . o • ••• o •• o o o o • • • • •••• o . o o . o • • • o. o. o •• o ••••••• • • • • • •• • • • • • • o • • ~..- •• • o-. • • • o • • • • • • • • o •• o. o o. o . o • • • • •

Toda vez que pesquisar online, ir às compras, ligar para uma central de
mformações, usar seu TiVo, fazer uma reserva, for multado por excesso de
ítlocidade ou ir ao supermercado, um banco de dados estará sendo perguntado por
tnformações, ou também conhecido como uma Consulta.

meu banco de dados


- -

\
f.~ Jí'•-5r•~as t I1VX451'4~4SJ ~«'IC4S
Jt JttJ4s ts-1-46 Jtscrí'.f4s C6~6
ci'h-,Jr4s, f.,--i4J 44 vtr rs+4J pt'ISt~
t~ ~4'JC4 Jt tlttJ6S,

você está aqui .,. 7


Volta pelo Banco de Da

Contas
Bancárias
Lista de músicas
do iPod
Eles estão por toda
parte!

Empréstimo o
estudantil o Contas
telefônicas

Maiorpontuação - - - - -
no Vídeo Game
--------
carteiras de
Habilitação

------ cartão de
crédito

Pesquisa no
Google
) cartão da
biblioteca
Reservas de
Hotéis Lavanderia

8 Capítulo 1
Volta pelo Banco de Dados

Seu banco de dados visto através


de uma visão raio-x.••
P~,s~ ,IJ ;._,,IJ
~~~ J•JIJS CIJ"'IJ
1/lrt CIJ,-1-t,;,tl'

311~ 5v•rtl•
,itftJr"'•j'dts...

Um banco de dados contém tabelas.

-·-- --- -·-- ----


Uma tabela é a estrutura interna de um banco de dados

---- -----
-· que contém dados em linhas e colunas.
......
Ovl-r• -- - - --- Lembra-se daquelas categorias que você criou? Cada
fd~l•.
--- --- --
categoria se torna uma colun a em sua tabela. Os
valores deverão estar na mesma coluna: Solteiro,
Casado, Divorciado.

Uma linha da tabela contém todas as informações


sobre um objeto na tabela. Na nova tabela de Greg,
uma linha seria todos os dados sobre uma pessoa. Aqui
está um exemplo de alguns dados que poderiam estar
na linha: John, Jacksoo, solteiro, escritor, jj@boards-r-
us.com.

As informações dentro de
um banco de dados estão
organizadas em tabelas.

você está aqui .,. 9


Volta pelo Banco de D

S!nta-se uma tabela


l\béUx<?, vo~ enconttcu·á algumas an<nações
adesivas e um&. tabela. Seu ttabalh<? é set a
t&.bela pcu·clalmente t<?rmada e pteenchet-
9:5 esp&.ç<?s yaz,!<?s pcu·a <?btet uma

paz, lnte1·io1·. Dep<?is de tazet este


exetcício, vite él. páginél. e ve]él.
se y9cA to\·nou-se uma s9 c9m q_
t&.bel&..
7
2siL/
Shriv~~ C6ttt!t!

23/L/
I
/t.tcl.tiiJ ~t! jt!ltt"'.

lt.tcl.tiiJ 1ft Jt!l;,._

8:s-( Ba
Iod
,..
Al'i.6 si6 frtsavt,l.6sJ ~cs sc4
j6S-I-6S6S

'
krtspj ~,.,5

2,/L/
21:39

Empresa

9
2SIOL/ 8
~---------+--------------+--------------4--------------4-------------~-·~

10 Capitulo 1
S9luçã9 de S1nta.-se uma. Tãhela. v'olta pelo BqncQ de Dados

Seu tt&.bél.lh9 etét set um&. tétbel&.


pm·c'lél.lmente t 91·m&.dét e pteenchet
9S

Meus Lanches
Empresa Horario data nota comenta rios

( s;.,.~v
33 C4fftt 7:'-!3 23/ot/ 9 3vut ptrftl.f.6
Alio st prtllcllpt
n su1.s rtspt~s..fcs
bv,c•"s b6,tl.f.s 8:s-' 2s-!ot/ s- j61'~tii'6S6

,.r• os 110~t~ts Jcs


col1111ts 111'11 ••+ut~ ,..
21:39 2'-!!ot/ ,.4 s•4
N

'
krlsfj /(,;,5
tXIh ..t,.h C6.._ 6S
frts3v,;,l.4sJ ~u
SC6 jiJS.f.6S6$

bv,c•"s b6,v.f.s 22:3s- 2'-!!ot/ 7 "'-h"'jtlttI ..


,.6
Stltlclt,-h

Bancos de dados contêm dados interligados


Todas as tabelas em um banco de dados devem se interligar de alguma forma. Por
exemplo, aqui estão algumas tabelas que poderiam estar em um banco de dados A-3",. ts.f: v~ ~c#fc" Jt Jctl"s '"~
contendo informações sobre donuts: .fl'ts ..fdtlcs. ís..ft •• ,,6 Jt Jct/6S t
Os 116/tlt$ tliiS bCIJCIIS tlt tl4tl6S t r-----~~ meus 1 a n c h e s -c:<::._----- ct•• ~-~~6 Jt ~((IS -'•#fcl.ts.
faitlts 5tn.l.._t~ #fi" ff~ Iffi'CS
I
...luscul1.s.

-- .\.

..,_.
donuts com aele'"'"
.... nola
......_..-
c:OI'I'MM'Iteti.M,
~

SIOIWZZCOI!ee
HO<....
7.43om 2314 9

"""'"- ...
-
2514 ~
8!56 ...

,/ ~
Qlnoln·a()Onf..llt
~<~~~pyl<inQ
9:38pm 2614 6
..................... 1ibtt• '"~#7~~6 ,.,"'"~•s6ts
fiit'• ,~~~""" tit/61'~·s•6 sdl't r- 0unc41n'a oonutl l():3!ptn 2414 7 ..,..,_
n6otomve-
SiJbl't t/6#7ll.fs C6~

-
I
li..,
os Jo1111.fs C 5tltl•. ~

C6btl'.flii'U
"""''""
donuts com coberturas
..,. .... .... ..
~ corn.n~

""""'"""
2614 8

4
........
motno. mM n11o
,.....,.,.,._..
SW'buu Co«• 1-'l•m 2314
..-..
.......,..,
Duncen~"""""
Duncon~""""'
e:M•"'
1035pM
W4
24/o4

1

-

---
v.fs.

.....
.....,....
-.....c.or..
S~Colf. .

-"""'
~··Donula
- .. -
outros lanches
10;:,\&pn'\

-
7:.,lem

0.39pm
&66..-n
....,.
2314

.....
-d
....
l)ok)d.~

...,...,._
.......
"- --

.••
~nt.-to.

·-
~·~'
...--.
~.l!lf'OI»>11a

você esta aqui • 11


Volta pelo Banco Je Da.!

V1sã9 de pert9:
Tabelas

Uma coluna é um tipo de dados armaze nado em urna labela. Uma linha é uma série
de colunas que descrev em atributo s de um único obj eto (registro). Coluna s e linhas
juntas formam uma tabela

Aqui Lstá um c:xemplo de como uma Lista de endereços contendo suas informações
pessoais se parece. Voe~ comumen te verá a palavra campo ao invés de coltma.
Elas querem dizer a mt:sma coisa. este mesmo sentido, linha c registro são
utilizados como sinônimos.

~ Í.s·hs SC4 u c4/v,cs


lê- -</ ~~ ~
prtneio_nome sobrenome endereco cidade estado Identificador

_c~
dados
I Joe Epps dados dados dados

AI Jones dados dados dados dados


fsj.u s •tJ as

\I
lt;,J.•s
Mary Morris dados dados dados dados

I Lou Green dados dados dados dados

ColtJJIIt cs ctJIII,cs t as lt;,J.csjll,;.cs t )


V4Ct .ftr: /tJI"...t/6 11._ .. j.dtl•/

prtneio_n ome sobrenome endereco cidade estado identificador


Joe Epps dados dados dados dados
AI Jones dados dados dados dados
Mary Morris dados dados dados dados
Lou Green dados dados dados dados

12 Capítulo 1
criando sua tabela

Dados
Quer dizer então que t emos
dados suficientes nas minhas
anotações adesivas para
criarmos uma tabela?

Correto! Você pode identificar as categorias para os tipos de dados


que estiver agrupando para cada pessoa.
Suas categorias então se tornam as suas colunas. Cada anotação adesiva
será uma linha. Você pode pegar todas as informações armazenadas
naqueles recadinhos e transformá-las em uma tabela.

c.-~-t,6;oi"as tlll. ,:_,,.,. '

"' ~
1._,., i~

fl.t-.tfi'IJ 11011\t f.s·htltJ Civil I-rhrtssts


s.~,.t,tJI;ot l l /},;II(I'S:I'ItJ PrtJffss';tJ l..tJt:•l
I' i

I
~~~,. M.t,tltJ}· 19/0811979 /},.lfs/-. tlt
Cu•tl• ~., Fr•~~t:t"st:tJJ •"3tlf,.@sh~"}}t:•fftt.cOIII r+r,.,. ~~·~·,.
J I,I
.5rs+t-.u u,rlf
~ Ir/} ~

I Alw• t"'f>l'tjtJ ],
\11!/#.tiOS tlt
~

I I -
ti... A S• AIIOT#.fA• CtltStV• St
~o,.. VtJctj: sdt 311t u ccl-t5o1'1'#.S .,.,.11,.~41 ... (... tli'sp•Sij•• ,..,.. I•I' ... AI'
sio cs c•ltmcs v ...• liJ~I.c.

sobrenome primeiro_ emai I aniversario proftssao local estado_civil interesses procura


nome
Branson Ann annie@ 1/07/1962 Engenheiro San Antonio, Solteiro, mas RPG, Novo
boards-r-us. Aeronáutico TX comprometido Programação emprego
com
Hamilton Jamie dontbother@ 10/09/1966 Analista de Sunnyvale, Solteiro Trilha, Amigos,
yahoo.com Sistemas CA Escrever Mulher para
relacionamento

~ Soukup Alan fprose@ 2/12/1975 Engenheiro San Antonio, Casado RPG, Nada
í Mendoza Angelina
yahoo.com
angel79@ 19/08/1979
Aeronáutico
Administrador
TX
San Casado
Programação
Atuar, Dançar Novo

(c gmail.com de Sistema
Unix
Francisco,
CA
emprego

: ' - - •.•t c•tl• .,.-1-cf• ctltstv• potltl': Stl' fl.l•cctlc t ...


I • • I

Finalmente. Ok, então como


crio a minha tabela? () D

13
Use a Cabeça SQL

Considere os bancos de dados e as tabelas abaixo. Pense sobre que tipos de categorias e dados
você encontrará em cada uma delas. Estabeleça a provável coluna para cada tabela.

banco de dados biblioteca ~ Sa,c~> ,te liali~>s para VJt\a blblt"t>ffca

livros: . . ... . .. ............. .. . .. . . ...... ·


livros
[ frequentadores_da_biblioteca: . . . . .. . ..... .

da biblioteca
frequentadores_ -

E 3
banco de dados banco

informacoe s clientes: ...... . . . . ..... . infor.macoes clientes

con t as bancarias: ... . ... .... . . . . . ... .

contas bancarias

E
banco_de_dados_loja_online

infor.macoes_produtos
inforrnacoes_produtos: . . ..... . . . .. . . . ... .
J carrinho_de_compras : .......... . . . . ... .. .
carrinho_de_compras

E 3

14 Capitulo 1
solução dos exercícios

Considere os bancos de dados e as tabelas abaixo. Pense sobre que tipos de categorias e dados
você encontrará em cada uma delas. Estabeleça a provável coluna para cada tabela.

Exercícios
AJ';4 Sf! prt4Ctlpf! Sf! Sti4S
rtsp4s.fcs p•r• 4S 1'14/fl\f!S
841'JC4 tlt JatltJs para tl""a bi"bltoffca J4S C41tii'J4S 1'/';tJ !Jaffr(!""

banco de dados biblioteca ~ f!Jc4.f4/fl\f!,ff CtJ"" 4S


I'JtJSS4S rtSptJs.fas.
I
livros
·· tadores_ da_ bibl ~o
f requen prtlt\ti'rtJ~-114...
. teca: ........ ""(!'J
S41Jrti'JtJ""f!'J f!I'JiltrtftJ

da biblioteca
frequentadores_ -

E 3
banco de dados banco
8a11ctJ Jt JatltJs para li"" ba11ctJ
~

. . trt"/N!trtJ_11tJ/IItf!J StJbl"f!I'JtJ/IItf!J f!l'lilt!l"f!ftJ


1nformacoes cl~entes ........................... . informacoes clientes
- I'Jtl~rtJ_Ja_ctJ,hJ ~~1'4 tltJ st5t1rtJ S«t"a
J
contas bancarias

3
banco_de_dados_loja_online

informacoes_produtos . 1'/tJifi\f! .falfi\ai'Jit4 cvs.ftJ


~nformacoes_produtos: ....... ~ ...... . J ...... .

carrinho_de_compras: -!_4_-l-:~ 1...~~~':~~~. ~tJ_iJ.i3~..-~~~·~".ff


carrinho_de_compras

E 3

você está aqui~ 15


Use a Cabeça SQL

Tome o comando!
lmc1c o seu sistema de gestão de bancos de dados relacionais SQL (RDB\IS) c
abra uma janela de linha de comando ou ambiente gcifico que pcrm1ta lJUC \OCc "C
comunique com suas RDB\IS. Aqui está nossa janela do rermmal, após Jntc1armos
o \1\"SQJ..

r ,
O s,.,,_, ~~~ ~t~l.i4':_ ~ 4 pr4'"fi-
J~ C4olt\I.,J4, "C~ J'"5l-/-1.r1. S~liS
,
Íspl.j4S "C4 S.4 p~ro~t~l.f,iJ4S
"4S "4olt\~S J4S ~I.,C4S ~~~ JI.ÂIS r
C4olt\I.,J4S /4J4 l.f'4S ~~~. ~ -1-d~/u ~~t~ S~LJ ~,-/-·4 v~t~• ta
Sl/~!1;,1.'-J C4olt\4 S~pl.ri.J4rl. Jt
Pnmc1ro \OCt precisará criar um banco de dados para armazenar todas as suas
tabelas.

O Olgttc a ünha de código abaixo para criar um banco de dados chamado gregs_list.
G p•l•vru (v,J~rSc4rt)J p4Jtr~
s~r 11s•J•.

S.v woaod• d&t ~1


I
. CREATE DATABASE greg_list;
~ ' - - - - - - - - -- - - - - - \ - -- - - - --'
I
. "---- •cd•r c 4 ~t~ v~t~
p4,-/-4-~V:,..Jllll.,
Isto

Clt.f.A-rí bA-rA-8A-sí : 4 c4~t~.,J4,


() t
"4olt\~ J4 ~I.,C4 ~~~ t/4J4S J"~JS _lls-1-

F le Ed I W d H I Comma dMéBab
~ As
DA

> CREATE DATABASE gregs_list;


Query OK, 1 row affected (0.01 sec)

ísh t• rtsp4sl-• 114 Jt.b8XA.S


f'l'l. 3(1~ Sl.l#l. 311~ Sl/1.
co,st~l-1-• l4l ~x~cv-1-•J• C4~t~
Sl/C~SS4,
Você leu a introdução?

Estamos usando MySQL para controlar nossos


Vt;ja lstol bancos de dados, porlanto, os comandos no
seu Sistema de gestão de Bancos de Dados
(DBMS) poderá parecer um pouco diferente.
Veja Apêndice 11 para instruções de instalação No
de MySQL no seu setVidor. con

16 Cap1tulo 1
dados e tabelas

e Agora precisa dizer ao seu software de banco de dados para de fato


utilizar o banco de dados que você acabou de criar.

jusE gregs_list;

> USE gregs_list;


Database changed

f: Por que preciso criar um banco de dados se tenho apenas uma f : E se eu preferir utilizar "gregslist" sem a sublinha?
tabela?
.ft:Vá em frente. Omais importante é ser consistente. Se utilizar ·gregslist"
I
R. Alinguagem SOL requer que todas as tabelas estejam inseridas em um como o nome do banco de dados sem sublinhas e a segunda palavra
• banco de dados. Há boas razões por de!rãs disso. Uma das características
do SQL é sua habilidade para controlar acessos às tabelas por múltiplos
com inicio em maiúscula, então deverá manter a forma de nomenclatura
convencionada em todas as suas tabelas neste banco de dados, por
usuários. Estar apto a permitir ou negar acesso a todo banco de dados é, exemplo, ao nomear sua tabela "meusContatos·. para ser consistente.
às vezes, mais simples que ter que controlar permissões em cada uma
das multas tabelas.
P: O banco de dados não deveria ser chamado de greg's_list? Por
que o apóstrofo foi deixado de fora?
f: Percebi que foram usadas apenas letras maiúsculas para o
R: O apóstrofo é reservado para uma utilização diferente em SQL. Há
comando CREATE DATABASE. Isto é necessário?
maneiras de poder incluí-lo, mas é bem mais fácil apenas omiti-lo.
1\' Alguns sistemas de fato requerem que as palavras-chave sejam em
ma1úsculas, mas SQL não é case sensitiva (sensível ao tamanho da letra).
lstoquerdizerque não é necessário colocar os comandos em maiúsculas. f : Também notei a presença de um ponto-e-vírgula ao final do
mas é considerado uma boa prática de programação em SQL. Observe o comando CREATE DATABASE. Por que precisamos dele?
comando que digitamos:
ft:O ponto-e-vírgula está lá para indicar o final do comando.
CREATE DATABASE
oreQs_list;

As letras maiúsculas tomam mais fácil identificar um comando (CREATE


OATABASE) a partir do nome do banco de dados (gregs_list).

f:Hã alguma coisa que eu deveria saber quanto à nomenclatura dos


bancos de dados, tabelas e colunas?

R.:Geralmente éuma boa idéia criar nomes explicativos. Às vezes isto fará
com que utilize nomes compostos. Não é possível criar nomes separados
por espaços, então as sublinhas permitem que se criem nomes mais
explteativos. Seguem abaixo algumas variações que você poderá ver:

gregs _l ist
s oregslist
)
Gregsl ist
gregsList Letras maiúsculas e
sublinhas ajudam a
Normalmente é melhor evitar capitalizar os seus nomes a fim de evitar
confusão, pois SOL não é sensivel ao tamanho da letra.
programar em SQL (ainda
que SQL não precise delas!)

vocé está aqui 11> 17


Use a Cabeça SQL

Preparando a tabela: o comando CREATE TABLE


Vamos ver tudo isto nos dados sobre donuts. Digamos que lista donut
esteja tendo problemas para lembrar o tipo de donuts que
comeu no lanche apenas pelo seu nome, você poderá criar nome donut tipo_donut
uma tabela para poupá-lo de lembrar deles. Abaixo há um
Blooberry recheado
comando único para ser digitado na janela do console. Após
ter digitado, aperte ENTER para dizer ao seu SQL RDBMS Cinnamondo circular
para carregar o comando. Rockstar enrolado Cra
Carameller enrolado
\oce
Appleblush recheado
anota
T\B

A-3vt ~s-1-: 6 c611\a171i6


S~L f41'1A crlar as O 17611\~ lia SliiA .f.d~la llitv~
t~-,.~17aS 4f~l'ff f.Al"íf.Jt ,..f.
.f.d~lu - 176ff as 1~-l-r•s t;,i'cl41' llll\a 176V4 lt;,l.4 176 S~ll
, s~r .,,..,,,;scvltA ~, -hr llll\a I
ll\4ltlscvlas. C611\417li6 f41'a ftctAI' ll\4i's f•cll
St1~/t;,l.4 46 t;,V~S ~~~~ ~Sf1Aj6S, I
par• ltr 6 311t t ccli• C6tS4.

O fll.r';,-hs~
d~rf6 dr~ 11. CREATE TABLE lista donut
Jtsfc ~~~~ c61li174S 4
S~l'~ll\ cri4i!lii.S.
( A- v:r3 vla s~f•ra u
C61li174S a Stl'tll\ CI'I..~·S

() 17611\t "'• ft'l....til'll. ~


C61ll1711. 1711. ff!btltA.
nome donut VARCHAR (10) '
O 17611\t 11111. st3ll1711ill. tipo_donut VARCHAR (6)
C61ll1711..

, ~

() fll.l'';,ffS~ ftcl•ll.tl6
() f617f6-t""V:I'Jll14 i!lt) 46 f.s-h
1
t llll\ bJI'"íJI' "íljPf. ~-h;6 llit liatl6), ÍJL_
f~cl.11. 4 lts./-4 ~~~
Sl/~~~17~~~ Vtl'lt ~~~~ Vll.l't"'I.Vtl t C#ti-Jt ~~~ CII.I'C~
C61ll17aS,
S~L Jt~8bS 311~ 4311~1~
I
t 6 ft;,4/ 116 C611\IA17i!l6, (cl.41'4cffrJ
- ...
~"' ,;,3/ts) ~ liSII.J6 f41'a Jll4rJar
,;,f6rll\4{;ts 311~ u-1-46 4r"'a}~l7ali•s c6~6
fflf.f.6s. O(') Si"JI7'Jtcll. 311t IA 3~~~~"11. 11\4/ft-...4 3(1(
43lltlt C4"'f6 f6J~I'4 11.1'11\43~1741' ~ ~3lllV41tl7ff •(
C4t'aCffi'~S.

18 Capítulo 1
dados e tabelas

Ei! E eu? E sobre um CREATE


T ABLE para o meu banco de
o G dados gregs_list?

Cr1and«t•ama tãbela um pouco mais complicada


Você se lembra das colunas para a tabela do Greg? Nós as escrevemos numa
anotação adesiva. Você precisará delas para escrever seu comando CREATE
T.\BLE.

I,

ts+cll6 ctvll

'~rtssts

sobrenome primeiro_nome email aniversario profissao local estado_civil Interesses procura

~ P~DERDO
"i5f:f cEREBRO

De que forma os nomes das colunas contidos na anotação


adesiva se diferem daqueles na tabela acima? Por que isto
é importante?

você está aqui..- 19


Use a Cabeça SQL

Veja como é fácil escrever em SQL


Você tem nsto que para cnar uma tabela é necessário categorizar seus dados
em coluna~. Então, defina o upo de dados c tamanho de cada coluna. Depois de
estimar o tamanho gue a coluna precisará ter, escrever o código é como andar em CRE.ATE
linha em reta.

sob
J\i>9nte seu lápis
O código à esquerda é o nosso comando CREATE TABLE para o nove pr
banco de dados de Greg. Tente adivinhar o que cada linha do comancw
CREATE TABLE está fazendo. Inclua também um exemplo de informa·
ção que irá em cada coluna.
ema

ani
CREATE TABLE meus contatos

pro
sobre_nome VARCHAR (30),

primeiro_nom e VARCHAR (20), loc

email VARCHAR (50),

aniversario DATE, est

profissao VARCHAR (50) ,

local VARCHAR (50) , int

estado civil VARCHAR (20) ,

interesses VARCHAR (100) ,

procura VARCHAR(lOO)

) ;

20 Capttulo 1
dados e tabelas

J\p9nte seu láp'ls Aqui está o que cada linha do comando CREATE TABLE está fazendo e alguns exem-
plos de dados para cada tipo de coluna.
S9luçã9

CREATE TABLE meus contatos Crll.r 111011. hí~l• 1'1610\~l.tll. 1>1~11s _,6,+,.;.6S

foi r~ I. lts./-1. ti~ C6fiii'II.S fl.l'l. S~l' l.tilct61'11.tll.

A't/tCIÍll'll. 111>11. C61111'11. cl.l.l>!l.til. I


SIJ61'~1'161>\~ 311~ f6tl~ C61'1ffl' l.ff
I 130 I
/tl'ltlti'Sill'l
I

sobre nome VARCHAR ( 3 O) ,


Cl.l'l.cffi'~S

A'tlt"climl. 111>11. C61VI'II. cl.l.l>!l.t/1. prt-,..~il'll _ 1'1610\~


I I
311~ f6tl~ Cll,.ftl' l.ffI J0 J,.,,..,, I I

novo
tando primei ro_nome VARCHAR (20), CI.I'I.Cffi'~S
trma-
A'tltCIÍll'll. 111>11. C61VI'I« ci.CI>II.ti« I I
~10\l.ll 311t f6tl~ Clll'lffl' «ff
I
Jtll _ll'1tlti'Sil~
email VARCHAR (50) , S"0 Cl.l'l.cffi'~S írt~l:,tcl:pi}}•·
C61>\

I I
/ttltCIÍll'll. 1110\1. CtlfVI'II. cl.l."'l.t/4 Cl'llV~I'S#.I'IÍl 311t flltl~ C6,.ftl' tic./-cs 'osio9/!98o'
aniversario DATE,
A't/tCIÍll'll. VI>!#. C61VI'I#. cl.l.l>!#.t/1. I I
f1'6ti'S S#.ll 311~ f6tl~ Cll,.ftl' «ffI S"0
I
iscrr-1-61'#. r~,,,,.
1 I

Cl.l'l.cffi'~S
profissao VARCHAR(SO),
A'tltCIÍll'll. 11"'41 C6flll'l#. cl.1."'1.tl1. lllCI.I 311~ flltl~ C61'1ffl' l.ff
I I I
I p,,6 A-1-l-t>J C/t
1

S"0 Cl.l'l.cffi'(S
local VARCHAR(SO) ,
A'tlict""• ctJIIII'I« cl.c"'ctlc ts-1-l.tltJ _ctvil 3vt f""~ ctJ,.ftr a.ft 20 c
I I I I
S"/ffir6
I

A'tlt"ct'ill'll. 11"'« c61VI'III. c/..1."''"' I I


,;,-1-trus~s 311~ p6tl~ c6,.ft,. a-1-t I 00
I I
c.,~311~J /t.~,.ft,.s
1 I

estado civil VARCHAR (20) ,


Cl.l'tcffl'f!S

A I I I I
'JICIÍJI'II. 11"'1. C61111'11. '"'"'""• f1'6CIII'I. 3"~ '""~ C6,.ftl' l.ff I 00 /t.tlcci'"7""'~,+6J
interesses VARCHAR(lOO),
Cl.l'l.cffl'f!S fo~>~ljtJS

ttr ..,.,. • lts-1-c ti~ c"tv,as f>411'1. ctlt"ci'Mar t f",-1-~>-t-vfrjulc


procura VARCHAR(lOO)
lii,l.li}l. " '""'""""

);

Finalmente, criando a tabela meus_contatos,


\gora que sabe exatamente o gue cada linha está fazendo, você pode digitar no
comando CREATE TABLE. Você pode digitar uma linha de cada vez, copiando o
código no topo desta página.

Ou rocê pode digitar tudo como se fosse uma grande e única linha:
'CIIICI TM&ol ..._t:IOnt.t.eta(lut..- v.t.M:U.Jt U O), fiut..- ~l20) , -il ~(50. , bicthdot.:t OA:n r: , pn>t'M.t- ~(50) , locaU- ~ ( !loO) U.aWI VJ.JI(:IIU; f20l ut.~~-~ YNIIC:aM(lOO. ~ VA.IICIUJl{lOOH

Qualquer das maneiras t(ue escolher, antes de apertar o enter depois do pon to-e-
yirgula, certifique-se de que não deixo u faltar nenhum caractere:
last name VARCHAR ( 3 ) é uma coluna bem dife r en t e de
.astname VARCHAR ( 3 0) !

voce esta aqui • 21


Use a Cabeça SQL

Sua tabela está pronta

v.,,;-ptrcdtiJ &"t •., aptr+ar


tJrl-tr .,.:s ., ,..,,+.,-~vJr'"'•J
., ,.,....,J., 1.,,. l•"•"'}l.tl4 t
tllsst ,.., stv Sls-/-t..,,. S~L.
par1. pr.,ctss:-1.,?

o
o

Na verdade, você precisará de alguns outros tipos de dados,


como números.
Suponha que nós adicionamos uma coluna de preço para nossa
tabela de donuts. Não precisaríamos armazená la em dados
tipo \'\RCH \R. Valores armazenados em V\RCH \R são
interpretados como texto, ass1m sendo, YOCe não estará apto
a realizar operações matemáticas neste tipo de dados. \las há
outros tipos de dados que não lhe foram apresentados ainda ...

•~P~DER DO
CEREBRO

Antes de ir mais além, pense em alguns tipos de dados que precisam


ser diferentes de VARCHAR ou DATE.

22 .aplrulo 1
dados e tabelas

Perambulando por aí
Estes são alguns dos úpos de dados mais comuns. O trabalho deles é armazenar
,eus dados sem bagunçá-los. Você já conheceu VARCf-IAR c DATE, mas diga olá
para estes.
IAJrtJv IAJrf.bf.lt. •c"• 3v~ u
,,:lt\~l'tlS tJtvll.lt\ S~r S~"'f>l'( t-,.hi'rtJSJ
~ pr~/~r~ 311~ S~(IS tfl.tftJS S~l.lt\ tJ~ (llt\ lt\4S ~~~
N /_ I
"l.tl 'f"'Cit\ lt\~tJtJ ti~ "(llt\f:NJS
+•lt\•""tl p•tJrctJ, "t51..ft-Vt1S.

biC .Jr&i•jitl p1.r1.


) I jl
bECIAAt... Ílt: tJ•r• .ft~tJcs cs j

NtJS
N
"4tl sd(lt\tlS 3(1(/t\ t:/t
...
ccsts tltcllltl.t"s 311t VtJC( pt:tllrJ ~J t:l~ ts.fcvc ptr•lt\~vlc,,ltJ
I
./t tlt st t'lcl.t:r. ftll' 41,

t
Ú• cl.t~~ttJ• .f.,.ftJ tJt: ~ Ct..lt\t-tl tJt 8t..t>8. f.tt
bforíri!.A.í 3v,,+tl jtJS-/-1. tJt Jl't,tJ(S IJftJCtJS tft:
rittísrtt~ tlct/tJS (lt\ -hx-1-6.
l.~t,tlt,JtJ JtJ stsfflt\t
~{, Jt.b6!.A.S v.fr·tl~ttJtJ.
ú, cvt"J.a Jt Jt.f.s ( l.t~rcs.
L N ...
Ú• Ttlll 11111 t'rlt\l.tl 5tlt\(tJJ
rittí (J.tlr:,.,D)J 3vt: ,;ti bA-rf. lt\1.~/t\ 6 CtJ,-/-rtJI( tJt: SIII.S
st t*'f~:~r.f. 311t: tJt.f. ~. tfl..fi.S. Ílt\~tll'l._, ,';tJ ft'JIIf: p41'1.
,
l.tJI'I.I'tÕS,

V/tJt.C/1/tJt. pt~Jt ctJ,-hr iJI.iJtJS tJt:


-ltKI-~:~s Jt ,.ft. ZS"S" cl.rl.cffrts tJt
I I I
;.....,1.~:~. Í/1. t: llt:xwtl t st •ll~.pr• l.tJ
.f.~tt«'ll.ll tlt StiiS JI.JtJS.

···· ···· ···································································


Estes nomes de tipos de dados podem não
funcionar no seu sistema SQL RDBMS!

Infelizmente, não há uma universalidade de nomes


Veja Isto! aceitos para vários tipos de dados. Seu programa
de SQL especifico pode usar diferentes nomes para
um ou mais tipos de dados. Cheque seus documentos e verifique
quais são os nomes corretos para seu ROBMS.

: ............. ................................................................................. .

voce está aqui ~ 23


Use a Cabeç a SQL
I

QUE TIPO DE'DADOS?

Determine qu<.: ripo dt: dados faz mais sentido para f el


1
cada coluna. E quando fizer is~o, preencha as outras !siu tl4t"s ,v,~r4s 11'14s+r•, 3v•,rl-4s i
informações pendentes. ~~~,-.fiJs 4 i•,c4 ~~~ tl•ti6S ti&~ ~sp~n.r t~~fcm
fr~,.h t/IJS tl~c,..,•,"sJ ~ 3v•,,os tl~pois,
~
I \elhor o~ão Je T'tf"'" JeJ
---
~ome Ja Coluna Desctição Exemplo

preço () custo de um item à venda 5678.39 DEC(5,2) ~ ]


cep ~

peso_arom1co
Peso atômico de um objeto
com seis casas decimais
rJpt1
Inc. c'tou lU CC'\UU.io de acinntstas. I J.:s
Bloco de texto grande, ma1s ac>haram de faur unu dc:morN r.oç:iu ~ h• ce
comentanos dásuco-§ voando em drrt"(':ICJ :t crb. I ~sa toa su;a
i--
de 255 caracteres kléU d<: rtlt.b?' \"oci pr«lS2 p;i'~r um tr:mpo rm
\lnmtu.com qua.nó<bdo
p<
t\ quantidade deste item f-
quantidade
dbponível no estoque
percentual_de_ C<
3.755
imposto
f--
tírulo_do_lino Use a Cabeça SQL
~~
sexo L m caractere, ~r ou F CH:\R(l)

numero_do_tclcfont: Dez dígitos, sem pontuação 210555236' i ~


1--
\bre\iaçào em dois
estado RJ, SP t1
caracteres para um estado
amvcrsano 22/ L1/2006 DATE se
jogos_vencidos I T -
hora_do_cnconrro 10:30 12/04/2020 n
-
Cl
não e;e<iiteOl •
Petgunta.'l Idi9taS
[;
f .Por que não usar apenas o BLOB para todos f :Por que preciso dos tipos numéricos como f : E então? São estes todos os L: IC
os tipos de dados em texto? INTe DEC? dados?

R,.: Seria um gasto de espaço. Uma VARCHAR ou It Tudo se resume em tamanho e eficiência R..: Não, mais estes são os ma1s impcit ~
CHAR ocupa um tamanho especifico de tamanho, de armazenamento de um banco de dados tipo de dados DATE varia de acordo oorna 11
nada superior a 256 caracteres. Mas um BLOB Escolhendo o melhor tipo de dados de cada coluna RDBMS, então será necessário cor.s:1
ocupa muito ma1s espaço. À med1da que seu banco na sua tabela reduzirá o tamanho da tabela e fará tabela particular de documentação pô'< L-
de dados cresce você corre o risco de que ele fique operações nos dados bem mais rapidamente Informações Nós recomendamos SQ!.
sem espaço no sue HO Você também não pode (O'Reilly) como um bom livro de reter:
executar certas operações nos BLOBs que faria no explica as diferenças entre s1stemas
VARCHARs e CHARs (aprenderá mais sobre isso
posteriormente).

24 Capitulo 1

-- -- = ·~ -- ~ - -
- -~
.l -;
dados tabelas

QUE TIPO DE DADOS?

O Cf.P t-. c;1.1,s pc:Sts peult


Detrrmme que tipo de dados faz mai~ ~cmido para
-.1.1lJ.cs v~ts ,;;6 str Jt 8
cada coluna. Enquanto fizer 1s~o. preencha as outras
mformações pendentes.
ccrcc-hrtsJ t,J-';6 l.lsc-.4S
V/}JtCI/I}Jt pcrc p41.1pcr tspCf6 ,6
"" I I
lC,C6 Jt JCJ6S. ~ct rc-.lt-. p4Jt
ffr 1.1scli6 CI/I}Jt ,tsff CC'"f6
l&c,J6 t-. c4,J.I. 31.1t 4 Cf.P J&t
ff rl.l-. ~,,..,,1.6 txc ~.,,

1
~ me Ja Coluna De~'il(ã" EXélllplo I1\\dhu1 op'ião Je Tf~•:-, Je DaJo-. I

prcco O cusro de um item à venda 5678.39 or.<:(S,2) /


Cçp bt s-•/O ccrccffrts 90210-0010 V/}JtCI/I}Jt(lO) ~
Peso atômico de um objeto
pcso~atomico
com seis casas decimais L/.002,02 bf.C (10,6)
luc. t"!.letu nJ. rtumao de acanm ... la~ Ele ..
.,cab:anm de fa.1c. r uma dcmnnc;,t:raçãn c h.ã
Bloco de textos grande, para
comenrarios
mms dc.: 255 caracteres
d.i,nct~ \nando em clln..--çao a te.b. E'c.a fua sw
1dtra dC' (llall1' \ occ. prc. cts.a p;a_c;--ar um rc: mpo em
8L08
\f,,nlrcu:nm

.\ yuamidadc.: deste item


qumudade
thsponí,·c.:l no estoque 239 IAJr
paccntual_de_
tJ-.c p4rct,J.-.,t-. 3.755 bf.C (4,2)
1mposto

utulo_do_livro tJ-.c ll;,t.c Jt ffxJ-4 Use a cabeça SQL V/}Jt.C/1/}Jt (50)


,
sexo l'm caracter~:, :\f ou F to( C! I \R(l) ( v-. ,l.l-.tr4 Jt,
J J.,J,,f,."'' s~r•
r --;;-
st-.,.rt 114 -.ts-.6
numero_do_telefone Dc.:z dígitos, sem pontuação 2105552367 Cl//}lt(10) J.,... .L 'f::.J..
<\brc\'iaçao em dois ~Sff Cll'"f6 C6-.o
esudo RJ, SP Cl/l}lt(2)
caracteres para um estado /,;,t.c Jt ffxJ-6
N

p4r31.1~ ,.6
aniYcr~ario btcJ -.u t .,6 11/22/2006 DATE
~>rtcl'slt-.6S rt~tlt'f, r
,t,l.l.l..,c 4ptrcj'fo
>s tipos de ,,:_..tro ,;,ff,,.6
ti-.
jogo~_n:ncidos r~prtst,J-c,#/6 4 ,,:_..tr4 ;s- 1'\T --..+t-.cAcc c4-.
tltsJ ,,.,~. 31.1t
~PC>rtantes. O
Jtj6J6S Vt,clJ6S ~..:...... -
v
'~

orno sistema
hora_do_encontto ti-. Jlc t 1.6rc 10:30 a.m. 4/12/2020 bl}rf.rit.tf.
)nsultar sua
>ara maiores
~inaNutshel
erências que
{ {
RDBMS.
rito(f.Sr/}M.fJtr~tl-.t,ff 1.1J.fll3cJ6 per• t
c~~phr•r • l.4r• ci1.1ciJ bl}rf.rit.tf. t c
-.t11.6r 4ff';6 t-. st J.rcJ.c,J4 Jt cr-.c3t,lr
1.1-. &t,J-6 l1.1hr6
você está aqui 1> 25
Use a Cabeça SQL

- PONTOS DE BAlA - - - - - - - - -- - -- - - - - - - - - ,

• Divida seus dados em categorias antes de criar sua • Todas as tabelas são criadas com o comando CREATE
tabela. Presta atenção, em especial, no tipo de dados TABLE, contendo os nomes da coluna e os tipos de dados
para cada coluna. correspondentes.

· Use o comando C REATE DATABASE para criar o banco • Alguns dos tipos de dados mais comuns são CHAR,
de dados que conterá todas as suas tabelas. VARCHAR, BLOB, INT, DEC, DATE e DATETIME. Cada
um tem regras diferentes quanto a conteúdo.
• Use o comando USE DATABASE para entrar no banco
de dados a fim de criar suas tabelas.

o o

Bem pensado. Verificar seu trabalho é o mais importante.


Para Yerificar com o que se parece a tabela meus_contatos que cnou, você pode
usar o comando D ESC para vê-la:

r DESC meus contatos;


/)E.sc; • drev'4fâ'4 pcr4 /)f.SCJt..I."Il~ (
t;l'- lftscrevtr)
Tente Yocê agora.

> DESC meus_contatos;

Sua tabela DESCrita


Quando esciver digitado o comando DESC, Yocê verá algo similar a isto:

... ;

> DESC meus_contatos;


+---------------+--------------+------+-----+---------+-------+
I Column I Type I Null I Key I Default I Extra I
+---------------+--------------+------+-----+---------+-------+
sobrenome varchar (30) YES NULL
primeiro_nome varchar ( 2 O) YES NULL
email varchar (50) YES NULL
aniversario data YES NULL
profissao varchar(SO) YES NULL
local varchar(SO) YES NULL
estado civil varchar (20) YES NULL
interesses varchar(lOO) YES NULL
procura varchar(lOO) YES NULL
+---------------+--------------+------+-----+---------+-------+
9 rows in set (0.07 sec)

26 Caprtulo 1
dados e tabelas

~P~DERDO
~CEREBRO

O que você acha? Que tipo de problemas poderia


surgir ao adicionar uma coluna?

Ímã de gelctde1tct - SQ.L


O código para criar um banco de dados e a tabela com a nova coluna "sexo" estão todos misturados
em cima da geladeira. Você consegue reconstruir a linha de código para que eles funcionem?
Alguns dos parênteses e ponto-e-vírgula caíram no chão e eram muito pequenos para serem
encontrados, então fique à vontade para adicionar quantas achar necessário!

[USE gregs list J


sobrenome VARCHAR{30)
primeiro_nome VARCHAR{20)

04 interesses VARCHAR(lOO)
procura VARCHAR(lOO)

civil VARCHAR(20)
estad o_

[ CREATE DATABASE gregs


- list l
profissao VARCHAR(SO)
local VARCHAR(SO)

I''
lcREATE TABLE meus_contatosJ
--
[ sexo CHAR(l) J
Ao terminar, tente digitar o novo código CREATE TABLE
no seu sistema SQL para adicionar a coluna sexo!

você esta aqui 27


Use a Cabeça SQL

S9luçã9 de ímãs de geladehél- SQL


Seu trabalho era reconstruir a linha de código para organizar o código que criaria o banco
de dados e a tabela com a nova coluna sexo.

I
- CREATE DATABASE gregs list J
USE gregs_list

A~1/1. f!STI4
,, 41 C41t/'541
I
sobrenome VARCHAR(30)1
l"f!C41'1S.f.rv/ti41, C41/tltplll"f! primeiro nome VARCHAR(20) 1

Sl/4 l"f!Sp41s/-a. f!<lt! l"f!/4f;41


4 ts+• t C41,+,;,vt lt ~
"'IIUJ• .,

Você não pode recriar aniversario DATE


f

uma tabela ou banco sexo CHAR(l) I


J
profissao VARCHAR(SO),
de dados já existentef local VARCHAR(S0) 1
V41ct -h,-1-4111 tl,j;-1-a.r 41 741V41 C41""""tl41 CJtt/)rrt
r/)r$1.-í? .St -h,-1-4111. iil tltvt sdtl" 311t
.JoJI ,., I r
estado
civil ARCHAR(20) J ""
il S41111f';41 t/ts-h f!Xf!I"CICÜJ '1441 ~11,/41'4 11
interesses VARCHAR(l00) 1
a.t/tci"41'11ll' 11/f\11 '141VA C41111'111,
procura VARCHAR(lOO)
.St -h,-1-411/ tl'5i.f11r 41 c:,/;41 tlf\ stll ) ;
SiSfflf\11 .5~1.-J V41Ctp1'41V4Vtl""t'1-h Vlll
4'J41 4S $1-...:

/} '141V4 C41/V'Itl ---::>


p41"4 Sf!/<41

I
()t.J 41/., ts st cotli5o 5trll
lllf\11 lf\f!"Sfl5t!<lt! tlt f!l'/"41,
Partct 311t 4 .fdt/a ,';o
foi cri'il,/4, ~

28 Capitulo 1
dados e tabelas

não exYstem •
f etguntas Idi9t.Cls
r Quanto ao exercicio lmã de geladeira - SQL, por que obtivemos
uma mensagem de erro?
f :Então há um jeito de adicionar uma coluna esquecida, ou terei que
refazer toda a tabela?

~:Vare não pode criar uma tabela que já existe. E, uma vez criado um R: Você terá que refazê-la, mas antes de criar a tabela com a coluna sexo
baOO> de dados, não precisa criá-lo novamente. Outros erros possíveis adicionada, terá que eliminar a tabela antiga. Como ainda não há dados
eslàoemesquecero ponto-e-virgula. Verifique também se digitou qualquer na tabela, podemos simplesmente eliminar a tabela antiga e recomeçar
IJilla das palavras-chave SQL. a tabela.

r Por~ não há uma vírgula após "procura VARCHAR(100Y' como todas


asolb'aScolunas lêm?
f :Ese eu já tenho uma tabela com dados inseridos epreciso adicionar
uma coluna? Há uma maneira de fazer isso sem apagar a tabela inteira
e começar tudo de novo?
~ Acoluna 'procura" é a última coluna antes de chegarmos aos
parênteses, que indica ao sistema RDBMS que o final do comando é ali, I{: Ótima pergunta! Há uma maneira de alterar sua tabela sem afetar os
ass1m sendo, a vírgula é desnecessária. dados inseridos. Nós faremos isso mais adiante, mas no momento, como sua
tabela está vazia, eliminaremos a tabela antiga e criaremos uma nova.

Se iremos digitar nosso comando CREA TE


TABLE tudo de novo, aposto que pouparíamos
bastante tempo se digitássemos todos os nossos
comandos SQL em um editor de texto tipo Bloco de
Notas.

Esta é uma ótima idéia, e você vai querer usar um editor de texto no decorrer deste livro.
Desta forma, poderá copiar c colar os comandos no seu sistema SQL quando quer que precise
dele. Isto evitará que tenha que digitar tudo de novo. Você também pode copiar e editar
comandos SQL antigos para criar comandos novos.

fora com a tabela antiga, pra dentro com a nova


o Eliminar uma tabela é muito mais fácil que criar uma nova,
use o simples comando:
•••f! " """'( ti.• -/-df!/4 •
tJ C4itl4"11" p 4 ,.4 -,~4 ,. 4 -1-dtlc••• str tl.f!lt.fatl.a.
v:: ~
;------~--------" fJ';" st uzytjll. 1/tJ
DROP TABLE meus contatos; ~ p 6 ,.f6 -e-v'r511/4,
File Edlt Wlndow Help ByeByeTable

> DROP TABLE meus contatos;


Query OK, O rows affected (0.12 sec)

DROP TABLE funcionará independentemente DROfn\BLE


da existência de dados na tabela, então
use o comando com atenção extrema. Uma Â.pé\ha sua tabela e 9s
vez apagada, a tabela já era, assim como os dad9s 1nset1d9s nela!
dados inseridos nela.

você esta aqui~ 29


Us. Cabeça SQL

e \gora você pode digitar o no,·o comando CREATE TABLE:

Fekt Ed•t W•ndow Holp Success

> CREATE TABLE meus contatos


->
-> sobrenome VARCHAR(30),
-> primeiro_nome VARCHAR(20),
-> ernail VARCHAR(SO),
-> sexo CHAR(l),
-> aniversario DATE,
-> profissao VARCHAR(SO),
-> local VARCHAR(50),
-> estado_civil VARCHAR(20),
-> interesses VARCHAR(lOO),
-> procura VARCHAR(lOO)
-> ) ;
Query OK , O rows affected (0.05 sec)

Uma porção de palavras-chave e tipos de dados, com todos os disfarces, estão Quem sou
bnncando o jogo "Quem sou eu?" Eles te dão uma pista, e você tenta adivinhar quem
são eles, baseado no que dizem. Suponha que eles sempre dizem a verdade a respeito
eu?
deles mesmos. Caso eles digam algo que possa ser verdade para mais de um comando,
então escreva para todos aqueles para qual a frase se aplica. Preencha os espaços em
branco próximos a frases com os nomes de um ou mais comandos.
Comandos de hoje::
CREATE DATABASE, USE DATABASE, CREATE TABLE, DESC, DROP TABLE,
CHAR, VARCHAR, BLOB, DATE, DATETIME, DEC, INT

Nome
Eu tenho o seu número.

Eu posso eliminar as tabelas indesejadas.

Questões de V ou F são as minhas favoritas.


Eu armazeno o aniversário de sua mãe.

Eu tenho a tabela inteira em minhas mãos.

Números são legais, mas eu odeio frações.

Eu gosto de explicações longas e com muitas palavras.


Esse é o lugar para armazenar tudo.

A tabela não existiria sem mim.

Eu se1 exatamente quando será sua consulta no dentista semana que vem.
Contadores gostam de mim.

Eu posso melhorar o formato de sua tabela.

Sem nós, você nem poderia criar a tabela.

30 ':apftulo 1
dados l tabelas

A.natomiq, de um C<>mélJlJo

Para inserir dados na tabela, você


usará o comando INSERT
E~lc com<uHio lil/ l'\~l'tl<"ialmcnlc o que dit. :-,cu llOllll'. IX uma
olhada no comando abaixo p;u·a ver rm11o cada palll' funciona.
O s valores no ~cgundo conjunto de parênteses devem estar
na mesma ordem que os nomes das colunas.
O comando ahaí\o n:"to é um comando real. é um l' \l'mplo p;u,.
mo,U<tr o f(mnato do com;mdo INSERT.

Ís·h prf.xt-.a par-h tl~ ,.,..,~s


Jas svas c.:slv~tas1 s~paraJas
I ~ I
p.:sr v'r5vl.s. V.:sc~j: sdf! 3vf! a
ft pcla'lra-ci••V~ r~stJtr
,... lis·h tl~ br~5 -hra c.:s/v,as c~-..,
ziJrO ,-,teta a ~~~clar•i•"
11~-.~J sdr~,.,..,f!J prt-.ttr6 _,.,..,t

~ f!t-.atl. ~ ~

INSERT INTO your_ table ( column_ namel f column_ name2 f ... )

; ~ I
() ,.,,.1-.,-f!"v'rjtJia
Jf! C6Sh.._f!
t"ctrra,J., "
I
C6tli'j6•

você está aqu1 "' 31


Use a Cabeça SQL

QUE TIPO DEDADOS?

. \ntc~ de c~ncn· r o comando 1:'\SERT, ,·ocê precisa combimu m nomt•s das colunas com seus respectivo~ \rtlorc'>.

Colun<t'i
primeiro_nome ' Relacionamento, Amigos '

estado civil ' Anderson '

procura ' 05/09/1980 '

sexo ' Escritora Técnica '

aniversario ' J il lian '

sobrenome ' Solteiro '

local ' F'

interesses ' Palo Alto , CA'

profissao ' jill_anderson@breakneckpizza . com'

email ' Caiaque , Répteis '

Antes de t's<Tt'\TI o roma.n do I SERT, você precisa comhinat os nomes das colunas com seus respectivos \·alor<:'>.

primeiro_nome ' Relacionamento , Amigos '

estado civil ' Anderson ' () -h;IJ b/lrrí r;3lltl' ""'



0510911980
, c- /61'"'4-1-6 tsptctli'c6, ""'''''P'.'"'
sllc ll6c(l"'t,;.•s•6 s~L. f>IJ"
sexo ' Esc r i tora Técnica ' tsptctltccs';ts.

' Ji llian'

' Solteiro '


..ç--_ IJ';6 tS3tltfcf ~c( prtcisc tlt upc: .
'F"'------ st~lts t~t~ vcl6rts tlt c•rcc-hrt 1
t1" CIJ

' Palo A o , CA'

profissao ' jill_anderson@brea kneckpizza . com '

email ' Caiaque , Répteis '

32 Capi tulo 1
dados e tabelas

- - - - - .I Criando uma declaração INS ERT


~c~p6lllt 4ptrl-cr !Alr!Jt. 4,.f.ts
lllt drlr u~ , 6v6 pcr~st p•r•
-/-6,.,.,. 6 C6tiij6 ""41's l:cll p•r• ltr '16
stu sls-1-t.... S~L.

INSERTO INTO meus contatos ~


(sobrenome, primeiro_nome, email, sexo,
aniversario, profissao, local, estado_civil,
interesses e procura)
VALUES ~
Aptrh !AJ-r!Jt. 61
1
~
4p s rtcl.•r 6s PCrt,.f.ts C61u,. t ti•
6U-rr6s VALuiS 4 1. / . 1
/' r• •3tr 6 C6ti'56 lit l•cll ltll-ur4•
('Anderson', 'Jillian', 'jill_anderson@
breakneckpizza.com', 'F', '05/09/1980',
'Escritora Técnica', 'Palo Alto, CA', 'Solteiro',
'Caiaque, Répteis, 'Relacionamentos, Amigos');
(
tJs VC16rts ,.,.. c•lll•
'-_ ~u•l3utr vcl6r 3ut p6Ss• ,,. t"" / '
uAJt.C/f.AJt. cHA-Jt.
/. -/-."" t-'""4 C61U'I4 Vl'f /'f J J
ctJ ~,. ts ll 6 '16 ;_t5t1"1i6 p/}rf. 6u 8t...08 tltvt ltc•r
ctJ'!Jfl,-/-6 lllt pcrt~sts
tJtitsf• Vt3.J Stp4r41i6S
p4r v'"JU14s,

A ordem importa!

Os va l o r es deveriam ser
listados exatamente na mesma
Veja Isto! ordem que os nomes das
colunas.

~~---------------------------------------------
Esta é uma das formas de adicionar linhas à sua tabela. Tente digitar para você
mesmo. Primeiramente, digite em um editor de texto para que no caso de enganos
não tenha que redigitar sua tabela. Presta bastante atenção com as aspas simples e
vírgulas. Escreva as respostas aqui:

você está aqui li> 33


Use a Cabeça SQL

Você acabou de me dizer que valores em CHAR, Seu


olh
VARCHAR, DATE e BLOB usam aspas simples
ten
em volta delas no comando INSERT. Isto quer
dizer que valores numéricos como DEC e INT
não usam aspas?

Exatamente certo.
Aqui está um comando INSERT que ,·ocê
poderá usar se você tivesse uma tabela de
compras de donut~. Perceba como, em \'alorcs,
os números que acompanham as dúzias de
donuts comprados e as colunas de preço não
possuem aspas.

A C41v,. t(~ f>~"~f4 ~!C(4,2) 4


t
3v~ s~j,,Ylcc hr 4 -/-4 ~4,t. 4 J~
4 ccrcchr~sJ C4~ t(vas c-.scs
t(~c'""•ls.

INSERT INTO de donuts j


(tipo_donut , duzias, cobertura, preco , valor)
VALUES
( ' jelly' ,

'F'
'Re

Oq

Se

34 Capitulo 1
dados ,. tabelas

Seu sistema SOL RDBMS dirá a você quando algo der errado no seu código, mas às vezes será meio vago. Dê uma
olhada em cada comando INSERT abaixo. Primeiro tente adivinhar o que há de errado com o comando, da f então
tente digitá-lo no sistema e observar como o sistema responderá.

INSERT INTO meus contatos


(sobrenome, pr~eiro_nome, email, sexo, aniversario, profissao, local, estado civil,
interesses, procura) VALUES ('Anderson', 'Jillian', 'jill anderson@bre akneckpizza.
com' , 'F', '05-09-1980' , 'Escritora Técnica', 'Solteira' ~ 'Caiaque , Répteis ',
'Relacionamen to, Amigos');

Oque está e rrado? ........ . .......... .. . .. .. .. ........ ... ............. ... .... ... ........... .... . .. ............... ...................... ... ..

Seu sistema SQL diz: .......... ..... ...................... .. . ............... ... ...................... ...................... .............. .. .

INSERT INTO meus_contato s


(sobrenome, pr~iro_nome, sexo, aniversario, profissao, local, estado civil,
interesses, procura) VALUES ('Anderson', 'Jillian', 'jill anderson@bre ãkneckpizza.c om',
'F' , '05-09-1980', 'Escritora Técnica' 'Palo Alto, CA', 'SÕlteira', 'Caiaque, Répteis' ,
'Relacionamen to, Amigos');

Oque está errado? .... ... ............. ..... .. .. .......... ........ ......... ................. ..... ............. .. .......... ...... ...... ...... .
Seu sistema SQL diz:

INSERT INTO meus_contato s


(sobrenome, primeiro_nom e, email, sexo, aniversario, profissao, local, estado civil,
interesses, procura) VALUES ('Anderson', 'Jillian', 'jill_anderson @breakneckp izza.com',
'F', '05-09-1980', 'Escritora Técnica' 'Palo Alto, CA', 'Solteira', 'Caiaque, Répteis',
'Relacionamen to, Amigos');

O que está errado? .......... .. ................ .... ..... ...................... ...... . .... .. ...................... ...................... ... ..
Seu sistema SQL diz:

INSERT INTO meus_contato s


(sobrenome, pr~iro_nome, email, sexo, aniversario, profissao, local, estado civil,
interesses, procura) VALUES ('Anderson', 'Jillian', 'jill anderson@bre akneckpizza.c om',
'F', '05-09-1980', 'Escritora Técnica', 'Palo Alto, CA', 'solteira', 'Caiaque, Répteis',
'Relacionamen to, Amigos ) ;

o que está errado? ...................... .......... ..... .... . ........ .. .. .. . . ·Sf! ' ft-s.ft·t'iúitciiilii sti/'si$-h~~. Jt,;.,~·~~;.
Seu sistema SQL diz: ........ .... .... ... ................... .. ................ ;!?h .il~r.J.., ·"*',tt up•· 'SI~Its· s"tjviíJ/ .
. . .. . . .. . . .. . . .. . .. . . .. .. .. .. . . .. .. .. .. .. . . .. . .. .. . . .. . .. . .( . (l.'!t~~w.J-.6~VII'•pitt ..,:'S' .ft.,.. iliji...,.é'Jo .
.. . ..... ... .... .. .... ... .... ... ... .... ..... .... ......... ~ .('.t:~f•n-1:-e k e.-..•'hlo; ....

voce esta aqui 35


Use Cabeça SQL

Âp9nte ~eu Ulris


S9luc;-ã.9
Va
ll.t lf

Seu s•stema SQL RDBMS dirá a você quando algo der errado no seu código, mas às vezes será meio vago. Dê uma
olhada em cada comando INSERT abaixo. Primeiro tente adivinhar o que há de errado com o comando, daí então
tente digitá-lo no sistema e observar como o sistema responderá.

INSERT INTO meus contatos


(sobrenome, primeiro_nome , email, sexo, aniversario, profissao, local, estado civil,
interesses, procura) VALUES ('Anderson', 'Jillian', 'jill anderson@breakne ckpizza.
com', 'F', '05-09-1980', 'Escritora Técnica', 'Solteira' ~ 'caiaque, Répteis',
'Relacionamento, Amigos' ) ; . 1 J , "' L •••
fi,.IJS 11"'41 colv~tc ltJccl ,. ltrrc "'t C6tlllf41SJ "''s ,,. n"";'
,t,J.v"' v•ltJr ,.,strl#ltJ p•r• ltJc•l .,, ll's-1-• tlt vcltJrtsJ ,,.,
, ~ "'-/-( ti l
O que está errado1 .. ~!.f.~ hlf.~#J.t!.i!. ~~- Y.~/~('. /?.~r.~. /~ç-~(. .. ~~~- ... ~~-~~~-~-~~ .. ~~ -~~- ~-~~~- · · · · · · · · · · · · · · · · · · · · · · · · · ·
Seu sistema SQL diz: Í/t./t.()/t. 1136 (21501 ): Ce~lv~" ce~v,rl- tle~u,rl- ~c-1-ct. valvt ctw,rl- a-I- f'CIJttl/ .... .. .................. .
····························~····················································

Ptrcd• 311t tliltrt~s prtJ;It"'cs rtslllf.,. t"' 11,. "'ts"'6


CVISIJ tit ,trrtJ, Ft3vt c-/-t,-/-6 CIJ"' IJS -/-,;.u· tlts potit"' str ~
INSERT INTO meus contatos "'tttJ titltct•:S lllt strt"' rcs-1-rtctitJs, J

(sobrenome, primeiro_nome, sexo, aniversario, profissao, local, estado_civil,


interesses, procura) VALUES ('Anderson', 'Jillian', 'jill anderson@breakne ckpizza.com' ,
' F' , '05-09-1980', 'Escritora Técnica', 'Palo Alto, CA', 'Solteira', 'Caiaque, Répteis ',
' Relacionamento, Amigos'); ,
b;_s-1-a v~ lfCIS .ft,.e~s ""' vcle~r J>•r• c•ti• ce~llllf~ ~s
/:::'" lf.CI ff"'CIS • CIJitllfA t"'•tl ,. lts+• lfit CIJitllfCS

ís-1-: lcl-/-c,tle~ c ce~lv~ta


O que está errado? ........................................... ,. lt"s-1-c tlt ce~lv~tcs.............................
t~ctl) ............................. . ................ .
Seu sistema SQL diz_:... ~~'!:~~ ~~~~--~~~.?.~~~;-~~~~-~~-~~~~-~~~~~-~~f~~-~~-~~-~-~-~~~~~-~-"-~~!.. ......
INSERT INTO meus contatos
(sobrenome, primeiro_nome, email, sexo, aniversario, profissao, local, estado_civil,
interesses, procura) VALUES ('Anderson', 'Jillian', 'jill anderson@breakne ckpizza.com',
'F', '05-09-1980', 'Escritora Técnica' 'Palo Alto, CA', 'SÕlteira', 'Caiaque, Répteis ',
'Relacionamento, Amigos') ; .e;:--
AJ';41 t.: v:r5.v~c , 4 lt"s-1-a tlt vale~rts t

O que está errado? .. . ~!.f~.f~~f.~~t!~. -~~-~-~~j'!.~~.t..'!.f.':.~. ~~~~--r_~~~~~s:. ~~~~~~~~~~--~~~~~~-~ -~ ~~~~-~~:..~~-~~


Seu sistema SQL diz: J~.I~:P~.ll.3.6 .(21501):. Ç4 tV.INH.qiJ.,J:.tt~.~~~f..~4f.c.l:o. Jt'-(tl.~.ç.tWIJ.f.f..f..t:'.4W.f .... . .

INSERT INTO meus contatos


(sobrenome, primeiro_noma, email, sexo, aniversario, profissao, local, estado_civil,
interesses, procura) VALUES ('Anderson', 'Jillian', 'jill_anderson@br eakneckpizza.com ',
'F', '05-09-1980', 'Escritora Técnica', 'Palo Alto, CA', 'Solteira', 'Caiaque, Répteis' ,
'Relacionamento, Amigos ) ;

O que está errado? .. J~.f; f.~.~f~.'!~~.I(.~~--~~.R.~.!.~~?~~..'!.~.f'!!.~~-~~..~f'h~~- r_~/~r':.!"'!.~.~(':~i!_~~.................. ..

Seu sistema SQL diz: .J~~~~J.9~4..<~~Q9.9);Y.~V~~-~~-~~ t_~f'fJ.('._~;,.!J~It!:.~~~-~!J~~?c.~.c!!~ç~ ......... .


(
--~~-~~'!.tt~/f~~f..~.CI.(':t:.~~f.~.'!l~.f.~.j.~.~(':.~lj_~~l;.;.~~('.'o!.t.('..l!.t(:~ltJ~.f.~r..~~---· · · ·
.. -~~~.f.. ~j.'!.f.~~- f.e~. .'!.~.t.. ~~-~('..~.f /t~~ .lf..............................................................

36 Cap1tulo 1
·-~--

dados e tabelas

Variações para o comando INSERT


Há trê~ \rtriações para o comando INSERT que você deve saber:

O Mudando a ordem das colunas


Você pode mudar a ordem das colunas, desde que os respectivos valores
para cada coluna venham na mesma ordem! Ptrcdtll 1t 61'tltllll tl6 " 61111 t
,/IAS C6111"4S?Pr51JI'#. (J//.t
~ V4161'f!S~
INSERT INTO meus contatos
plti'IA IJS tltS
{interesses, primeiro_name, sobrename, sexo, email, aniversario, tShtJ ,ltt.lltl#. II!I(!Silll41t
profissao, local, estado_civil, procura) o I.
61'tlt... c(J,-1-.,.,.(J 311t 6 s
~.9\6S
J
I
116S
VALUES ~ VltltJI'ts s!jltilll rt/tl't,.fts
{ 'Caiaque, Répteis', 'Jillian', 'Anderson', 'F', 'jill_anderson@ 46 s rtsptc-l-tV6S "6illlf!S tlt
brealcneckpizza.com', '05-09-1980', 'Escritora Técnica', 'Palo CtJIII,II.S lt tJI'tltllll llt IISitl' (J
Alto , CA', 'Solteira', 'Relacionamento, Amigos'); J 3 I. 1
IIJstJtr,-;6 ,...,(Jr.,.•r• p•r•
VtJCt ,6 Stll Sí'Sfflft4
J
S&,L.!

Omitindo nomes de colunas


)\ Você pode omitir a lista de nomes de colunas, mas os valores devem
estar todos ali, e na mesma ordem que adicionou as colunas
(Cheque duas vezes a ordem na página 33, caso não lenha certeza.)

INSERT INTO meus contatos AJ.Js tltiir:ltii!IIJS Jt CIJIIJCII.I' IJS ,IJ..(!S


JII.S CIJIII,II.SJ iiiiii.S St VtJCt ft'f.(!l' í'SSIJ
VALUES I J J
~ -tever• ,.,cl11í'r ro/)os 6s vattJrts
( 'Anderson', 'Jillian', 'jill_anderson@breakneckpizza.com', t , 4 ()Jt.biK.-1. f.)(l}rl} t"" t.llt tllt:
'F', '05-09-1980', 'Escritora Técnica', 'Palo Alto, CA', o
' Solteira' , 'Caiaque, Répteis' , 'Relacionamento, Amigos'); ts.fsll.illl "4 .f~t6t111./

0 Deixando algumas colunas de fora


Você pode inserir algumas colunas c deixar outras de fora.
- ~ PODERDO­
INSERT INTO meus_contatos Y5(Y CÉREBRO
{sobrenome, primeiro_nome, email)
O que você acha
que aparece
naquelas colunas
em que não inseriu
valor algum?

..... você está aqui "' 37


Use a Cabeça SQL

Colunas sem valores


Vamm in~crir uma infonmt~·ào no banco de dadm
meus_ conta tos a p;trlir de~tél anotac;ào adcsi,·a incompleta:

COLUNAS : VALORES:

sobrenome ?

pr~eiro nome ' Pat '

' patpost@breakneckpizza.e

' Carteiro (a) '

' Priceton , NJ'

proc ura ?

Pdo fato de a <UJota~·ào adcsi,·a e~tm· im·omplcta, G rcg


Lerá que in~erir um regisu·o incompleto. l'v[as tudo bem,
de e~tará apto a inse1ir a~ infonnações pendentes em
momento po~terior.

INSERT
(primeiro_nome, email, profissao, local)
VALUES
('Pat', 'patpost@breakneckpizza.com',
'Carteiro(a)', 'Priceton, NJ');

38 Cap itulo 1
dados e tabelas

+I 1.;;.. .~~~~ - +I
Espie sua tabela com o comando SELECT
I I
I I I

...."uO ·
I I
I c I

.
I
I
I
..
....
Então você quer ver com o que sua tabela irá se parecer? Bem, DESC
uào v<Ú funciomu· nuús, porque ela só mostra a estrutura da tabela e não
""
(Jl
I
I
I
I
~ .
u a informação deniJ·o dela. Sendo assim, ,·ocê deve1ia usar um simples
.. ."
I •o
I
I llo comando SELECT para que possa ver os dados dentro dela.
I

. ..".
I
I
"'"i
..
+ +I
• iI
I

•"" I fl. I
I
I
I
...."
I
I
I
....
~

~
I
I
~za. can 1 I I
I I
I
u I
I
I

.. .. . .
I
I
........
I
I
I
I

ZD
I ~ I

.
I >
u
I
I
I ' .."...
..... .
I
I
I

. ..,.
I
I o'
I
I
I

"'
o
I

". ·
I I I
I I I
I I I
+I
I
• +I
I ~
+I
I
I

.
I I
I I I

. CD
õ
I
I
I
I
I
I
I
I :< .I
I

+I
+
I
I
I
I
..o
....
u
+

I
I
I
..,z ....o
o.
~
.
I
I
I

I I I
....
..
I I I
c'
I
I

I
. I
,I
I. s ....u
I
I
I
, I
"..uc c
I

......
I I I
I I'
.o I

..
I
I
I'
I
I.
"
o.
I
I
I
+
I
I
. ....".... o

...., ,
+

I'
,.
I'
.
.......
...o +

No momento, não se pre ocupe


I I
I o . I u
comoqueo c omando SELECT
I
I
I
"'a. · I
I'
I'
:eo '"'"
I
I
I
I
,.,o faz,
.......o .. .......
......
I I'
I

. ....
I
I I I
I I
I. "'o Veremos com muito mais detalhe
I
I

I
I u" o
I
este comando no capítulo 2. Por ora, sente-se e
T
I
I
I
....>
•c '
+I .
I
I
a>
"'.... .
+I
I maravilhe-se com a beleza de sua tabela ao usar este
I
-· I . I

. comando.
I I I

ep,
I I I
I oX I
I
'
'
I
I
I I I
I I ' I
I
I
+
=· I
I
'
' "' I
I
+
I
c' .l!
"c 5 I
I

([) " ~
I
I

1~, .'"'."
~
... N
I
I Agora tente mcê mesmo. Maximize sua janela para ver o resultado
.l!
....llo
N I
+
com qualidade.
..u
.>(

...... .': ~
8
~ ~N ......
c:
.>(

I
.o
:'.." .
I "'

~ .
I ~
t
I
I
""co
..,""...
t I

I
I ..
.... I
I
I
'

~I
!
I I .

~
I I '
....

~ P~DER DO -----~
I ·I '
....
.....
I I '
•o
~
I
I
I
I
I
I
a. ...,
+I e +I +

~ CEREBRO
~ I
c I
~l o
I I
o ô
•,

I

II .......
I
I
I
..c
I
I
I ,"
....
...
I I
o
I
I
I
I "...
.~
I
I
I
' ....
....
..,_
....
I
I
I ~
e
..
I I . I
a. I · o. I
Agora você sabe que NULL aparece em
_,
~
I
I I • I
+I ·+I , +I
:g;·,
o ," toda coluna sem valor inserido. O que
I
I
I '
I.
b'
c ....
. I
I •

~
o
•w
.
I
I
"
·e.
I

:· ...~.!!
I
I
I
....c
,..o
você acha que NULL realmente significa?

I

g"
I I
.o 'tlO
.. ..o
~ I I I
I I
I
I I
I
I
I
...
I
+ + -a" +
"'

você está aqui .., 39


Us a Cabeça SQL

SQL exposto
Entre vista da Sem ana:
Con fissõ es de um NUL L
cRE!
c i!lL
ir que Use a cabe ça: \calme-st.· l, mt• c~da.rc<;a. \ 'on: não
Use a cabe ça: Bcm- \Jnclo .:\'l LL. Tenh o que admit \';u·itíYel, <.' não é igual nem a \I)(
e\i\ti''<.'. O a tt.·ro, não t.' uma linha vazia
nao nper; na \C:-Io. :\'tmc;l JX.'Jht't que v<><·i· ele h11o
esque rda. mt·sm o.' Isto não hv. lll'lltido!
boato t.· que voe(· não ~ nada mai' qm· um t.ero a
da
NULL : Sei que t'>'>O é çonli.t-.o..\pena s pense em mim
NUL L: Não acn:d ito que tt·nha dadu om 1do~ a tai~ mcnttr
;u..
r de
\ on:· pcn'a que cu não s<.'f.,'UÍlll<.' f'onua: Eu 'ou imklin iclo. Sou como o interio
\un. ntou aqui. <.' ,ou bem real! E.ntào estar ali
de: st.·u~ .. apato s? uma cal\a nunca abctta.. Qualqu<.T cm-.a poder ia
'ou nada, né: Só poeira cmlnú xo
1
não aberta
dt•ntro, t:nt:'to v<><·ê não podt• comp;u·a• LUlla çai:~.a
~<> o de rada
Use a cabe ça: Opa, liquc calmo . bso C:· porqu e \orê com outra pmqu c \'ocê não :-.abc o CJUl' tcr.í dentr
.tJMrec<. quand o al~o não tt·m \ator ... uma. Podea ·t até t.•st.;u· ,yjo, ma' não 'abera .
linha ,.,l/ia. nà•
NUL L: Claro . m<:lhor elo que um zt•ro ou tUlla
Use a cabe ça : L:u tenho ouvid o mmor t·s de que \'Cll.'ê
ado. Q ue hi1 momento~ qut• talvt'l. você:. l'\l'LI .s raU,l'
<.'!>lim
Use a cabe ça: O que é uma linha \'azia:'
pmble ma\.
demro .
NUL L: Seria o U\O ck dua' aspa~ ~impl c\ rom nada lu~ÇUes Otllk
ele taman ho /t.'ro. ::
1 como NUL L: Eu tenho que admit ir qu<.· já ap;u·t•çi em
•\ mda c: um camp o de texto, ma-. re com
". era inckse jado. ,\ lf.,'llllla'> colun as dcvcri;ull <.':-.tar !>l'lllp
ddinu par.~ prinw iro nome na tabela meus _ront atm o valor rat.Ito em
valore \. Como ~obre nome:,, por e\cmp lo. ~ão há ) ;
.· pra
Use a cabe ça : Em;'to você náo é apt.·na-. um jeito ('hiqu< te1 um \Jl'LL cotno sobre nome cm uma tabda .
dtt.er nada. '
Use a cabe ça: Enti'to vorê não iria onde não fosse
nada! Eu algo, só que ...
NUL L: Eu.J<i te dl,,t:! Eu não '>OU \OII
cham ado?
um pouco mddi túdo, é tudo. m<.' diga, qu;uld o c,ti,·e r c·otNn.tiJJd
A~or.t
NUL L: C01 1eto!
a um
Use a cabe ça: Qu<.·t di11:r que seu cu t<.' rompa.rat sua tahda e nia1Hio ~uas co luna~. ml' m·ise.
tno ou uma lmha \(l/ta \'on:- não se IJ.,'ltalana?
Use a cabe ça: Você não p;u·ccc muito com uma catxa n<i•
NULL : '\ito! Eu nmKa nw tgualaria a um ;ero. E. na abt.·lta.
não
\tnlac le. ni'to nw i~.m.latia nl'm a outro N l lLL. Você mr
. l ,·aJo r pode se1 NUL L: Já h;l\t.a. Eu tenho htlf.lf<.'s para ir. \';tlores par.t
pode <·ompar<u· 11m :'\ l · LL com outro 111
e '\ l 1
LL é um ,-ator tOIItar.
\ l ·u . mas mmca i1,•ua.l a '\ l 'LL pmqu
1
indefi nido! l·,nt<.·nclc!

Controlando seu NU LL interior


rt· estar com \<Um cs. Ainda lembr a
H;í ai~ mas colun as n<1 .. ua tabela que ck \ en;un st.·mp
m sohrcn onK< Ela (ou cld não ~crá
1
da ;mota~·ão adesi '" incom pk·ta p<~ra Pat, com nenhu
mais \lllte sobrellOilll'S NULL imcti dm (.'Jll sua
muito ráril dl' 'e r l'JI('Oilt racl;l quand o 11\'l'r
n:'to a<-c:itar ,.al01 n NULL para cohm as.
talx.·la. Poclet a f;tcilmcntt ~u,t;u· sua talx.•l;t para

fJv~"u •'fci'o,, u P•'•w•u IJ()r


CREATE TABLE me us con tat os ~ U{..(.. lp6S 6 hp• Jt J•J•s .

(
~
.S~ vs~-luJ /61''~~5• v.,. v•l61
sob ren om e VARCHAR (30 ) NOT NULL, e_ltl'lt 1t C61V't lt '16 C6.._ .,j,
J.,IJ.Sf.Jt:r, .5~J,.o o /i~UJ
pri me iro _no me VARCHAR (20 ) NOT NULL vci obh r v.,.• .,.~,sc,(~r~l.
) .

40 Capitu lo 1
dados e tabelas

Olhe para cada coluna no seu comando CREATE TABLE


para meus_contatos. Quais deveriam ser ajustadas
para opção NOT NULL? Pense naquelas colunas que
CREATE TABLE meus_contatos
nunca deveriam ser NULL e as circule.

• é igual
ma \'OCê
sobrenome VARCHAR (30) NOT NULL, Nós demos duas para começar, agora termine o
pr~eiro_nome VARCHAR (20) NOT NULL, resto. Primeiramente, considere colunas que usará
posteriormente para fazer pesquisa ou colunas que
Hla @.ail VARCHAR(SO)z:::> são únicas.
>r de
ali sexo CHAR (1)
aberta aniversario DATE,
cada
profissao VARCHAR(SO),

>Cê não é local VARCHAR(SO),


causem stado_civil VARCHAR(20)
interesses VARCHAR(lOO),
:s onde
recom procura VARCHAR(lOO)
io em l;

uindo ~9nte seu lá~ls


S9luç-ã.9 Olhe para cada coluna no seu comando CREATE TABLE
1xa não para meus_contatos. Quais deveriam ser ajustadas
para opção NOT NULL? Pense naquelas colunas que
CREATE TABLE meus contatos
nunca deveriam ser NULL e as circule.
me

sobrenome VARCHAR (30) NOT Nós demos duas para começar, agora termine o
resto. Primeiramente, considere colunas que usará
pr~eiro_nome VARCHAR (20)
posteriormente para fazer pesquisa ou colunas que
email VARCHAR(SO), são únicas.

sexo CHAR ( 1)
aniversario DATE,
profissao VARCHAR(SO),
local VARCHAR(SO),
estado_civil VARCHAR(20), ~1:lltiCS ltS CtJIVIJU li&tri'cll\ str A}()11JU[_[_
interesses VARCHAR(lOO),
procura VARCHAR(lOO) ~c;" v.fr·tt'""Jttr: r()b/tS,u St/U CtJIVIJU
para '--3tr ptstptsc. í tlty>6r-l-•,-h
l;
sdtr JVt stvs rt5 ,s-l-r6 s ts-l-';6
C6111plt':/-6S t SVA +dtftt ffll\ liAJ6S
t\v•ltJr C6111plt.J..6S ,.,Striii6S•••
AIJiitJ •••11\ASJ St V,6C; ffll\ t/11\A C61VIJ4
~tr.J 3vt sdtrA 3vt -h"" 3vt str
5t"" lllt prtt,cl.tJA p6SffriiJrll\t,ffJ
C61JSt"tttrt ptr""t.frr 6 VS6 Jt
VAI6rts A.Ju[_[_ IJtla .

você está aqui 11> 41


Us Cabeça SQL

NOT NULL aparece em DESC Pre


.\qui cslá como a whda mcu~_co•Hato~ ,·ai parecer ~e \'Oc(·
aju\t;u· toda',.., coluna-, para tert·n• 'alOJe\ NOT NULL .

('
A-3t1l tsl-: ""llt
Cl'l~~t!S' "6S'S'~ 1-.Jt/~
c"~ Al()t?JvLL t~
c~~~~ C61tl,~.

~
A-3t1l tsl-: ~ 1-dtlc
lltscrll-~. ()jstrvt
~ p~l~vr~ Al() d~'ÍC"
~~~ C6!(1,~ AlVLL.

42 Capitulo 1
dados .. tabelas

Preencha os espaços em branco com DEFAULT


\<·mcê tirc~~e w11a coluna que sabe que comunH:'nle ICIIl um ,.,Jor c~pcdlico, nós podemos Utc atribuil· wn v;tlor padrào
(DEFAULT ). O \'alor que ~e~ttte a plliavra-chaw DEFAULT é automatic;unenlc in~crido na tabela cada vcL que uma linha
cin'>trida caso nenhum outro valor seja atribuído. O valor padri'to deve ~LT do mesmo tipo de wtlor que a coluna.

CREATE TABLE lista donut $.11~rt,,...u -hr c~r~• 311~ S~"'frt


l.«v~r• 11,... v•lt>r ~s-1-. ct>lll;,ll,
( R,,tt,...~>s ;,~., s: 1•~;.,,, AJO-nJIILL
c.,.,., -I-...~~.. ll.t •:frl~flt"r fi., v•l"r
nome donut VARCHAR(lO) NOT NULL, /)f.FA-vLr,t~ 11.

tipo_donut VARCHAR(6) NOT NULL, /


custo donut DEC(3,2) NOT NULL DEFAULT 1 . 00
);
J (ffl s.-: • v•'•' '""~"••• ~l•pm,
ce~lw,. cfls-1-.,-lie~;,fl-1- 3fl•;,,t., ;,~;,1.(1,... e~fl-1-re~ v•le~r
l~>r ~~~Sij;,c,/4 ,
lista donut
nome donut tipo_donut custo donut Vsat um v'al9t
Blooberry recheado 2.00 DEFAvLr
Cinnomondo anel 1.00
~teenche as c9lunas
-:?1_

Rockstor enrolado / ~1.00


Coromeller enrolado v/ ~ 1.00 v'az,!as c9m um
Appleblush recheado
I
I / I
I
1.40
v'al9t es~ecí~ic9.
I ",/ í'XI.SSt t>S Vl.lt>N!SJ

Palavtas ctuzadas
Reserve um tempinho para relaxar c dê ao lado esquerdo do seu cérebro algo p<mt fazer.
São paJavras cruzadas comuns; todas as respostas estão neste capítulo.

Horizontais
4. Um_ é um container que guarda todas as tabelas e outras estruturas
SQL relacionadas a estas tabelas.
5. Uma __ é um tipo ou porção de dados armazenado pela sua tabela.
6. Este annazena dados em texto de até 255 caracteres de tamanho.
7. Você não pode comparar um_ com outro.
11. Este é um conjunto único de colunas para descrever atribuições de um
objeto.
10. Para adicionar dados na sua tabela, você usará o comando_.

Verticais
1. Éuma estrutura intema de seu banco de dados que contém dados,
organizados em colunas e linhas.
2. Use-o em seu comando CREATE TABLE para especificar um valor
para uma coluna se nenhum outro valor for inserido.
3. Use esta palavra para ver a tabela que acabou de aiar.
5. Esta palavra pode ser usada na frente de ambos TABLE ou
DATABASE.
8. Para eliminar sua tabela use TABLE.
9. Este campo datatype {tipo de dados) pensa que deveria ser inteiro, mas
não tem medo de números negativos.

voce está aqui • 43


Use a Cabeç a SQL

Sua caixa de ferramenta SQL


Você já tem o capitulo 1 na palma da
- PONTOS DE BALA
mão, e já sabe como criar banco de
dados e tabelas, como também inserir • Se quer ver a estrutura de sua
alguns dos mais comuns tipos de dados e tabela, use o comando DESC.
tabelas, bem como inserir alguns de seus • O comando DROP TABLE pode Co
dados mais comuns enquanto se certifica ser usado para jogar sua tabela fm CR
quais colunas precisam de um valor. Use com cuidado! CH
• Para inserir seus dados dentro da
tabela, use uma das variações do
comando I NSERT. Eu t

• Um valor NULL é um valor


indefinido. Ele não se iguala a zero
Eu

ou a valor vazio. Uma coluna com Que


um valor NULL é NULL, mas
nunca igual a outro NULL. Eu

• Colunas que não tiveram valores


atribuídos a ela através do comano: N.
I NSERT são ajustadas para NULl u
por padrão. Eu

• Você pode alterar uma tabela,


fazendo-a não aceitar um valor
Ess

NULL ao usar as palavras-chave A ta


NOT NULL quando criar a tabe~
Eu
• Usar um valor DEFAULT quando
você CREATE (criar) sua tabela,
a coluna é preenchida com aquele Eu
valor, caso tenha inserido um
registro sem valor algum para Se
aquela coluna.

NULL .,J NOT NULL

V6Ct prtc•"s•r~ .f..,.j("" -hr v....- rJ(,-.. Jt av•is


h•(l•s , •• v-hl·~•rc• IIS v•I•I'(S NULL
,..,.. ~~~J~-I• •p(savrs•r l'"sffrlor ..(..-h
S(VS J•J•s. Prtc•"s•r~ ~vs-1-.r u ctifv,u
,..,.. NOT NULL av•,Jo CI'IV sv• h•('··

DEFAULT

44 Capítulo 1
dados e tabelas

Respoi~Jls da pá(lna 30 .
Uma porção de palavras-chave e tipos de dados, com todos os disfarces, estão QuellJ
bnncando o jogo "Quem sou eu?" Eles te dão uma pista, e você tenta adivinhar quem sou eu?
são eles, baseado no que dizem. Suponha que eles sempre dizem a verdade a respeito
deles mesmos. Caso eles digam algo que possa ser verdade para mais de um comando,
então escreva para todos aqueles para qual a frase se aplica. Preencha os espaços em
branco próximos a frases com os nomes de um ou mais comandos.
de Comandos de hoje::
fora. CREATE DATABASE, USE DATABASE, CREATE TABLE, DESC, DROP TABLE,
CHAR, VARCHAR, BLOB, DATE, DATETIME, DEC, INT
la
o Nome
Eutenho oseu número. ............ ~~~~ .!:~~ ...................... .
Euposso eliminar as tabelas indesejadas. .........P.I!!lf..t:lf~~~--- ............. ·R··.
lrO
TI Questões de Vou F são as minhas favoritas. ......... _Ç.Iff+~<b ..... -~--~;:::-;;~i{tf! 114t:;
Euanmazeno o aniversário de sua mãe. p~rt ••
Eu tenho a tabela inteira em minhas mãos. ........ _ç~~fl:"!:~ .NJ:rf!.~f!.~ .............
ndo
JLL
~meros são legais, mas eu odeio frações. IA.Jr
Eu gosto de explicações longas e com muitas palavras. ..... ........ ~~~~---············ · ············
Esse éolugar para anmazenar tudo. ......... -~~Y!:'.~. T:"fl:~~i..................
Atabela não existiria sem mim. ........... C.J!:tf!.~.~ P.f."!~~~~- ..........
!la.
Eusei exatamente quando será sua consulta no dentista semana que vem. .........P.fl:r.~ r.J:~,.t~ ...................... .
o
Contadores gostam de mim. ..........P~C. ................................. .
le PLSC
Euposso melhor o fonmato de sua tabela.
Sem nós. você nem poderia criar a tabela. ~~~-~-r::~ -~~:f!$f!~J. ~~ ~~~~~~~-
........... P.~~f.:.fl:~~~- ................... .

JO
E
5
'T S COL UNA
~ A R C HA R
8 E
E A
20 'I L T 'o
E liL
I N HA 10 I NS ER I R
F T o
•a A N O AO O S p

você está aqui .,. 45


2 Oc9mandº SELEC1

-*
Selecionando Dados +
+
o

Fala sério, é melhor acessar do que restaurar? Quando o assunto é bancos de dados,
as chances são de que você terá que acesar os seus dados na mesma freqüência que as insere. É aí que
este capítulo entra: você conhecerá o poderoso comando SELECT e aprender como ganhar acesso àquela
importante informação que tem inserido nas tabelas. E ainda vai aprender como usar WHERE, AND e OR para
acessar suas tabelas e ainda evitar a exibição de dados de que não precisa.

este é um novo capítulo 47


Use a Cabeça SQL

Marcar ou não marcar um encontro?


Grcg já terminou de inserir todas as ~uas attota<;õcs coutidas nos ade~ivos na tabela meus_
contatos. A~ora ele está pronto p;u·c relaxar. l':lc tem dois ingresso~ para um show c ele quer
com·idar um de ~em contatos, uma g;u·ota de Siio Francisco para um encontro.
Ele preci~a encontrar o email dela, entào ele usa o comando SELECT do capítulo 1 pémt
,-i~uali:r.ar ~ua tabela.

SELECT * from meus contatos;

!'
Os llffllll.ts tltl• ts-/-';6
1111 -1-dtl• "" 6rt5 •..tll\
•'Jtlll\ ltljllr.

Seja 9 Gteg
Seu ita.balh9 é !ntetptetm· Gteg. ft9cute é\.9
l9ng9 da. pt1me1ta. pmte da. tabela. meus_
C9nt:élt9s na pt9xima p~!na. p9t Anne de
Sã9 Ftanc1sc9.

48 apftulo 2
o comando SELECT

lth ,;,, : •li"' I.c idti•J bl't5


&~.« u" ~oA.Jrí J.t ,,(Jh{;ts
úrsivas.

você esta aqui~ 49


Use a Cabeça SQL

S9luçã9 d9 ~tSeja 9 Gteg''


Seu trabalho e\'Q intel'pl'etar Gret;
procmanJo na primeirél pane Ja
tabela OJeu::;_contato:> por Anne
de São Ft·anc'i::;co.

Voce tinha 'l~le encontH\t·


toJa.s as Anne Je São
Ft·<'lJ1ci::;co e í'lJ19l:al· o nome
e o sobt·enome dela.::;. bem
como o endereyo de ema'il. /)r&vi ts.f4~ .ftJ~as as /)r,,t t
stvs respec·hVtJS t,...rls.

\
Fazendo contato brt5 ts+:pr~cll1'411tltJ f>~" /}1111tJ c4 "" e 11 ~ 11;,•1. Cu41 -1-t
t'lc~,+r•Jo •!fv"" rt5's-l-ro Jt I},.,J voe!poJt l-er ;116rt~
.\qui tomou tempo demais c foi extremamente
tedioso. H á uma l{randc po~~ibilidadc de o Grcg ter
passado desapercebido por alguma~ da~ Am1c~, incluindo
aquda que de procura,·a. Para: Tosh, Anne <Anne_toth@leapinlimos.com>
De: Greg <greg@gregslist.com>
.\gora que ele tem o email de toda~ ela~. é só m andar c
Assunto: Nós nos encontramos no Starbuzz?
dc~cohrir. ..

estou com um cara maravilhoso


Para: Blunt, Anne <anneblunt@breakneckpizza.col Para: Hardy, Anne <anne@bOtOOmsup.com >
De: Greg <greg@gregslist.com> ? De: Greg <greg@gregslist.com>
Assunto: Nós nos encontramos no Starbuzz. Assunto: Nós nos encontramos no Starbuzz?
.,
Eu tenho procurado por um vaqueiro como voce.
Encontre-me às cinco horas e iremos levantar

Para: Parker, Anne <annep@starbuzzcoffee.com>


De: Greg <greg@gregslist.com>

~ P~DERDO Assunto: Nós nos encontramos no Starbuzz?

'tXf cEREBRO Mas claro que lembro de você! Eu gostaria que voo
tivesse me ligado antes. Fiz planos com meu ex·
Você consegue pensar em um jeito de escrevermos namorado, que quer voltar a namorar comigo.
uma consulta para exibir apenas os registros de
prímeiro_nome inseridos como "Anne"?

Um SELECT melhor
.\qui e~tá um comando SELECT que teria ajudado Grcg a t•ncontrar ,\ nnc muito ma i~ rápido que ler
dcta.lhadamentc toda aquele enorme tabela procurando por da. :'\o comando, u~amos uma cláusula
WHERE que dá ao sistema SQL algo específico para procurar. Ela limita o~ re~ultadm para
nú~ c exibe somente as linhas que são compatíveis com a condição estabelecida.
O ~um\ dt' igual na dáu~ula WHERE para te~tar ~c cada valor na roluna prime i r o_ nome é igual ou
rompathcl ao texto 'Anne ' . Se ror rompa I h·el. todo~ o~ \'ai ore!> daquela linha ~ào exibidos. Se não, a
linha nàn é cXJ bida.

50 apltulo 2
o coman SELECT

SELECT * FROM meus contatos


. .
WHERE prJ.meJ.ro nome 'Anne'
! t - ,
!J~;-h t"s.f-6 c6.., stv wllf.Jtí
, • 3vtr Ji3tr t
t tlt Jirc 3t1t 3vtr procvrcr ,. l"5"• ~L. () vclol' pcrc svc c6111,«
-,.t,u vcl6rts ,-,striJos ,. pl't...,til'o _'ltJirlt. Al';o st
colv,c prt-...tlro _, 0 ..,t. ts 11tj« Jt co16ccr cspcs
3
st-...plts pcrc !t;,l.cs Jt -hxf6s,
O ,j,tema ahai\o mm.mmi "' linha, qut· limun n.:lornada' pda <"Oll\Uha
orKk o primeiro nomt· li>r . \nnc.

: .. .
:

orcJo, > SELECT * FROM meus contatos WHERE primeiro nome = 'Anne';
+------------+------~--------+--------------~----------+--------+-------------+--------------+
1 sobrenome I primeiro nome I email I sexo I aniversario I local 1
+-----------·+----
I Toth
------=------+--
I Anne
-----------------------+--------+-------------+--------------+
I Anne Toth@leapinlimos.c an I F I NULL I San Fran, CA I
I Manson I Anne I am86@objectville . net I F I NULL I Seattle, WA I
I Hard.y I Anne I anneh@b0tt0msup. com I F I NULL I San Fran, CA I
1 Parker I Anne I annep@starbuzzco ffee.coml F I NULL I San Fran, CA 1
I Blunt I Anne I anneblunt@b izza.can I F I NULL I San Fran, CA I
1 Jacobs I Anne I anne99@objectvil le. net I F CA 1
I NULL I San Jose,
+------------+---------------+-------------------------+--------+-------------+--------------+
6 rows in set (3. 67 sec)

ís-hs s'i6 os rtsvl.f.cJos Jo


'ltJS'$6 CtJ...C'Itl6 SiLíCt:

você Que * é esta?


.- A C\Uda l''liÍ di1cndo ao .,i,tt·nm SQL para retornar m valorc~ de todas a... coluna~ de ... ua tahda.

SELECT FROM meus contatos


WHERE nome 'Anne ' ;

o o

voce está aqw t> 51


Us Cabeça SOL

n~o ex'i:rt:em
f etguntas Íd1otA.s
f ·E se eu não quiser selecionar todas as f: Essa estrela é a mesma coisa que um asterisco? f: Há outros caracteres que tenham sig
especial como a estrela?
colunas? Posso usar outra coisa ao invés do
asterisco? Jt. Sim, é o mesmo caractere no seu teclado,
localizada ac1ma do numero 8. Aperte Sh1ft ao R SOL tem outros caracteres espe
I{.: Certamente que s1m. O asterisco seleciona mesmo tempo em que o 8 para digitar uma t o reservados.Você vera ma1s deste tipo poste
tudo, mas daqui a poucas páginas vocé aprenderá mesmo processo para usuários de Mace PC. neste livro. Mas a estrela é a única que preos;
como selecionar apenas algumas das colunas, por enquanto. t a ún1ca usada na parte jlll'
fazendo seus resultados ainda mais fáceis de serem Embora seja o mesmo caractere que o asterisco, um comando SELECT no SOL.
Interpretados. na gíria SOL ela é sempre menc1onada como
uma estrela Isto é bom porque dizer • EI "' ,
astecs > fror: ..." não é tão fácil quanto
"SELECT estrela from...•

A recepção do bar Use a Cabeça está adicionando batidas de frutas no menu. Usando o que
aprendeu no capitulo 1, escreva os comandos SQL e crie a tabela desta página e em seguida. SE
insira os dados mostrados.
Qu
A tabela é parte de um banco de dados chamado drinks. Ela contém a tabela drinks_faceis
com receitas para um número de bebidas que tem apenas do1s ingredientes
SE
drinks faceis

"'" lj.J ' k r>C.p·ll quar· 4dadt>1 I jUf :10 lUcln t idade2 . 'l,-.- .. Qu
Blockthorn óguo tõnico 1.5 suco de abacaxi 1 mexo com gelo, coloque em uma taça~
coquetel com limão batido i SE
1
Blue moon soda 1.5 suco de mirtilo 0.75 mexo com gelo, coloque em umo loçoe
coquetel com limão batido Qu
Oh My Gosh néctar de 1 suco de obocoxi 1 mexo com gelo, coloque em um copinho
pêssego licor
SE
lime Fizz Sprite 1.5 suco de limão 0.75 mexo com gelo, coloque em uma taça
coquetel Qu
sirvo com gelo e canudo
Kiss on lhe lips

Hot Gold
suco de cereja

néctar de
2

3
néctar de
damasco
suco de laranja
7

6 coloque suco de toranja quente em u


1
pêssego caneco e adicione néctar de péss~
lone Tree sodo 1.5 suco de cereja 0.75 mexo com gelo, coloque em uma taça
coquetel I

Greyhound soda 1.5 suco de toranja 5 sirvo com gelo, mexo bem J
lndian Summer suco de moc;ó 2 chó quente 6 adicionar o suco em uma caneca e !
completar o resto com chó quenle
Buli Frog chó gelado 1.5 limonada 5 sirvo com gelo e uma fatio de lima
Soda ond it soda 2 suco de uva 1 misture em uma toc;o de coquetel, sem~·

~ ~.,.!.~·"'!' ,••.,.~.~·•·2- ,,.r;.·~"'!"


1 e::1 o . a na ' it

Antes de começar, faça algum planejamento.

Escolha seus tipos de dados cuidadosamente e


(1ja Isto!
. 'j
\ não esqueça sobre o NULL Então cheque seu
código na página 117.

52 Cap t lo 2
o comando SELECT

/Ji, st prtocllpt sdrt .s ptr'v,rl-.s DÊ uM .NOME Ao Df\i.NK


gnificado
Jllt ct11J1. lf;O h11f.1. Vt"s.fo, /}pf!I!I.S Use a tabela drinks_faceis que acabou de criar e tente
l.~th-os coA~W v~ t v~• st tlts usar estas consultas na sua máquina. Escreva quais drinks ele
lv,ct'ol!l.lll. retornou como resposta de cada consulta.
eciais ou
lriormente
cisa saber
SELECT * FROM drinks faceis WHERE main = 'Sprite';

junto com
Que drink(s)?

SELECT * FROM drinks faceis WHERE main = soda;

Que drink(s)? Sim, você está


exatamente certa.
SELECT * FROM drinks faceis WHERE amount2 = 6; l 'ma dc::.la~ consulta~ não funciona,
a~ oubcts runcionam, mas o rcsuiLado

Que drink(s)? delas poderá não ~e r o que c:.pcra.

SELECT * FROM drinks_faceis WHERE second = "suco de laranja";

Que drink(s)?

SELECT * FROM drinks faceis WHERE amountl 1. 5 i

Que drink(s)?

SELECT * FROM drinks faceis WHERE amount2 < '1';

Que drink(s)?
Espere um segundo... ~Tente
SELECT * FROM drinks faceis WHERE main 'soda' i estas consultas", você disse. Fez
parecer que todas iriam funcionar.
Que drink(s)? E eu acreditei! Mas uma delas
não funciona. E algumas delas não
parecem que vão funcionar.
SELECT * FROM drinks faceis WHERE amountl < '1.5';

Que drink(s)? o
o
Para pontos extras, escreva aqui qual consulta não funciona ...

... e quais funcionaram e que você esperava que não fossem funcionar.

95.

você esta aqui..- 53


Us Cabeça SQL

Apome ieu lápis--------------------------------------------~


,...._

DÊ UM J'JOME A.o DI\iNK


Você testou estas consultas na sua tabela drinks faceis
e anotou quais drinks retornaram como resposta para cada
consulta.

SELECT * FROM drinks faceis 'WHERE main = ' Sprite';


- ~
Que drink(s)? .... ~~-~~f·n ............................. ... ~ Alo.f.t o vso tl•s upu si"ifY>Its

SELECT * FROM drinks faceis WHERE ma in = soda;

Que drlnk(s)? ...~.t:r.~r.......... ~'!.":'J. f'.~~~~~. 3.~~ .t ~.~~. ~. ~... . .... ..... .
................. ... ~~'!.~~~f~.!ll.~. ~~". Jf(.~~~~ /~~.~~~'!.~~:
,
~ Í.s·h c 3vi ltl'fci'o"'J t lc t e~-.c
SELECT * FROM drinks faceis WHERE amount2 = 6 ; Vfr,{vt l /Jf..C t p or i$ SIJ ,';6

Que drink(s)?
Hol- boltl
............ ...... J
I ,#(,-,, SCIIt\lt\tl"
. .... ......... .. ....... . .. .. .. . .. .. ........... .
prt ci"se e~ser as cspes.

SELECT * FROM drinks faceis WHERE second = " suco de laranja";

Que drink(s)? ..... ff~:l:: ~~(~J. ~':.t.j. !fo.~~t! ....................-.. -...-..-.. -.. - - - -

SELECT * FROM drinks_faceis WHERE amountl = 1.5;


Que drink(s)? .....~~~~~f!:~'!J. ~~~-~~.~~.J .~~~~- E·}1 -~~."!. ~~~J. f':.?. !!.o.~~~).~~~~ F,~, .....

SELECT * FROM drinks_faceis WHERE amount2 < '1';

Que drink(s)? ..... ~!i!.~. ~-~~.'!J. ~::~~t. F·3'5J. ?:.o.~ ."!.t!................ .

SELECT * FROM drinks faceis WHERE main

Que drink(s)?

SELECT * FROM drinks_faceis WHERE amountl < '1.5';

Que drink{s)? ... ..f?.~.~.f?~~~ ............................................ ..

54 Cap1tu/o 2
o comando SELECT

Para pontos extras, escreva aqui qual consulta não funciona ...

WHERE maJ..n soda;

... e quais funcionaram e que você esperava que não fossem funcionar.

WHERE second '\uco de laranja; ;


f.s-1-• C617Stlf-/-• /ti17CI0171l #! 17.6 Cllt/Sil #!1"1'6 .9\llS rff61'171l
J
• C617St~li• st.9\ rtst~li•tl6s, S~L tsptrll Jtl#! tJst 11.sp.s
st".91pltsJ C6.916/~ 46 ,;,strlr 6 vttl6r,

WHERE amoun t2 <

WHERE amountl

Estas duas últimas pesquisas funcionarão porque a maioria dos Sistemas SQL
dá um pouco de amplitude. Eles ignoram as aspas e tratam os valores tipo DEC li
e INT como números, ainda que as aspas indiquem que são valores de texto.
As consultas NÃO ESTÃO CORRETAS, mas seu Sistema SQL está perdoando.
-- --

você está aqui ,.. 55


Use a Cabeça SQL

Como fazer consultas nos seus tipos de dados


P,tra t''n t'\l't d,ut ... ula' WHERE ,·alida..,, 'on? preci'a cenilicar-'e que cada ttpo dt· dado' que induir e..,t;í fónnatado
con t•tamt·ntl' .. \qw t•,t;'to a' <·om ençõc., para o~ principai'> tipo' ele claclo...:

cffi}Jt.A'c:rtJt.
Cff/}Jt. oll &S stMflt!S • ~
5eMfrf!VSf!&Sf ~

ptCJ dr(Vtasão para


ptCZMA''-
1J11,,a vse aspas·

St"'J>f't vse cspas


st"'f>lts.

~Arf.riA-tíJ riA-tí
ov riA-tLsrAA..fP ._.,// Mrf.
St"'J>rt vst upu. St"'J>rt vst upu .tt""f>lts.

vA-~tC#A-Jt. Os tlp9s de dad9s


5e"'{>rt vst aspas st"'{>lts.
VARCBAit CBAR,
BLOB, DAIE e 'I]viE
ptec1sam de aspas
bf.C

IAJr
simples. Os tl}:>9s
numét1'c9s c9m9 DEC
e iNrnã9 }:>tec1sam.

Mais problemas de pontuação


Grt·~ nllhq{lllll m;u' ah,'llll' contato~ ontem à noite.
1-Jt• c ... ta tt·ntando lll't·n-lo' em ... ua tabela:
srtvf. Fv,.;yo'-'
ft,rvtrs:rl•: 0110411970
fv,l:
.s.t-hrr•
I
{,r•vtrs WIIJ ,.;J
.c-
s.ftyc(j,.,,-.,/II.V•I'tl.f'fiiJS
INSERT INTO meus contatos !,-hrts su: f.s-.AJ"" • u.fl.l.•
1 .f,. vr.farr•-s-1-u
VALUES Pr.cvr•: c•'*'f"~rf• ,s;.:;J":.......-~~

( 'Funyon' , 'Steve' , 'steve@onionflavoredrings. com' , 'M',


'01-04-1970' ,'Punk' ,'Grover's Mill, NJ', 'Solteiro',
'esmagar o estado', 'compatriotas, guitarristas');

56 Capitulo 2
o comando SELECT

lb.1 o programa de parece não estar funcionando. Ele cligita a4,runs ponto c
n;ula.1 para fa1.er o Sistema SQL finalizar. Falta de sorte.

~ P~DERDO
[5(Y CEREBRO
O que acha que está acontecendo aqui?

o
o

Aspas simples incompatíveis


Exatamente! Quando C reg tentou inserir o registro, o Sistema SQL estava esperando
um número par de aspa.~ simples, uma antes e uma depois de cada valor VARCHAR,
CHAR e DATE. O nome da cidade, Grove r ' s Mill, confundiu o as~unto porque foi
adicionado um apóstrofo extra. O sistema SQL ;únda está esperando por uma aspa
simples para o fechamento do texto.

Você pode voltar ao controle de seu sistema.


Finalize o comando digitando uma aspa simples c
um ponto e vírgula. Isto dará ao Sistema SQL a aspa
simples a mais que ele está esper;mdo.
Você terá uma mensagem de erro quando digiuu· a outra aspa e o ponto-
c-vírgula c terá que inserir o cotmmdo INSERT de novo a partir do
rascunho.

'

você está aqui 11>- 57


Us Cabeça SQL

A-4 ,;,S(I'I-,. 41 41Sf41 f Isto n


Silllf{(S ( (llt\ f 4 ,1-4 - apóstrofo?
~:f'j(lf41 4 C41t\41,~4
IIJst/l-r,-,.hrr4""f''J 4
~:
S(l': f,;,.tt~ 41 ~4 •

Es+t (l'r4 11: (llf\41 ,;t;,-. ~(lt\


cl•r• sdr( 4 (1( (~:
3
(1'1'411/4, E!( ci·h pcr+t 1141
$(141 C4,S(I/j.41 1;,;c1..,1(4 C 1t\
4
41 41Sp41 Si-v>I(S 4l lt\4liS,

IA.ts- &"' •r<:J•'s-1-rc.-h.•• s•"J• IN SE


,;,S(I'I'Ii4 4 ~/-/-,-lt\4 > lt\4SII'41 3(1( f(/4 lt\(,4S
J / L
4 f1'4j1'411t\41 (s-/-c I'(Sf4"~(,~4 "4V411t\(~. \ 0( l' jlll'C

tt•tminaJ 1

Aspas simples são caracteres especiais Manuseie


\ o tt·ntar imetit um \'. \ HCH. \H. C I I.\ H ou BLOB que mntt·nha um apó~trolo, 'o<·ê de\·e \ 0< ê pod
uuhr;u ao ~eu ~mtt•ma SQL que de n:to \l.l,'llilica o final claquck tcxto, mas sim parte do rar.telt'rt'
texto c prcá.a \t' t mrluído na linha. l fma maneira de (;l.r.cr j~,o é adicionando uma
barra invertida na lrc: utc da a'pa ~impk1..

INSERT INTO meus contatos


( 'Fu
(local) '01-d
VALUES(' Grover\'s Mill'); 'es
('Grover\ 's ~11');
Manuseie
\ o
o <> utJ~t ma

INSE
iVALUJ

f.t41 ( IJS41~41 p411'41 ~t;(l' 414 S(IJ


Stsfflt\41 S~L. 4 "~( tJit\• ,,.,~,. ~(
ff x-/-4 C41t\(541 ( ffl'lt\t,41 , 'es

sa :apiwlo 2
o co ma1 SELECT

não ex'l~em •
Petguntas Idi<nas

f Isto não é a mes ma coisa que um f :As colunas DEC e INT precisam dele? f · Não poderíamos f acilitar dizendo
çés10fo? separadamente ao usar aspas duplas ao invés
f( Não. As colunas numéricas não precisam de de aspas simples?
~:E exatamente amesma coisa que um apóstrofo; espaços, então é fácil dizer quando os números
e.'llallto. SQL designa um significado muito acabam e a próxima palavra do código começa. R. Não Não use aspas duplas no caso de
~ a ele. É usado ao software SQL que os posteriormente, usar seus comandos SQL
em entre dois deles são os dados do texto. f : Então, ela só é usada para colunas de combinados com uma linguagem de programação
(como PHP). Vere usa · na linguagem de programação
r Q.M tipos de dados precisam dele?
texto?

R: Sim. O único problema é que colunas de texto


para dizer •aqui é onde o comando SQL fica•; desta
forma, aspas simples são reconhecidas como sendo
~Os lpos de dados de texto. Os dados de texto têm espaços, o que causa problemas quando seus parte daquele comando e não parte da linguagem
~mente significam que os dados são de uma dados contêm apóstrofos. SQL não sabe como de programação.
aiN 'HAR,CHAR, BLOB OU ':'lMEDATE. distinguir entre o apóstrofo dentro da coluna e
.i:;uer um que não seja um número. apóstrofo que diz ao Sistema que a coluna começou
ou acabou.

INSERT (Insira) dados com aspas simples nele


\1\1 IHWSa diter ao seu SiMcma SQL que aqnela a~pas l>implc~ niH> c~la ali para iniciar ou
l(mllll;u uma linha de texto, ma~ ..nn qlll' C: fN111t' da linha rk texto.

Mameie as aspas com a barra invertida


:e podt· lâtn i~to (c COJN.'Jt;u 'l'll comando .:: NS ERT ao lllt''lllo tt·mpo) ao adicionar o
cn barra mwrtida na fn.'ntc da '"IM ''mplc~ int~~ntc na 'ua l111h<t de texto:
~i}tr C6 s,s-~-t... S~{_ 3"t """• cspc
INSERT INTO meus conta tos Si~t~p/ts t p•rff #16 ffd6 C6 C616cCr
"""' Jcrrc ,.,vtr-hil• , 4 lrt,-/-t Jtlc t
VALUES 11
ct.c.,•J6 Jt tsc4par~'

('Funyon' , 'Steve' , 'steve@onion~redrings. com' , 'M' ,


'01-04-1970 f f 'Punkf f f Grover\ f s Mill f NJf , 'Solteiro' ,
'esmagar o estado', 'compatriotas, guitarristas') ;

Mumieas aspas com uma aspa simples extra


~lrd mallt·ira ele wc~cap;u·" a~ H~pa~ t' colora r uma aspa simple~ t'\lra na frente clda.
11 11
()11 V6Ct"' p6iJ~ tSCI.pCI' 11IMC CSf C
INSERT INTO meus conta tos
si~t~plts c~l6cc,tl~ ".,. csp • tx-1-r• ,a
VALUES lrt,h ~~~ 1•·

('Funyon' , ' Steve ' , 'steve@onion~oredrings. com' , 'M' ,


'1970-04-01 ' , 'Punk' Grover' 's Mill, NJf 'Solteiro' ,
f' f

'esmagar o estado f , 'compatriotas, guitarristas' ) ;

•~ P~DERDO
'fXY CEREBRO
Que outros caracteres podem causar o mesmo problema?

voe e esta aqUI • 59


Use. a Cabeça SQL

Se você tem dados na sua tabela com aspas, pode ser que tenha que procurar por eles com a
el
cláusula WHERE em algum momento. Para usar o SELECT para dados contendo aspas simples COI" \ 01 1
sua cláusula WHERE, você precisa ·escapar" sua aspa simples da mesma forma que fez ao inseri-la '

Reescreva o código abaixo usando métodos diferentes para "escapar" a aspas simples.

SELECT * FROM meus conta tos


WHERE
1ocat ion = 'Grov er's Mi11, NJ';
o

Que método você prefere?

Se você tem dados na sua tabela com aspas, pode ser que tenha que procurar por eles com a
cláusula WHERE em algum momento. Para usar o SELECT para dados contendo aspas simples w
sua cláusula WHERE, você precisa "escapar" sua aspa simples da mesma forma que fez ao insen·
Reescreva o código abaixo usando métodos diferentes para escapar a aspas s1mples.

Exerc i c ios
SELECT * FROM meus conta tos
WHERE
1ocat ion 'Grov er's ~11, NJ' ;

o ......~~.~~~F.~'?.~. ~~~!_c_~~~f.o.!. .................. .................. ...................... .


wl/f.Jt.í ................E ........................................... ...............:,.;........... .
.................
(t?~.~(.~. ~t:~~V.ft~'{~ l~l(~) .~J.; ......~-. ~~~.~~ .~~~. ~. ~~~~.~ . ~~t~ ...~~ ... ..... .
1
.. .. ..

......~/....~~ F~~.~r.tt$...,c.~~ht. .................. .......................... ...............


......wlf.~l~J.......... .......... ......... .................. .......................... ··············+·······
..... .lt~CAl.~ ~AIIV.tr. .. .~~$.. ~1.-f.tl'-; NJ.~; ~.. ~~~-~~ ?:~. ~ -~~':~. ~:·:.'~~. ~~.. -~~-....

60 Cap1tulo 2
o comando SELECT

Selecionar (SELE CT) dados específicos


n
\,"Or.IIJUl' dominou romo 'dt·non;u todo' o' tipo' de dados com a'pa,, c como u'ar o SELECT em dado' onde há ;c,pa,.
I.

Espere. Toda vez que uso um comando


SELECT * meus_contatos é uma grande confusão ()
porque ele se enrola. Posso esconder todas
aquelas colunas extras quando, talvez, eu queira
apenas o email de alguém?

Você precisa saber usar o SELECT (selecionar) apenas


com as colunas que deseja ver.
O qu~ ptrci,tullo' t~ maim precisão. \';unos tentar limit;u· os rt·sultados
um pouro. [jmitar os rl'suhados ,j~nifica obter menos coluna' no nosso
rc,uhado. \m ,dl·non;uno' apenas a' colunas que desej;unm wt.

Antes de testar esta consulta SELECT, rascunhe como acha que a tabela com os resultados será (se
precisar dar uma olhada na tabela drinks_fáceis, você pode encontrá-la na página 59.)

*
AJ;s st~is-h·h:~tJs () ptltJ
lftJ~t tlts-/-•s CtJI1111•S,

~ ~
SELECT nome do_drink, principal, segundo
FROM drinks faceis
WHERE principal - 'soda';

Antes de testar esta consulta SELECT, rascunhe como acha que a tabela com os resultados será.

nome do drink i Cl.OC1pal segundo


Blue moon soda suco de mu1ilo
Lone Tree soda suco de cereja
Greyhound soda suco de toron1o
Soda ond it soda suco de uva

você esta aqu1 "' 61


Us Cabeça SQL

Ojeito antigo
SELECT * FROM drinks faceis ;

, 6~.f,.vt,.,6s .f6#1ts ts c61Wtts f! 6 "6SS6 rtsul.ft#16


fotllt
f! Jr•,Jt Jt,.,•ls p•r• cdtr "'j'"f!/t #16 ,6SS6 sts.ft,.,,,
Ílts Sf! f!"r61t"' ptn • pr:x,.,.,, lt;,t., f! 6 rtsul.ft#16 ( 11"''
~.,11"1'·

62 ~ap1tuto 2
o comando SELECT

~elecionar (SELECT) colunas específicas para limitar os resultados


1 l 'll(l ilicar quais colunas queremos que retornem na nos~a conl.ulta, podemos escolher apenas o~
rt "(a, mluna' que preri~;uno~ . •h~im como utiliza uma cláu~ula WHERE para limit;u· o número

ll,, 10rr p<l<le usar uma ~cleçào de coluna para limitar o número de colunas. ,\ questão é
o Shtl'llla SQL fazer o u·abalho pe~ado por você.

SELECT nome_do_drink f principal f segundo ~


ptul~.t\6S !IW.i·f.r "6SS6S
,..11\4 $
ffiOM drinks faceis ; r~svt·f.ti6S 46 s~l~cttJIJ41' 4f>~"4S
4S C6fti,4S 3(1~ 3(1~1'~.t\6S ~Xi'Íil' '16
r~st~l·f.ti6.

F<t Edd W1ndow Help JustEnou h


..
~ ·~·~~--~ ... . ··r ·"'-· . . . . "'.
:,..~-
> SELECT noi!le do dr~nk, pnnc~pal·; . segundo FROM · dr~nks face~s;
1 ·, ...... - . . •' 0 . ,
0

+----- ------'·;_-;:-__ ::-_ ..., +_-,....,.::_.:. ~ -:.c:_:..' ,..--.;.. -- .;: ;..+.,.-.:. ____ '7 __ ._____ ::--'.-+
1 nome do dl:-irik I principal• · · · · · I segundo I
+-----=---=----- -- --_-+-'---- ---- ..; ___ ;.. .:._--+- ---------------- -+
Kiss on the.· Lips I. suco -de ~er~ja néctar de damasco
Hot Gold néctar de pêssego suco de laranja
Lone Tree soda . I suco de cereja
Greyhound. s~da suco de toranja
Indian Summer · sU.codé máçã ciliá :~ente .
Bull Frog chá gelado limonada I
Soda and It soda 'I suco de uva I
Blackthorn água tônica - I Suco -de abacaxi
I
Blue Moon ~o da suco de mirtilo
1 Oh My Gosh néctar de pêssego Suco de abacaxi
1 Lime Fiz_
z ~pri te suco de limão
+------- --------,-- - -'-+---::.:. --·- -~--- -- -+- ---------------- -+
11 rows in set :'( o·. 00• sec) · ·
~ ,:_ -

~elecione (SELECT) colunas específicas para resultados mais rápidos


r (uma boa prática de progTama~·ão a se seguir, mas tem outros bc11dkios.
\medida qur ~ua~ tabela~ liram maiores, ela acelera a recupt·ra~·ão de seus
a'íUitado,. \'0<·ê \'erá tmnbém mais velocidade qu;Uido, eventualmente, usar
'QJ rom outra lin~uagcm de progrmmtçào, como a PHP.

você está aqui .. 63


Use a Cabeça SQL

Muitas maneiras de conseguir um drink Kiss on The Lips Termin e

on the Lips:
Ainda lembra de nossa tabela drinks_fáceis? Este comando SELECT resultará em um Kiss SELECT

SELECT nome do drink s FROM drink s facei s WHERE

WHERE SELECT

WHERE
Princ ipal 'suco de cere ja'
SELECT
Termine os outros quatro códigos na próxima página para conseguir um Beijo também.
WHERE
drinks faceis

d~ · :Cl.F'<S quar.t: d ,del s .. gund< q uantJ.dade2 1 {".J COê;:, SELECT


'' nk "'' mexo com gelo, coloque em uma toçode~
Bladcthom ógua tônica 1.5 suco de abacaxi 1
WHERE
com limõo batido

Blue moon soda 1.5 suco de mirtilo 0.75 mexa com gelo, coloque em uma toçodtcr
com lim6o batido
l.s-1-.;. ! 1
1 suco de abacaxi 1 mexa com gelo, coloque em um copm o•l ....
OhMyGosh n6<:tor de péssego JVt VlllCt 3
Lime Fiu Sprite 1.5 suco de lim6o 0.75 mexa com gelo, coloque em uma toço de
I -ser .J.t,
suco de cereja 2 n6<:tor de damasco 7 Sirvo com gelo e canudo "
tl"l'lll Jt " · .;
Kiss on lhe lips
nédor de pêssego 3 suco de laranja 6 coloque suco de loronja quente em umo(l)J
HotGold
adicione n6<:tor de péssego
mexo com gelo, coloque em umo taça de a:;

~
lone Tree soda 1.5 suco de cereja 0.75

soda 1.5 suco de toranja 5 sirvo com gelo, mexa bem


Greyhound
lndian Summer suco de maçli 2 chó quente 6 adicionar o suco em uma caneca e complt,
resto com chá quente I • Use as~
sirvo com gelo e uma fatio deliiN
for selec
Buli Frog chó gelado 1.5 limonada 5 1
• Não us
2 suco de uva 1 misture em uma laço de coquetel, semi(
Soda ond it soda numénc(
• Use o
selecron
SELECT

WHERE

SELECT .... .............. ............... ............... ......... .


WHERE Agora escreva os três comandos SELECT que darão [' E se eu preo
a você um BULL FROG. odas as colunas
leverla nomeá-la
SELECT

WHERE
o :Se precrsard
ndo não preci

SELECT

WHERE
f la

Tenllai copiar e
P* recebendo
algo E!fT3do

64 Capitulo 2
o comando SELECT

Ar<>nte seu lá~is - - - - - - - - - - - - - - - - - - - - - - - - - ,


S9luçã.9
Termine os outros quatro códigos na próxima página para conseguir um Kiss também.

SELECT .....'!~~~_,1,~_ll.t:!''.'.~. f~(!.~.~':'!"'.'.~!. _f~.C.~!'t ..

WHERE ...~~!~'.'.~~.':. ~~d-_~r..t!.~.t!.~'!!~.~~~~ ..; ....... .

WHERE ..... J'!.~'!:f?~~~~l:-..~ _'l ........................... . Agora escreva os três comandos SELECT que darão
a você um BULL FROG.
SELECT ....."!~~~-~~ -~':~"'!.~ .f/!:.!?.11, .~~~"'!~!...!.~~~~~...

tolHERE ... ~"'.f.~f~'!.~~~!. .~:!''r.~~.~~~ j~(~. ~.C.~!!'!.~~'.;..


o .Sf.Lf.Cr"o"'~
........................ -
tio tlr,;,J: FJtbM.
.......... lie~is
tlrti,l:s,..,.,
.. .............

SELECT "o..~ tio tlr,;,J:


. ·······-···"""· FJtOM. tlrti,l:s l4c~ls
················ ... ...... ,............ .
.~?:~~'!.~~~-"-~jt:.'"'.?~. f~l?.~. t!_t:!"'.f.~!. _f~.C(IS
.~HJ~~.'-t:s~'.'.iJ.~ .~:!,:-!!~~~~l; ................. .
Sf.Lf.Cr"o"'~ tio tlr,;,J: FJtOM. tlrti,l:s l4c~ls
··················-···-· ········· · .............. .. . ~

.~I!Y~~ .'~d.t:.~lf.o.~!.r:. ~s/t:.l-:'~. ~~~J~/o. .~.i(.~~ .f._.;.,..,


ti~,..,.,, •
........... )

·Use aspas simples nas suas cláusulas WHERE quando • Se tiver inserido sua consulta e o Sistema SQL não
for selecionar campos de textos. finalizar o processo, procure se há falta de uma aspa
• Nao use aspas simples quando for selecionar campos simples.
numéricos. • Quando puder, selecione colunas específicas na sua
• Use o * no seu comando SELECT quando quiser tabela ao invés de usar SELECT ".
selecionar todas as colunas.

não existem •
Perguntas Idíota.'5

r Ese eu precisar que a consulta retorne


~s as colunas da minha tabela? Eu realmente
Colá-las em um editor de texto é uma forma de ver
e remover estes caracteres "gremlins". Sua melhor
f :Sobre escapar o apóstrofo, há alguma razão
em usar um método ao invés de outro?
deveria nomeá-las ao invés de usar o *? alternativa é colar tudo em um editor de texto e
analisar cuidadosamente. R.:Na verdade não. Nós tendemos a usar o método
R: Sepreosarde todas elas, então use·. Apenas da barra invertida somente porque achamos que é
~ nao precisar de todas elas que não deve f :Então eu deveria colar em algum lugar como ma1s fácil para visualizar onde o apóstrofo extra
~ Microsoft Word, por exemplo? está quando alguma coisa der errado na consulta.
Por exemplo. isto é mais fácil de processar
f lR!I copiar e mllll<l consulta da Internet e R.: Não, Word não é uma boa opção, uma vez visualmente
~ rabendo erros quando tentava IJSá.la. Estou que ele não faz nada para exibir as formatações ' ter~"'" ' yout 1ster\ ' s pencl. '
um a1go enado? invisíveis que podem estar no texto. Tente o Bloco Do que isto.
de Notas (PC) ou TextEdit no modo texto sem
' In n ' ' t Lh 1t your 1ster' ' s pPnCll. '
f{ Consullas copiadas de navegadores web às formatação (MAC).
caracteres invislveis que parecem
~zes contém Além disso, não há razão alguma em benefiCiar um
~ mas significam algo a mais para a SQL. método em detrimento a outro. Ambos os métodos
permitem que você insira um apóstrofo nas suas
colunas de texto

voce esta aqUI 11> 65


Use a Cabeça SQL

Donuts pergunta o que sua tabela pode fazer por você ...
Para cnc-onlr;u o melhor donuh com cobertura na tabda. vorê preci~a 1:1z<:r pelo!. meno~
doi~ comando, SELECT. O prirm·iro ~cl<:ciomu-;í linh;h rom o tjpo conTI<> ele dormt. .\
' CI,"lHHla \ill wltTionar a linha t·om donull> com a nota 10.

notas donuts

~ 3 dd Lpo • c
Starbuzz Coffee 07:43 23/04 cobertura de 6
canela
Ouncan's Donuts 08:56 25/04 cobertu ra simples 5
Duncan's Donu ts 19:58 2 4/04 g eléia 6

Starbuzz Coffee 22:35 23/04 cobertura simples 7

Krispy King 21:39 26/09 geléia 6 sem geleios.·.

Starbuzz Coffee 7:48 23/04 chocola te com 10


casta nha s

z,.,l.j,.,( &"( (sh -h!J(IIt


.ff,J.. I 0.000 I'(Jis+I'6S,
O l 'm;t nmn<:ir..t é procurar pl'lo 1ipo de donul:
empres•
Ouncan's Donut
SELECT empresa , nota FROM notas donuts Starbuzz Coffee
WHERE ~ Ktctprtc.:s·• Sf.U.cr
Útltcl'o,ltr) 1 , 0 -/-,
J>ll'lt J>I'OCCII'II'
11(,-/-rt IS ,o.J.u
""lttS 11-/-u t
t""fl'tSitS pltl'lt
1 lt(SCII.f~tlio ,/lt pl',-11\tirl
CO,Stjlltr o , 6 ,.,t Jlt ""IS t""l.j'i-t( c(,.hiiC1 I
vt,ctli6rtt,

Pergunte o que você pode fazer por seu donut


o
eMf·

SELECT empresa , tipo FROM notas donuts Starbuzz Coffee

WHERE

Nota = 10 ;

t0 I'(SIIIf~ttlo t/lt S(,CII'Itilt Coi!SIIIftJ


,
S(rio •s ,o-/-u
l'lt>VIt,.,tl'lff l'ffl'lt.f,. C(,.hii.S l.t
,.,,x,.,.,•s. J
I'(J's+ros,
66 Capttulo 2
o comando SELECT

o o

~ P~DERDO
"'fXf CEREBRO
Em português claro, que pergunta você realmente quer fazer
para essas consultas?

tombinando suas consu Itas


•'rmo> dar mnta das duas coisas que estamos prorurando, 'cobertura simples', como tipo, c IO, romo nota, em
)(lfOII,uJta usando a palavra-chave ANO (e). Os resultados que obtivermos satisfará ambas as condições.
I
~ /}56 ,.4 .fvl.6 6 &"t prtcis•~s t
SELECT empresa su..tcr. t""('l'ts4

FROM notas donuts


WHERE tipo 'cobertura simples'

Nota=
Naor\',uJtado da consulta ANO. Mesmo se recebermos mais de uma linha com resultado da pesquisa,
de cobertura simple~ com a nota I O, então você
namo1 que todas as empresas do resultado têm donuts
na 1r a qualquer uma delas. Ou a todas elas.

f..s+l. C6,$tll+4 C611\ÍI.,I. 6$ l'tstJ/+41.6$


l.t 1c6Ítr+vrl. s,....,/ts t ,6+•' = /O
f41'1. t"c6,+r4r &tJ"'&tJtr rtsvt+•J6
3t1t St 41.4fh 4 411\ÍI.S .S C6,StJI+u.

~
empresa
Starbuzz Coffee

você esta aqui • 67


Use Cabeça SQL

Então eu poderia ter encontrado Anne


usando AND?
o
o

Utilizando a tabela meus_contatos, escreva algumas consultas para


Greg. SELECT (selecione) apenas as colunas que realmente precisar
para obter sua resposta. Preste atenção nas aspas simples.

Escreva uma consulta para encontrar o email de todos os programadores.

Escreva uma consulta para encontrar o nome e local de qualquer um com seu aniversário (data do nascimento).

Escreva uma consulta para encontrar o nome e email de qualquer pessoa solteira na sua cidade. Para
pontos extras, escolha apenas aquelas do sexo que você gostaria de ter um encontro.

Escreva uma consulta que Greg poderia ter utilizado para encontrar todas as Annes de São Francisco.

68 Capitulo 2
o comando SELECT

Exerci cios

Utilizando a tabela meus_contatos, escreva algumas consultas para


Greg. SELECT (selecione) apenas as colunas que realmente precisar
para obter sua resposta. Preste atenção nas aspas simples.

Escreva uma consulta para encontrar o email de todos os programadores.


~s·zú~I'~IKO'S·. ~................................................................................ ............ .
t.tt~lt1!1A ~~~ti•.... ~f.::~.Ç'!"_~~~~:~ f~~~. ~~~!._C.~~f~.f.'!!. .......................................................... .
........ ....... ... ......"!HY~.~ f.r'.~~~~!~'! .~~f.t:fJr~~·M.'!r'.~; ................ ·/}- -,rolf'5s4o. fJut. .,;~............... .. .
K_ t l'tiCf'«M«I.jjf',
........................................................................................ ·1/'t.l.'!!~~.~... r. ... <(...................... .

Escreva uma consulta para encontrar o nome e local de qualquer um com seu aniversário (data do nascimento) .

.5f.(...f.Cís"~"t"""'tJ ............
................................................. prt/11\ti'r":!':'"""'t l"cal
. . . . . . ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... .

.................······Flt.OM 111\tlls-'""h.f"s
·~iii~·i ·~:;it.~~·~ ·~·;o~~"09~197 s-i·:······ .. ·.. ·· .. ······ .... ··· .. ··· .. ·········· .. ···· .. ····
.............................. . ........ ......,/. ....................... . .... J........... A-.;v··:r. ..................................... .
~ O1
«tll(l'l(t Str Stll
a,,.Vtrsariil
' . I
tlf'T'rt aspas.

Escreva uma consulta para encontrar o nome e email de qualquer pessoa solteira na sua cidade. Para
pootos extras, escolha apenas aquelas do sexo que você gostaria de ter um encontro.

Sf.t...f.Cís"írt"""'t ,.,.,..,..ti'r" """'t t/11\l.t'l


.................................................J ............ :!':'. . . . . . l ............................................................. .

........ ... .. ... .. ... ...Flt.OM


... .. .... ..111\tlls
.. .... ,.,.'"".fa.f"s
............................................ :So• -c ;,I.I.e A &"''·•• ........................ .
1
wHilt.il"ccl = ~., /},J-""'6 r>c ~
............................................................. ~....................................................................... .

I}Alb S(/lcjj ,. IM I~
' - () stx" lia ptss"' 3llt v"ct
!"s.fcri'l. llt -hr 11111\ t"c",Jro,
Escreva uma consulta que Greg poderia ter utilizado para encontrar todas as Annes de São Francisco.

Sf.t...f.Císoírt,o/11\t prt..,..ti'r" """'t tlll\4t'l


..... . .... . .................................... J ............ - ...... ~ .............................................................. .

Flt.OM_ 111\(IIS '",Ja.fos ................................. .()IJ.~.~tl.o.p. ara


........................................................ .fi'«S ,~.
..............
,
h .,..,_ut.
I L I bf't.G ptJ.I'(C(
.....~· ......• ,_ .Sa.., •J "
1
wHf.Jt.f. local ,. .5,., Fr.., C/} I ~ -h r t,clll'h.l.o 51./j ,...,,,sc/j f ".
..................................................... .. J ............................................................. 't '(lt,'ff"&.A· SI~"
I}Alb pr,..,..t.tro """'t ,. 1/},,t I. Fr•"· f..spt.ralf\oS &11
.................................................. ............ J. ........ .. ....................... ~··J.......L-. ........................ .
co,SIS"n:,-n:•

você está aqui .,. 69


Use a Cabeça SQL

Encontrando valores numéricos


Dig-,unos que queira cncontnu·todos m drink.s da tabela drinks face i s que contenha mai~ de uma mwa
em uma úwó1 con.~ulta. Aqui está o jeito difícil para cncontTm· os resultados. \'ocê pode utilií';u· dua~ comultas:

.4-pt~lfs 3tltrt~t~~4s ~e_do_drink


4
FROM drinks face i s
~41111t lll4s lllrl~J:s. WHERE
~ Principal = 'soda'
brt~I:S C41111 StJtll. CIJIIII
ANO
/.S" 4~il. tlt S4tll.. '---- ...._r quantidade1 = 1.5;

File Ed1t Wmdow Help MoreSoda

> SELECT nome do drink FROM drinks faceis WHERE Principal =


'soda' ANO quantidade1 = 1.5;
+---------------+
I nome_do_drink I
+---------------+
Blue Moon
Lone Tree
Greyhound
+---------------+
3 rows in set (0.00 sec)

SELECT nome do drink FROM drinks faceis


WHERE
~r,;,J:s llt S411ll. c~ Principal = 'soda'
2 4~]4S 1ft S4#14. ANO
quantidade1 = 2;

70 Caprtulo 2
o comando SELECT

Não seria um sonho se eu só


encontrasse todos os drinks na tabela
o drinks_fáceis que contenham mais do que
uma onça em uma só consulta. Mas sei que
isto é só uma fantasia ...

drinks faceis
..., k prrncipal quantidade i segundo quantidade2 1nstru.:o<.s
81oddhom óguo tônico 1.5 suco de abacaxi 1 mexo com gelo, coloque em umo toço de coquetel
com limão batido
Blue moon soda 1.5 suco de mirtilo 0.75 mexo com gelo, coloque em uma taça de coquetel
com limão batido

OhMyGosh néctar de pêssego 1 suco de abacaxi 1 mexo com gelo, coloque em um copinho de licor

lime Fizz Sprite 1.5 suco de limão 0.75 mexo com gelo, coloque em uma taça de coquetel

Kisson lhe lips suco de cereja 2 néctar de damasco 7 sirvo com gelo e canudo
HotGold néctar de pêssego 3 suco de laranja 6 coloque suco de laranja quente em uma caneco e
adicione néctar de pêssego
lone Tree soda 1.5 suco de cereja 0.75 mexo com gelo, coloque em uma taça de coquetel
Gteyhound soda 1.5 suco de toranja 5 sirvo com gelo, mexo bem
IN!ion Summer suco de maçã 2 chó quente 6 adicionar o suco em uma caneco e completar o
resto com chó quente
B.J!Ifrog chó gelado 1.5 limonada 5 sirvo com gelo e uma fatio de limo
Sodo ond it soda 2 suco de uva 1 misture em uma taça de coquetel, sem gelo

~ma vez é o suficiente


!un1.1 perda de tempo u~;u· dua~ colunas, c ainda poderá deixar passar be bida~ rom quantidades como I. 75 ou
onl•'· Em \CZ disso, podc-hc us;u· um sinal de maior:

SELECT nome do drink FROM drinks faceis


WHERE
principal 'soda'
AND

você está aqui .,._ 71


Use a Cabeça SQL

I • I • •:

SELECT nome do drink FROM drinks faceis WHERE principal =


'soda' ANO quantidadel > 1;
(_}
+----------------+ (()
I norne_do_drink ch
+----------------+
Blue Moon
Lone Tree
Greyhound
Soda and It
+----------------+
4 rows in set (0.00 sec)

·~ P~DERDO
"iJ!Y cEREBRO
Por que você não pode combinar as duas consultas com um ANO adicional?

Operadores de comparação S)ft(pr~as


,\té a~-:ora, \'ocê tem mado apt•nas o sinal de igual na Mia d:íusula WHERE. Você acabou de \'l:r o sinal de maior.>.
O que de f<v é comparar lllll ,·;dor em relaç<io a outro. ,\ qui t•st;io o~ outros opcradon.•s de comparação.

O ~i na] de il{ual procura por compath-ci~ cxatm. E..~~c ~inal wnfuso não é igual (também

Ele não nm <,cne quando queremos cncontnu conhecido como diferente) . Ele retoma
algo que -;eja maior ou mt·nor que a outra coisa. t•xatamcnlc os n:sultadm OIX)stos que o sinal de igu;~.
Dois \'alorcs podt·m st•r tanto iguais ou não iguais.

J
is-h •3vl 3tltr Jl}tr AlÂtJ I6v /1-t_,
i~ rfft~NI• .f.t~Jt~s tiS rtJt"sl-rt~s 3tlt
..,.ti Cti"'ÂI~t~ Ctl~ • Cti"'Jif;tl,
Mascula~ão
cerebral

Você já percebeu que toda cláusula WHERE até agora tem sempre um nome de
coluna na esquerda. Ela funcionaria se o nome da coluna estivesse na direita?

72 Capitulo 2
o comand SELECT

Osinal de menor procura pelo~> \';uorcs na O sinal de maior i· o imTr~o elo ~imtl de menor.
luua na e'>qucrda c o~ compara com os \'alores Ele procura por valon:~> na coluna c o~ compar.t ao\
di!flla. Se o ,·aJor da coluna i·~· que o ,·;tlorcs da coltma da din·ua. St· o ,·alor ela coluna é
rda direita, aquela linha(· n1hicla. maior que o \a.lor da dirt•ita. aquda linha é exibida.

\ wura d1ferença com o sinal de menor .\mesma coi'>a com o sinal d e maior ou
ou igual é que os '-alore'l das colunas i~1ai~ a igual. Se o \-alor da coluna fi>r Íl,'l.lal ou maior que:
nd1\<io também ~>ào e'\ibidos. o ,'aJor ela condi~·;io, a linha st·rá e'\ibída.
il.

)
~"'-'&vtr vcltJr 311t /tJr ~,tWOJt.
()(I Ibu /tL lt • ctJ#ftiif;(J (
(ICi~t't/1.,

você está aqui., 73


Use a Cabeça SQL

Encontrando dados numéricos com operadores de comparação


O ba1 elo l ~c a Cabeça tem uma tabela çom o custo c mJonnaçào nuuiçional de \CU\ <IIÍnks. Ele.,
querem C\ihir os dlÍnks mai~ caros c com menos calo1ia~ para aum<.·ntarem os lucro~.

Eles est;io u~<Uldo op<:radores de comparaçào para cnconu·ar os drink~ que cust<U11 pelo menos $ 3.50
e têm nH.·nos que 50 caloria.'> na tabela drink_info.

O .ft;·hl Jtt jl'•~~<~tS Jtt clll'.tii"JI'..ftiS t!~~<~ c•J• Jl'l;,l:,

drink info

4.7 vermelho N

nome do drink FROM drink info


WHERE is-1-t •3t~t Jt3 , •cl.tt Jr,;,J:s

preço >=
3. 5 ,c:--- 3llt! ct~s.f.•"" IJ.!) O ti(l 11\lll"s~'
I.F../-t; ,.,c/(lt Jr,;,J:s 3llt! ct~.F.f.cll\
AND ~·h""tt,-h IJ.s-o.
calorias < 50; is-1-t J;~;" tt'lcli,.f.rtt
Jr,;,l:s c ti~~<~ ~~<~t!'lliS Jtt !)O
c•lor,-.s".

L<.ta comuha '>Ó exibt· clrinks em que a mbas çondiçi><.•s '>à<> t•ncolllrada~ por causa do ANO combinando o~
o.,
dois I<.''>Uhadm. dnrll..s que são c\.ih1dos ~o: Oh \1~ Gosh, Lonc Tree e Soda anel lt.

74 Capitulo 2
o comando SELECT

Sua vez de fazer uma mistura. Escreva consultas que retornarão as seguintes
informações. Escreva também qual foi o resultado de cada consulta:

Ocusto de cada drink com gelo que seja amarelo e com mais de
33 calorias.

Resultado: ............ . .............. . ....................................... ................... .... . ..... . ...................... .

O nome e cor de cada drink que não contenham mais que 4


gramas de carboidrato e utilizam gelo.

Resultado: ........ . .............. . ...................... •................................... ............ •.........................

O custo de cada drink que tenha 80 calorias ou mais.

Resultado: ................... . ........... ........... . .................................................................... ..... . .. .

Drinks com o nome Greyhound e Kiss on the Lips, seguido da cor


de cada um e se utilizam gelo ou não para fazer a bebida.

Resultado: .... ... ........ . ..................................... ...... .. ......................................................... . .

você está aqui • 75


Use a Cabeça SQL

Aponte. :ie.u Ját>'ls - - - - - - - - - - - - - - - - - - - - - -,


Amar
So1uç,ã9
Sua vez de fazer uma mistura. Escreva consultas que retornarão as seguintes
informações. Escreva também qual foi o resultado de cada consulta:

O custo de cada drink com gelo que seja amarelo e com mais de
33 calorias. Sf.Lf.Ct;rt ., F/t.()l.i 11,.,.,~ ,..,.,.,

:::: : : : ~~f:!~i~f~~: :.. ~.. . .. . .


. .. .. .. . .. .. . . . . Ç!~t. .-:.~~.":\#:('.~{~~...................................................................................... ........ ..
................. A~lJ.............................................................................................................

~~~~·lt~~·~;::: :~~{~~>: ~~j:·.: : : ·.:: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :


O nome e cor de cada drink que não contenham mais que 4
gramas de carboidrato e utilizam gelo.

·wllfit.i ··.. ·.. -11.,··-..tlri,t


·.... ··.. ···Sf.Lf.cr,.,.,t ·.. ·.. - ,.,f.,
··.. ·.. ··..""'.,~
··.. ·..Flt.OI.i .. ·........ ····.. ···.. ·.. ··.. ··.. ··.. ··.. ··.. ··.. ···.. ··.. ···..
::::::::··:: ç~~~~~~~~~~;:~;:if...::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
........... AJJ!J............................................................................................................ .
.bt14 .'!'.~.~j ...................................................................................... ............... .

Resultado: $/vt ~",). ......................................................................................


............... llvt ............ ..

O custo de cada drink que tenha 80 calorias ou mais.

: : : : : ::~~t~:::~::~~::~:::::~:~:::::::::::::: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
............ ,Ç,.(q('/4~ :~~ .80~ ........................................................................ . Selec
l·oa p1 d1<h
com números correto? Se l:Jl( I IJI(l,IJ
eu quiser encontrar todos
Resultado: ... l.f.".:f..t?.~ .~:f:?:P.o~ !..?::~P. ............................................. .. os drinks cujos nomes
começam com uma letra
específica, eu estaria sem
sorte?
Drinks com o nome Greyhound e Kiss on the Lips, seguido da cor
de cada um e se utilizam gelo ou não para fazer a bebida.
............... ...................................................................................... .. .................. () .. .
. .... .. ..·t!fitf[~~~~J.~-~(',~~?~:)o~~('~~~~. f~f:1.. ~r.~~~..Ji:rl~............................. .
.... . ................................... ~··íffi'"'":''''"'''"'"""'"" ... ..
.............fl:~s~. ?..3. 8~ ................................... ~ ... . ;~~:. ~ .~~~. t~!~~~"'?~~: ...... .
:. :.:.::::::::::::::::::::::::::::::::::: : : : : : : : : : : : :~~:f.~~;t:::.:~:':X~::::::::::::::
Resultado ~:;::;~::::~z•;o,.$ ;:;;:: z::-;;!~:J~
.54t/C C#ft/ Í.fJ Vtl'~t~:,I..,J A) C41t\4 fil.fr<t f>CI'C 4~1'
«f>t'1CS ts-/-ts t/r1;,J;s,

76 Cap1tulo 2
o comando SELECT

~marrando os dados em texto com Operadores de Comparação


;u 1lado\ em texto de um jeito ~imitar com suas colunas de texto como CHAR e VARCHAR. Os operadores de compara~·ào
1 rudu alfabeticamente. Então, dig;u11os, que queira selecionar todos os drinks que COllll'(:tlll n>m a ktra 'L', aqui est;í
11111 que selecionará todo.., os drinks com este critélio.

drink info
fi" ,..a 't r r-,
Blackthorn 3 8.4 amarelo s 33
Blue Moon 2.5 3.2 azul s 12
Oh My Gosh 3.5 8.6 laranja s 35
Lime Fiu 2.5 5.4 verde s 24
Kiss on the Lips 5.5 42 .5 roxo s 171
Hot Gold 3.2 32.1 laranja N 135
Lone Tree 3.6 4.2 vermelho s 17
Greyhound 4 14 amarelo s 50
lndian Summer 2.8 7.2 marrom N 30
Buli Frog 2.6 21.5 cor de canela s ao
Soda and lt 3.8 4.7 vermelho N 19

SELECT nome do dr ink f.s·h C417StJI·h (J(I•• ( 4S


,tr1;,J:s ctó• prt,.,(tr• tt-fr•
FROM drink info Não se preocupe com a
s~• l- 4 11 f4SffriorJ ...s ordem dos resultados por
lfHERE
DaDe do drink >=
'L' "'_!_:;/•;~ ,.,.h, .Jt tA.. enquanto
bn um capitulo posterior no-. lhe
AND mo-.trarcmos maneira!> de -.ep;mu

nome do drink < 'M'; ~ sl'll'> re-.ultaclm alfabeticamente.

~elecionando seus ingredientes


do a um bannan para prl·panu um drink que tenha -.m·o dl· <'l'lcja nele. O bannan JXXkna utilwu duas consultas pan1
U' nl<JUetC:Ís:

Fole Edot Wondow Help

> SELECT nane_d.o_drink FRCM drinks_faceis WHERE principal = 'suco de cereja';

(' +-------------------+
I nome_do_drink
W•c"'s11lh +-------------------+
ckc• "~ J..s I Kiss on the Lips
cW'fiS J.t
~I'(Jit,hs. +-------------------+
1 row in set (0.02 sec)

\ > SELECT nome do drink FROM drinks faceis WHERE segundo


+---------------+
= 'suco de cereja';

I norne_do_drink I
+---------------+
I Lone Tree
+---------------+
1 row in set (0.01 sec)
voce está aqui .,. 77
Us Cabeça SQL

drink info
.... _ -· ca:' _dr.1tOS o ,, · L . . ..
Blockfhom 3 8.4 amarelo s 33
BlueMoon 2.5 3.2 azul s 12
OhMyGosh 3.5 8.6 laranja s 35
Lime Fizz 2.5 5.4 verde s 24
Kiss on the Lips 5.5 42.5 roxo s 171
Hot Gold 3.2 32.1 laranja N 135 u
Lone Tree 3.6 4.2 vermelho s 17
Greyhound 4 14 amarelo s 50
lndion Summer 2.8 7.2 marrom N 30
Buli Frog 2.6 21.5 cor de canela s 80
Soda and lt 3.8 4.7 vermelho N 19

Ser OR (ou) não ser


\ 'on: podt· combinar dua~ romulta-. ullht~mclo OR (OU). E,ta condi~;io niht· re~~tro!-. quando quaisquer da-. condi\·ôe'
loJl'llll'IKOIItracla-.. E.ntào, ao imC:-. dl' dua-. com.ultas \Cparacla,, comlune-a-. rmn OR (OU) dt·,ta lo1111a:

Us

78 Capttulo 2
o comando SELECT

Risque as partes desnecessárias dos dois comandos SELECT abaixo e adicione um OR para
torná-las um único comando SELECT.

SELECT nome do drink FROM drinks faceis WHERE


principal = 'suco de laranja' ;

SELECT nome do drink FROM drinks faceis WHERE


principal = ' suco de maçã';

Use suas novas habilidades em selecionar com seu novo SELECT.

~ J\p9nte seu lápis--- - - - - - - - - - - - - - - - - - - - - . ,


S9luyã9
Risque as partes desnecessárias dos dois comandos SELECT abaixo e adicione um OR para
torná-las um único comando SELECT.
SELECT nome do drink FROM drinks faceis WHERE
principal =

nome do drink FROM chinks faceis WHERE


principal = 'suco de maçã' ;
c.,._ 6 (}Jt. if:S .,~;,.Vf!it16S
e~s Jr,;,l:s C<~itl t'ir5rttlt"t~s
pr,ircipcis Jt svce~ Jt lcrllif'll f!
Jt itlll.f..
SVC6 'ZJ
Use suas novas habilidades em selecionar com seu novo SELECT.

Sf.Lf.Crif.,itlf! Je~ Jr,irl: Flt-01.-1, Jr,irl:s l•cti's


.............................. ~ ... ......... ................... .......... ... ... .................................................. .
~ ~

....... ... ..t.r.~"'!~'f.~!. ~ ~~~~~ -~~ -~~':.~'fl~ ~ .....................................................................................


()/t.
........................................................ ~ .................................................................. .. .. .
.. .. .. .. .. .. tr:~'!Ç,'f.~!. :=:~.f~~~ -~.t. -~~f.~.~;· .. ········· .. ··~vrf!s:t-:-. ·ê~;,-s-vi.:;:.~ ·i;:;,~x ·.. ··.. ·.. ···.. ·····.. ·····.. ···

você está aqui IJ> 79


Use s Cabeça SQL

,
Não confunda seus ANOs com ORs! WHB
Quando qui\t't qut• todas a'> ... ua!> concliçõe ... \l'iam \erdadeiras
u-.e AND.Quando qui.,cr que quaisquer ele ... ua' rondi(ÔC!>
~ejam verdadeira'>, u ... c OR.

( L·: )
OR (ou)

niio ex'isteOl •
fetguntas Idi<nas ---------..

f :Você pode utilizar mais que um ANO ou ORna sua cláusula WHERE?
It Com certeza! Você pode combinar o quanto quiser. Pode inclusive usar ambos os
operadores na mesma cláusula.

WHE

WHE

A diferença entre AN De OR
;'\a., comulta., abaixo \'OCê verá cxcmplm ck tcxlas as possíveis
rombinaçôcs ele duas condiçôcs utilit.<mdo AND cOR cnt.rc elas.

notas donuts
i.ar ..o da· . ..... ~

Krispy King 8:50 27/09 cobertura simples 10 quase perfeito

Duncon's Donuts 8:59 25/08 NULL 6 gorduroso

Storbuzz Coffee 19:35 24/05 bolo de canela 5 não são fresquinhos,


mos são gostosos
Duncon · s Donuts 19:03 26/04 geléia 7 sem geléia suficiente

80 Capitulo 2
o comando SELECT

SELECT tipo FROM notas donuts RESULTADOS

..-
WHERE empresa
- =
"
~l<i'Sff COI;,cttJ~,CI"4

'Krispy King' AND nota


---....... ~= 10; cobertura simples

WHERE empresa = 'Krispy King' OR nota = 10; cobertura simples

WHERE empresa = 'Krispy King' AND nota = 3; sem resultados


_se"' col',c,#l;,clc
WHERE empresa = 'Krispy King' OR~ta ~ cobertura simples
Se"'
__...,.,.__
-
coti,c,#l;,clc

WHERE empresa = 'Snappy Bagel' AND nota = 10; sem resultados

WHERE empresa = 'Snappy Bagel' OR nota = 10; cobertura simples

WHERE empresa = 'Snappy Bagel' AND nota = 3; sem resultados

WHERE empresa = 'Snappy Bagel' OR nota = 3; sem resultados

Seja a C9nd1c19né\1
A.baix<> ..j<:>oo enc<:>ntl'm·á uma séfle de cláu~ulas Wl:ffi~ com ANDs e 0 1\s. Stnta-se como est:Qs
cláusulas e detetmine se elas ..jão <:>u nã.o ptoduzir t·estd-mdos.

SELECT tipo FROM notas donu ts Você conseguiu


algum resultado?
WHERE empresa = 'Krispy King' AND nota <> 6;

WHERE empresa = 'Krispy King' AND nota = 3;

WHERE empresa = 'Snappy Bagel' AND nota >= 6;

WHERE empresa = 'Krispy King' OR nota > 5;

WHERE empresa = 'Krispy King' OR nota = 3;


WHERE empresa = 'Snappy Bagel' OR nota = 6;

Pm-a aumentai· seu potencial, escre..jQ abaixo<> por<j_ue de


dois d<:>s seus tesultaJos são J1fe1·ente.s J<:>s demais.

você está aqui 1> 81


Use a Cabeça SQL

Você
S9luçã9 de Seja a C9nd1c19nal
Abaixo ..Joce enconfl-m-fl uma :lét·ie de cláusulas ~vl!ER.E cum A.NDs e OR.s. TOme-~ um com
e:.tas cl4usulas e detet·m'ine :le elít.i ..Jão ou não pt-<>JtVJl· t·esuk~tdo:~ .

SELE
WHERE
calor:

Você conse guiu


SELECT tipo FROM notas donuts SELEC
algum result ado?
WHERE
WHERE empres a = ' Krispy King ' AND nota <> 6 ; ..~~!~~!:!:.~..S.~':'!:.~~~............... calor

WHERE empres a = ' Krispy King ' AND nota = 3 ;

WHERE empres a = ' Snappy Bagel' AND nota >= 6 ;


P Voo
ISNULI
WHERE empres a = ' Krispy King' OR nota > 5 ;
Etc
WHERE empres a = 'Krisp y King ' OR nota = 3; ..~~~~r.!:!:.~..S.~'Iy.'~~............... a cláus
será N

WHERE empres a = ' Snappy Bagel' OR nota = 6; S ELE


WHER
fm-n aumentru· seu potencial. escre..Jn al~xo o pot<fue de
Joii Joi seus t-esultttdos são J'i\'et·entes dos Je•n<Us.
Enqua
Gtl~ l'~(,l I
1\qut l·,ta 1 •
f: melhor rolocar
Futur;une nlc, aquele!. ,·alores ~ l ' LL podcrào cau.,;u· problema!>.
algtml lipo de , ·ator do que dei;.;;u· o valor liLL na coluna porque o NULL
nã.o pode ser diretam ente selecion ado em uma coluna.

Usando IS NULL para encontrar NULL

drink info
no!" a dr1n1C p:PC" carboiJr t · vs or
Holíday NULL 14 NULL s 50

2.9 7.2 ma rrom N NULL


Dragon Brea th

82 Cap1tulo 2
o comando SELECT

Você não consegue selecionar um Mas você pode selecioná-lo


valor NULL diretamente. usando palavras chave.

SELECT nome do drink


FROM drink info
WHERE ~ A- ,5,,-,. /tu•w.•
calorias IS NULL ; tlt stltci'tmar
r __/~ t/l"rt·f.w.t,.h IIW. V41tJr
Patavras-ct. 4vt IJuLL : vhh·~a,tltJ •
,ãtJ SttJ ll;,t.tts tlt txprtss#.tJ I.51JuLL .
.f.t~ef6Jf6r.f.,f6 ,;6
prtcls4w. tlt aspas.

f Você diz que não consegue "selecionar diretamente'' NULL sem usar f :Como os resultados daquela minha consulta seriam?
IS NULL.Isto quer dizer que consegue selecioná-las indiretamente?
I{: Ela seria exatamente como esta:
R: Correto. Se quiser chegar ao valor naquela coluna, você poderia utilizar +-----------+
adátlsula WHERE em uma das outras colunas. Por exemplo, seu resultado I ca lori e s
sera NULL se utilizar esta consulta: +-----------+
I NULL
~ELECT calorias FROM drink_in fo
iiF.ERE norne_do_drink = ' Dragon Breath ';
+---------- -+

h~uanto isso, na casa do Greg •••


rl',e,l<~ tellla.ndo encontrar todas as pessoas das cidades da Calirórnia na sua tabela meus conta tos.
t'la p;ute da consulta na qual ele está trabalhando:

SELECT * FROM meus conta tos í. ~ t tl,- ,-.;.61.1


WHERE ~ /tSII t&ll 5 .f
local = 'San Fran, CA' .s., h .,..,,,"$C6 tltS 4S
OR ~ tlu•s .,11,tirasJ t
. ,.f s UI'6S tlt
local = 'San Franc~sco CA' &u• tJ u
"''7
c OR
I
tli5'·.fa'j•6·
o local = 'San Jose, CA'
OR
local = 'San Mateo , CA'
OR
local = ' Sunnyvale, CA'
OR
local = 'Marin, CA'
OR
local = 'Oakland, CA'
OR
local = 'Palo Alto, CA'
OR
local 'Sacramento, CA'
OR
local = ' Los Angeles , CA'
OR
E a lista continua ...

você esta aqui .,.. 83


Use IJ Cabeça SQL

Economizando tempo com uma simples palavra-chave: LI KE


lia \tmplt:,mente <"idades dcmai' c mnda mai'> 'uas ,<IJia~·ôe' dt• digitação. l '.,;u· todas aquela!> cláu!'>ul;t, OR ira tirar muito tcn
Gtcg. Fd11mente. há uma palavra-d1mc que t-cononú.ta muito tempo- LIKE -que, u~ada como um corin~a. procma por p;
uma linha de tnto c exibe qualqut•t rt·~ultado compatível.
Greg pode u...ar LIKE desta f(mna:

SELECT * FROM meus contatos


WHERE local LIKE

O chamado do Coringa
LIKE 't' a~-,•ntpa com dois c;uctctciT'> nning<t'>. Cminga.... são
... ulhlltutos para caracteres que e\i!'>tem. t m carartere coringa é
II.,'Ual a qualqut'l outro CaJricterc em uma linha de texto.

Você viu outros coringas no inicio deste capítulo?

É LI KE (como) eu gosto
LIKE gmta de hrinnu· com coring;L.... () pnmciro ~o '>Ínal de por cento, W>, qut· txxle sul~tituir qualqu<:r nullltTo de t<tracterc'> desconb:

SELECT primeiro_nome FROM meus_contatos


WHERE primeiro nome LIKE '•;.im' ;

{)f." ~
uwf: • ., s•>sio--kf• f'"
J~JCitl' lfCI,..ti'O ~t CI.I'I.Cffl'ts
/.,..,f.,:,)...,.,,.., I""'I""
JCII.,./-,i/l.~ts ~t Cl.l'l.c-f.tN!S
~tsco~tl.tcli/os. ~tsco,l.tc,ilos 1.~s ~t ",-.."co.~~~
Ílrct,..J .5!,.,.. t ff....

O ~t'l.,'tiiHio caractere cminga qw: LIKE go:.ta de ficar junto é a sublinha,_ que entende apcna>. um carancre dc:.conhecido.

SELECT primeiro_nome FROM meus_contatos


~RE primeiro_nome LIKE ' im' ; )

A '~' t • ., s.ts/o--kf. ' ' "


~tSCOifl.tcli/o
l.f;.(lfi.S V,.. CI.I'I.Cffl't
-----------:,.tf. ,., ••""' ,. , ., . ,'"
L .., '-s -'• ",-.." C6.1W
c•ri.C1"l:l'-. l..orn:' "'"
J(,-.. t .,...,..,

84 Caprtu/o 2
o comando SELECT

imã de gelade1ta - c9mpat:Ib1lldade


pode Uma porção de cláusulas WHERE está misturada na porta da geladeira. Você
·te de pode unir as cláusulas com seus respectivos resultados? Algumas poderão ter
mais do que uma resposta. Escreva seus próprios comandos LIKE com corin-
gas para qualquer resultado que ficar sobrando de lado.

John J
~acaxi]

[MichigaiJ
IEsplêndido t

[Alabama] [ WHERE estado LIKE 'New %' ; 1


rBlender J

WHERE nome_da_vaca LIKE ' __sie' i~


[ _ New J,e rse~ l:l

-
fMontana

WHERE titulo LIKE 'USE A CABEÇA%' i


Joshuc!::J
Figado

~-
[use a Cabeça s~

GJ [ WHERE rima LIKE '%ender';


]

[New York J [ Esplendor J


)
[

. . o nome LIKE 'Jo%' i )

você está aqui 11> 85


Use a Cabeça SQL

S91uyã9 de imã de gelade!ta- c9mpa:tlb11Idade


Sele
. Você pode unir as
Uma porção de cláusulas WHERE está misturad a na porta da geladeira h pcsso.
mais que uma resposta.
cláusulas com seus respectiv os resultados? Algumas poderão ter OIJSIJJr,u ,
coringas para qualquer resultado q ue ficar
Escreva seus próprios comando s LIKE com
sobrando de lado.

WHEIU: estado
Jersey
New Yorlc

WHEIU: title LIKE 'HEAD FIRST% ';


Use a Cabeça SQL

wl/f.Jt.! pclcvrc L.Ik! 's,.,% •


1

[ WHERE rima LIKE '%~er' ; J


l Blender_Jír-----~~~· Bem

cal.
WHEIU: primeir o_nome

Abacax i

86 Capitulo 2
o coman SELECT

~elecionando alcance usando AN De operadores de comparação


\ IIC'>Oa' do Bar l 'se a Cabe<;a estão tentando sdccion;tr drink~ com uma certa quantidade de caloria~. Como ele~
,u!larào m dado~ para eucontrar nonH.:s de drinks que caberão na faixa de calorias entre :10 e GO?

drink info

Oh My Gosh 3.5
2.5
Kiss on the Lips 5.5
Hot Gold 3.2

Greyhound 4

Soda ond lt 3.8 4.7 vermelho N 19

SELECT nome do drink FROM drink info


WHERE
calorias >= 30 ~ Os I'#!Sllll-tti6S t'i7cllltrQ6 tlrti,~s C6 ...
ct16rt-.s '511«1 • JOJ s~ 1.61/V~r «'Jll"';
AND
41Jll~l~s C6_.. (0 Ctl61't...SJ 6~.-. C6 ...6 6 s
CaloriaS <= 60 ~ t/rti,is C6... Ctl61't...S #lt,../-1'6 JU/-4{4iX4,

~em BETWEEN (entre) nós ••• há um jeito melhor


\ pcJ<lcmo' mar a pala\Ta-<:han: BETWEEN ao inv6 do exemplo anterior. E.la não só é melhor que a consulta anterior, ma~
ocm nibe o~ mc~mos re~ultados. Perceba que o parâmcll'o inicial c linal t;unbém estão incluídos (:30 c GO). BETWEEN é o
.tlcme a mar< c>- , ma' sem o símbolo< E>.

SELECT nome do drink FROM drink info


WHERE
calorias BETWEEN 30

~--~
!., IIICIVI' oS J.rillt.S C41_..
30 t 'O c•lori•s.

você está aqui ~ 87


Use a Cabeça SQL

Depo
Reescreva a consulta da página anterior para SELECT (selecionar) todos os nomes de 1111 ,1 C
drinks que tenham mais que 60 calorias e menos que 30. lllt: 111

Tente usar BETWEEN nas colunas de texto. Escreva uma consulta que irá SELECT (selecionar) os nomes dos drinks
que começam com a letra G até O.

Como você acha que serão os resultados desta consulta?


,.
SELECT nome do drink FROM drink info WHERE
- -
calorias BETWEEN 60 ANO 30;

Âp9nte seu lápis-- - -- - - - - - - - - - - -- - - - ---:.


Solução todos os nomes de
Reescreva a consulta da página anterior para SELECT (selecionar)
drinks que tenham mais que 60 calorias e menos que 30.
Sf.Lf.C"r,6..,t #16 Jr,;,k FilO~-{ lirt;,k ,..,16 ,
·· ···· ·· ···· ·· ·····- ··- ···· ··· ···· ··· ···· ··· ·····-· ··· ···· ··A:Jôs· illf ;;;,-..its 'iltt ·if;.,),J:"i ·é;,~···················
wl/f.llf. ~ c•16rtu ....i't>rts Jtlf 60·
·············································r·········································································
.~.~~~~~~~ .~. 30. ~~ .~~(~!:~~!. .?_ .6Q;..................~ .~$.f.U.1.3t1f. Std .CM\ c•l#>tC8· ...................
~ "'flf6rts 311t 30.
Tente usar BETWEEN nas colunas de texto. Escreva uma consulta que irá SELECT (selecionar) os nomes dos drinks
que começam com a letra G até O.

Sf.Lf.C"r,6..,t,.-#16
................... Jr,;,k FilO~-{ Jr,;,l.:,..,..,16
................................. .....................................................................
wl/f.llf. c6,S(JIIlrt...6S """'ts Jt Jrt..,l.:s
............................................... ·~· · ·J~·'""'f~"'·N"'· G· t -q,·t- -/-,ulu· · · · · · · · ·· ......
, 6..,t 116 Jr,;,l.: ~f.rwUJJ •G'/1-Alb •o'· u tt-1-r•s t,./-rt tlu,
.. ·····"···'"········································ .. J ........... • ......•...........................................

Como você acha que serão os resultados desta consulta?

SELECT nome do drink FROM drink info WHERE


- -
calorias BETWEEN 60 ANO 30;

'ó~ c~t;uno.., prorurall(lo ,·alores que estão en1re 60 c 30. Não há valorc~ cnlre 60 e aO, porque 60 ,·em antes
qut· :~o llllllteriramcnte. O número menor deve sempre ficar primeiro para que o BETWEEN seja inteqJretaclo
elo .it'ito qul' e~pcra.

88 Capttulo 2
o comando SELECT

te,ois dos encontros, você está IN •••


~ck Greg, .\manda tem usado os contatos dele para encontrar rapazes. Ela já foi em ali,'llllS encontro~. e até já
Juma tabela "livro negro" com suas impressões sobre seus encontros.

, t1JU 'ua tabela de livro_ negro. Ela quer obter uma lista dos bons encontros, então ela dá a,·,tliaçõcs positi1·a~.

SELECT nome_par liv r o_neg r o


FROM livro_negro nome_par avaliacao

~ Alex inovador

= James
lan
chato
fabuloso
Boris oh-oh
= Melvin plebeu
Eri c patético
Anthony prazeroso

Sammy muito bom


Ivan deplorável
Vi c ridículo

t-clt· utilizar todos aqueles ORs, podemos simplificar com a p<uavra-chave IN. Use
Jllllllll conjunto dev;uores em parênteses. Quando o \'alo r na coluna for compatível
do' 1alore> do coqjunto, a linha ou coluna específica é exibida.

A-11 IISI.I' • p•l•vn.-ct.•vt.


SELECT nome_par
IIJJ t.l• ,tt~ u .5tsh""•
FROM livro_negro .5~{_ 311t. 1111\ Cll'!jll,;ll Jt.

~
VI.IDI'#!S t.S;: Vl,JD,
IBERE
avaliacao IN ( 'inovador 1
fabuloso ' 1 'prazeroso 1 1

'auito bom' ) ;

...ou você está NO T IN


'· \manda quer saber quem tem más a\'aliaçôes pa1~t qwmdo eles ligarem ela dizer
r-tJ la1ando o cabelo ou compromissada com alguém.

nwnU(IJ o nome daqueles que ela não avaliou de forma boa, iremos adicionar
1r.t<ha1c NOT na nossa declaração IN. NOT dá os resultados oposto~. qualquer
l.ldo não c-ompatível ao cOJüunto.

você está aqui .,.. 89


Us Cabeça SQL

SELECT nome_par f Es
FROM livro negro (/SCIJtl~ c pclcvrc-cl.cv~ Al().,.ZA} ~'·til
- •~ St ~ stu J }
WHERE ~ ...s ~• 'i'- 311~ ~s r~sllll-ctl~s ..,;~
!C.- tsl-c~ 11~ c~'!j~~~~ ti~ ~r~~s.
avaliacao NOT IN ( 'inovador' ,
'fabuloso' , 'prazeroso' , SELE
WHER
' mui to bom' ) ; e a

SELE
tJ s«11tl~~ /J()f" IIJ f 4 ~"" WHER
tJ!rftf' p~SSIJCS CIJ~ CV4/t'llj6'~s q eld
"f!5c.ffvcs.
P:Bat
f( v

,....----~ P~DER DO
.'{5(J CEREBRO
Por que às vezes você vai usar
NOT IN ao invés de IN?

Mais NOT
\ on pode u.,;tr o N '':'com BETWEEN t' .... lKE da mc~ma fonu.t que o IM com IN. O mais imporlantt· a
~l ll·mbrar é que NOT vai logo após WHERE no seu com;uulo. ,\ qui estão alt.,'111l~ e\l'mplos:

SELECT nome do drink FROM drink- info


- -
WHERE NOT carboidrato s BETWEEN 3 AND 5 ;

SELECT nome_par from lista_negra


~I/C17tl~ VtJC(' liSa
6 /JOf"ctJ~ A-IJb
WHERE NOT nome_par LIKE 'A%'

90 Cap1tulo 2
o comando SELECT

não e.xi~em •
Petguntas Idi9tas

f Esperei Você disse que NOT vai logo após WHERE, e quando P:Como ela funcionaria com NULL?
você utiliza NOT IN?
lt Do jeito que imagina que ele iria. Vai buscar todos os valores que
R: Esta euma exceção e mesmo movendo o NOT para depois do não são NULL em uma coluna, você podena utilizá-lo ass1m
:RE ele va IJnoonar Estes dois comandos lhe darão exatamente
resmJS restlltados
SELECT * FROM drinks faceis
WHERE NOT principal IS NULL ;
• • FROM drinks_faceis
NOT principal IN ('soda' , ' chá
Mas isto também funcionaria:

• FRO~ drinks face.s SELECT * FROM drinks faceis


pr nc1pal NOT IN ( ' s da', 'chá WHERE principal IS NOT NULL ;
');

P:E quanto ao ANO ou OR?


f Elalll'lcionaria com <> o"não igual" operador de comparação?
lt Se quisesse utilizá-lo em uma cláusula ANO ou OR, ela ina logo
RVocê podena. mas éuma negativa dupla. Faria muito mais sentido após a palavra, desta forma:
l"E".a5 utilizar oSinal de ~gual. Estas duas consultas exibem o mesmo
~ SELECT * FROM drinks faceis
WHERE NOT principal 'soda'
• FROM drinks - faceis AND NOT principal = ' chá gelado';
"RE NOT nome_do_drink <> ' Blackthorn ' ;

• FROM drinks_faceis
~e do drink = ' Blackthorn ';

você está aqut 91


Use a Cabeça SQL

Reescreva cada uma das cláusulas WHERE para que fiquem o mais simples possível. Você
pode utilizar AND, OR, NOT, BETWEEN, LIKE, IN, IS NULL, e os operadores de comparação
para lhe ajudar.
Use como referências as tabelas estudadas neste capitulo.

SELECT nome do drink from drinks faceis


WHERE NOT quantidadel < 1 . 50;

SELECT nome do drink FROM drink info


WHERE NOT gelo = 'S' ;

SELECT nome do drink FROM drink info


WHERE NOT calorias < 20;

SELECT nome do drink FROM drinks faceis


WHERE principal = 'néctar de pêssego'
OR principal = 'soda';

SELECT nome do drink FROM drink info


WHERE NOT calorias = O;

SELECT nome do drink FROM drink info


WHERE NOT carboidratos BETWEEN 3 ANO 5;

SELECT nome_par from livro_negro


WHERE NOT nome_par LIKE ' A%'
ANO NOT nome_par LIKE 'B%';

92 Capitulo 2
o comando SELECT

Reescreva cada uma das cláusulas WHERE para que fiquem o mais simples possível. Você
pode utilizar AND, OR, NOT, BETWEEN, LIKE, IN, IS NULL, e os operadores de comparação
para lhe ajudar.
Use como referências as tabelas estudadas neste capitulo.

SELECT nome do drink from drinks faceis


WHERE NOT quantidade! < 1. 50 ;
....~.l::~~~~ll-~t_t!_6__t!(',~~~.f('.~.~.t!('.~"'!~~..!.~~~~~............................................. .

....~~~~~.1P~~?'.~~~/. ?.~. (~??~ ............................................................. .


SELECT nome do drink FROM drink info
WHERE NOT gelo = 'S' ;
.... ~1:-;~~'.'.~~L".i!-~':.'i:t.~.f~f?.~. ~':.'"':'.~...!."'.'!.'?............................................. ..

.....~f!.~~.~J~~Il_.~.~':!.~ .............................................................................. .
SELECT nome do drink FROM drink info
WHERE NOT calorias < 20;
.. .~L:.í~".~!':'.~-t!~Jr.~"'!~ f~~ ~r.~"'!~-'~4_ ...............................................
wHíJtí c•ltJrt-.s >= 2t)·) .......................................................................
.................................... .
SELECT nome do drink FROM drinks faceis
WHERE principal = ' néctar de pêssego '
OR principal = 'soda' r·
1st
I ,... /_
Í f.cr. fj I • f'JCit 'lttl ~lf\IJS
..... ~..L. ..... '~( ~~..!!.'~•... 1<.0!1.~~!~·~ J.~~(~ '"':'';;;,::J:;;;::;;.~ ~:, s.hsl•f' •
..... ~~~~~f.':f~~!f.~~. ~~'!'_~~~.~':!.}!.~ l!~P. .~~~ ...............::.s:;.:;~~~~~!.~~. ~~.~ ~· fdtl• fr"VtSSt SCICil t/t
f. . • tlt ,';tJ fv,cllm•f''.,·
SELECT nome do drink FROM drink info ntc .,.,, J
WHERE NOT calorias = O;
... ~!-:_Í~~".~.~~-t!_ll__~r_~"'!~f.~11:.~('.~"'!~-1~6_~, .............. ~:s:.~,C·./y~IIUSS
• \ - . ,,.. _L
t'IT•IJ 'TTifltJS
c•1.4"''S

'tt~ltT,.V•s
01
_ I .

.. ~H.~-~~-':':.'?.:..~~~~~~~~?. P.;..........................................~.~fhU, 4/(! _.,.,;,.,.; ~ -~ll'IStll-n


1 (llfl · 1.. J
Stjtlf'. Ctllf\

SELECT nome do drink FROM drink info


WHERE NOT carboidratos BETWEEN 3 AND 5 ;
Sf.Lícr,ll"'t tltJ Jrr,~: Flt()J.A. tlrt,~: ,.,.,IJ
························-··-··························-··················································
..... :~!IJ~~- f ...~~~l~~~b.~. ~ 3 .................................................................. .
0/t
.... .,Ç~r,~~i!!r.~f~~- ?..Ç';............................................................................ .
SELECT nome_par from livro_negro
WHERE NOT nome_par LIKE ' A%'
AND NOT nome_par LIKE 'B%' ;
..... ~.?-:~~'!~~~1~t:.f(.'!~/':'!.':~-"#!j':~ ...................................................... .
H I \ , \

..... ~ .. ~~~. -~~-~~.~.~.':.~~~~~:..~~~~-f!... f!.':!~.~.~ ..................................... .


você esta aqw 11> 93
Use a Cabeç a SQL

Sua caixa de ferramenta SQL


Você já tem o capítulo 2 na palma da
mão e adicionou operadores na sua
caixa de ferramentas. Para uma lista
completa de dicas de ferramentas, veja o
Apêndice iii.

= <> < > <= >=

AND e OR
._ I~
c- f}/Jb ( ()Jt VOC( f",l( Cl>,.jt;,«r CI>"'J"S

Cl>,,llel~>"«lS ,.s SII«S ei:IISIII«S wl/f.ltf. Cl><l\


<1\«t'S ft'l!ei'S';_I>,

NOT
/Jor,.u..,.h &111! voct ~jlll! si!IIS rtst~lh.l•s
I! .~,1.• ~,u •s v«l~>rl!s "l"'s-1-•s.

Capitulo 2
o comando SELECT

Greg quer criar uma tabela de drinks que os bartenders possam consultar os ingredientes
em eventos rápidos. Usando o que aprendeu no capítulo 1, escreva os comandos em SQL e
crie a tabela desta página e em seguida, insira os dados mostrados.
A tabela é parte de um banco de dados chamado drinks. Ela contém a tabela drinks_faceis
com receitas para um número de bebidas que tem apenas dois ingredientes.
ãodos
Exercícios da
página5;].

Í ""'• ;<~• ,.~(,.. /1.( ~•r •'J""s c•r•chru (xf~.s


CREATE DATABASE drinks;

USE drinks; ~( hr tCI( c<~l<~c•r •'5""' "4 "'( 311( s9•


_ ~ ,<~ c•s<~ o 1 ,h
CREATE TABLE drinks_face i~ "'•tlil'~6 JCI( (SffSj• (Xt"sff S.
(nome_do_drink VARCHAR(16), principal VARCHAR(20), quantidade1
DEC(3,1), segundo VARCHAR(20), quantidade2 DEC(4,2), instrucoes
VARCHAR(250));

INSERT INTO drinks faceis

VALUES

( 'Blackthorn' , 'Água tônica' , 1 . 5, 'Suco de abacaxi' , 1, 'Mexa com gelo,


coloque em uma taça de coquetel com limão batido'), ( 'Blue moon', 'soda', 1.5 ,
'suco de mirtilo' , . 75, 'Mexa com gelo, coloque em uma taça de coquetel com
limão batido' ) , ( 'Oh My Gosh' , 'néctar de pêssego' , 1 , 'suco de abacaxi' , 1 ,
'Mexa com gelo, coloque em um copinho de licor' ) ,

('Lime Fizz' , 'Spri te' , 1. 5, 'suco de limão' , . 7 5, 'Mexa com gelo, coloque em
uma taça de coquetel' ) ,
( 'Kiss on the Lips' , 'suco de cereja' , 2, 'néctar de damasco' , 7, 'Sirva com
gelo e canudo' ) ,

('Hot Gold', 'néctar de pêssego', 3, 'suco de laranja', 6, 'coloque suco de


laranja quente numa caneca e adicione néctar de pêssego'),

('Lone Tree' , 'soda', 1.5, 'suco de cereja', . 75, 'Mexa com gelo, coloque em
uma taça de coquetel' ) ,
('Greyhound', 'soda', 1.5, 'suco de toranja', 5, 'Sirva com gelo, mexa bem') ,
('Indian Summer', 'suco de maçã', 2, 'chá quente', 6, 'adiciona o suco a uma
caneca e complete o resto com chá quente'),

1) ('Bull Frog',
'chá gelado' , 1.5, 'limonada', 5, 'Sirva can gelo e uma fatia de lima') ,
('Soda and it', 'soda', 2 , 'suco de uva', 1, 'misture em uma taça de coquetel ,
sem gelo');

DICA:
script que cria esta tabela pode ser baixada em nosso site : www.alt abooks.com . br

você está aqui • 95


--~-- ·~ I
3DELE1E e VfDATE

Uma mudança na sua vida fará * +


bem a você *

Você muda de opinião constantemente? Agora está tudo bem! Com os comandos que você
está prestes a conhecer- DELETE e UPDATE- você não mais precisará ficar preso a uma decisão que tomou
há seis meses atrás, quando inseriu dados dizendo que calça boca-de-sino logo estaria de volta à moda. Com
UPDATE, você pode mudar os dados, e DELETE permite eliminar os dados que não precisar mais. Mas não
estamos apenas lhe dando as ferramentas; neste capítulo, você aprenderá a ser mais seleto com seus novos
poderes e a evitar que suma com arquivos que realmente precise.

este é um novo capítulo 97


Use a Cabeça SQL

Palhaços são assustadores? Rastr


Suponha que qucremol> saber onde andam todos os palhaços de \qui está n
fc~ta~ na cidade de Dataville. Nós poderíamos cricu· uma tabela rom.hr). '\
palha co_in f o p<lra ra~ITeá-los. E poderíamos criar a coluna Cjlll' IÍH'llll

visto_ ultimo p<rra guardcu· onde eles foram vistos pela última vez. <Jlll' alterar

98 Capítulo 3
delete e update

eador de palhaços
110''-' tabda (que mcê pode cria1 1;1cilmente baixando o \Cript elo ~i te ''"'w.altahook~.
\n, podemo~ deixar a~ infom1açôe~ que não ~ahemos c preenchê-las clepoi~.
Toda \C/
linha. TL·rcmo~
mnm uma nova vi~ào de algum palhaço podcremo~ adicion;u· uma nova
c'ta tahda freqüent emente para m;mtê-la .
atuaJi/ada.

palh aco_ info


e ·.:.s·

Centro do Terceiro Idade F, cabelo vermelho , vestido verde, pés bolões, carrinho
Elsie
Cherry Hill enormes
Festa de Jock Green M, cabelo lo ranjo, terno azul, pés mímico
Pickles
enormes
Mercado de Bolos F, camiseta amarelo, calços largos e corneta, guardo-c huva
Snuggles
vermelho s
M, charuto, cabelo preto, chapéu violino
Mr. Hobo Circo BG
comprido
Centro do Terceiro Idade F, co belo rosa, flores gigantes, vestido grito r e danço r
Clorobelle
Belmont azul
Hospital Ooklond M, co belo azul, terno vermelho , nariz bolões
Scooter
enorme
Millstone F, terno loronjo, calços largos danço r
Zippo Shoppi
Autopeç s do Eorl F, todo rosa e brilhoso malabari smo, carrinho
Bobe
M, vestido comprido de bolinhos contar, dançar
Banzo
Sniffles Tr cy's M, terno verde e roxo, nariz pontudo

você esta aqui.- 99


Use a Cabeça SQL

Aponte seu lápis--------------------~------<


Os palhaços estão em movimento Ag(
Seu trabalho é escrever os comandos SQL para conseguir o relatório de ap
cada área na tabela palhaco_info. Perceba que nem todas as informações
mudaram para cada palhaço, então você terá que usar a tabela na página 99
como referência para conseguir as demais informações a serem adicionadas.

I I I /I I I I

. . _Ç .?/P.P.~. J. . ~~~fl!!i:IJ... !1-lt!.r.f.~~-J.. ~. ~!:~~- !~!:~.1j~ 1. ~-~'S~! .Jf:~!'!~~! J


I I
o o o ~~~jAI'.J t:twf.~. >; 00 o o o 00 o 00 o o 00 o o 00 o o o 00 o o o o o o o o o 00 o o o 00 o 00 o o o o • • • 00 o o 00 o o 0000 o 000000

o o 00!.'!.~~-:!.'!.~t?. !'.~.'~~~~..~~~o o 00 o o 00 o . 00 • • • o o 00 00 00 o 00 o o o .. o .. 00 o 0 0 . 00 00 00 . .. ...

S,IIJJIU Cjlll'. ts-f: Vtri-r;,JII


I! ... Y~~t1:~........ . . . . . oo • • • oo • • oo • • oo . . oo o

c•ljU I•I'JU ·~1/IS,


oo • • oo • • oo • • oo • • • oo • • oo • • oo • • oo . . . . . . . . . . . . . oo .

6."
_ljtr.~.·t!.~. '!_~.. • •. .1. ~- ~~'!':~~.t!~. ~~~r.~.~~J. ~~~~-~ot•rJ~~oo
I /1
... ~ .~'!.11JJ.~~~ .1 .
01
o

o o
'
o -~~~!~. J:.~~!:':'.~·~J~~t:l.~o--~~~-~~0 ~~; o o o o o o o o o o o o o o o o o o o o . o o •• o o . o o o o o o o o. o o o o o •• 00

8o,~~~ •vts-1-•J~~ 'to


P.I'JIIt ~tc*so,
I
~

S,llllts ViS~0 ""11 ~.,Jo tlll.


11 ,., c•rri,l.o

100 Capttulo 3
I - -- -
=

delete e update

Agora preencha da forma como a tabela palhaco_info se parece


apos você ter adicionado mais dados usando o comando INSERT.

. o ..,_. -'-:.:' -,: ' ---! '

Elsie Centro do Terceiro Idade F, cabelo vermelho, vestido verde, pés bolões, carrinho
Cherry Hill enormes
Pickles Festa de Jock Green M, cabelo laranja, temo azul, pés mímico
enormes
Snuggles Mercado de Bolo F, camiseta amarelo, calços largos e cometo, guardo-chuva
vermelhos
Mr. Hobo Circo BG M, charuto, cabelo preto, chapéu violino
comprido
Clorobelle Centro do Terceiro Idade F, cabelo rosa, flores gigantes, vestido gritar e dançar
Belmont azul
Scooter Hospital Ooklond M, cabelo azul, terno vermelho, nariz bolões
enorme
Zippo Shopping Millstone F, terno laranja, calços largos dançar

Babe Autopeças do Eorl F, todo rosa e brilhoso malabarismo, carrinho

Banzo M, vestido comprido de bolinhos cantor, dançar

Sniffles Trocy's M, terno verde e roxo, nariz pontudo

você está aqui 11> 101


......,.j
Use 'l Cabeça SQL

~Ap9meseu Jápís----------------------------------------~~------~
Solução
Os palhaços estão em movimento Ag
Seu trabalho é escrever os comandos SQL para conseguir o relatório de ap
cada área na tabela palhaco_info. Perceba que nem todas as informações
mudaram para cada palhaço, então você terá que usar a tabela na página 99
como referência para conseguir as demais informações a serem adicionadas.

....+:~~~(];~"(f?. ,.~~~~F.~..!!rl.~.................................................. ..
VI}L.uí.S
• • o • •, ••••••• ;·.' •••••••• o •••• o •••••••••• i ..'............. . .................. .. . ··;···
... ~- -~'i'l.~ .J .. ~~~ff.~"!J. -~~·~ts_f~'!.~ .J. -~.-!:'!:':.'!~-~·~-~'li.~ -~~!1~~-r.~~~~~ .l ..
' I
.... ~~~J~~~- ~~~~~~. ~;, ...................................................................

....+:~~~(];~!:.f?. P.~.'~~~~ _,.!?f.~ ................................................... .


S;,v,lts .,,,•• ts-1-: vts-1-t;,t/6
CCI]U lcr5u C~I/IS, ... .VA:~~................................................................................
' 1 1 $."
... ~- ..~.'!!1,1J,~t;!, .... -~~r:~.~~6. ~~- .. ~.'~..... 6. ~~~~~~- ~'!',~(',~/~~ ................. ..
I I '
.. ..~~!f~~!~.':!~~ -~S~~~.! -~~('.~~~'-~-.':~~---~~~.v.~. _.>~ · ·.... · · .. · .. · · .... · ......

...."!.':!.~~~.":!:~~(!,f.~.~~~~-~-~~~................... .. ............ ... ......... .. ..

. . ~~::. ;p~~~~. ;,);.~;~~·,;~.~~;~~~ ;~;;;.~~ ~~ ~~/(;~;/;~ ~


86;,~6 cvls-l-atl6 ,6
P.rfJIIt ~lc*so;,
· =~-
.... ~~~)~(':r Ç,l,~~r );. ........................................... ..................... ..

IAJS!/t.:riA.Jr() pcll.cco ,;,fo tlt escl.f•r as aspas


1161 ~
{ .. · .. ··.. ·.... · ·· .. ·.. ··.. · ·.. ··.... ~ ··.. · ·.. ··.. ··MI.o ~.f.&CI.t.f~ ··.. ··.. · -~~~jt · · ...... ·
~ s 11 alt~rts v{:tJt.C
S;,tlllts 1/ts.fo ..o,.fc,tl6 t"" .....VI}L.uí.S
, ........... i .. ~..........,. ..,. ..1................ st.11................................ 1 ... ~
IlM carrt,/.6
... <:_ :~.,~H~~-~-J.. 'f.~~j \.f. J.. k, ~('.'!.~~_ .~t.t:~~- t. r:~.~~J .'!~':~-~ P.~'!'hJ.~.., ...
I I
.... ~.'!b.':'.t!{J. -~~-'1.~ .C.~!:('/!?~.~-~; ............................................ ....... ..

F
...l:~~~(J;~'!'"_()_ P.~.'~~~~ _!'r'f_~....................................................
~./Ido Vts-1-6 p6r tft-1-t-..o ,. ...~~~~ ................................................................-...:. .:.... ~:... :. ·::.;.·
:. ";_ ' -t-_..;~
I H. I I I I
Fts-1-a tlt Írlc brCj ... ~- -~·... ~~~ J. F.~s.f~. ~~- ~':~~- ~':.lj. J.. k, -~~-~':.~:1:.~~.) -~~-~~!~.f.('_d-:~~ ......
I I I I
....C.~C?..t.l!. .C.~~('.'~~- J.. 'r/~('"!!~_)~ ...................................................... .

102 C 1p1tulo 3
~ .---

detete e update

Agora preencha da forma como a tabela palhaco_info se parece


após você ter adicionado mais dados usando o comando INSERT.

-· -
a.

Elsie Centro da Terceira Idade F, cabelo vermelho, vestido verde, pés balões, carrinho
Cherry Hill enormes
Pickles Festa de Jack Green M, cabelo laranja, terno azul, pés mfmica
enormes

1\ Snuggles

Mr. Hobo

Clorobelle
Mercado de Bola

Circo BG

Centro da Terceiro Idade


F. camiseta amarelo, calços largas e
vermelhas
M, charuto, cabelo preto, chapéu
comprido
F, cabelo rosa, flores gigantes, vestido
cometa, guarda-chuva

violino

gritar e dançar
Belmont azul
Scooter Hospital Ookland M, cabelo azul, terno vermelho, nariz balões
enorme
Zippo Shopping Millstone F. terno laranja, calças largas dançar
Babe Autopeças Eorl F, toda rosa e brilhosa malabarismo, carrinho
Banzo M, vestido comprido de bolinhos cantar, dançar

~ \ Sniffies

2.,,.
Tracy's

.SI.,,,,.,3 J-tms;.,t
M, terno verde e roxo, nariz pontudo

FJ hr,. l•r•'ti•J ulfu· l•rs•s


"'"f'l'
~~ 6e~t /}v;•ttfU li• !erl ~ ;•"'• r•s• f ~rill.•s• ...,.~•rts ....J urr~;,J..

$.,}. P•rr,vt li• btci<Solf 1-(J vts;•il• c. ..,rfli• lit ~.lt,J.•s Cllf;II'J Jlltfll'

~
M 2.,,. .S~t{{I(S tr•cjS .Lt.J Hr~t• vtrlit t r•~<•J "'~''} ,.,;vil• ...,;,,"'• t .. v .. urr,;,J..

.SI..,,.,3 J-tms;.,f ~ -1-fr,• l•r•'!j•.J ulfiS Jl'llflits "'"f'"J c1-rl-ar

~ 1-ttrc•J• J• ~•'•
J,u,lts ~ Cl ..lstfl 1..11'(/IJ UlfiS III'JIS I}IIIS c•r~•.J sv•rll•-cl.vv•

8...}. P•ravt li• bicl<s." 1-(J Vt~U. c•..,.riJ• lit ~.t.·,J.u "'"fii'J u-rhr

~ J,r{llu tr•cj's 1-t.J -1-fr,• vtrlif f r•~<•J ~tlrf} ,.,fv.t• ...-rl-a,Jo f., v.. urr•it/.•
I IA.r /1,;, Fuh lit !rtc br'j 1-t.J cl.1rv;•J cdtl• trtf•Jcl.lptv c• ..prilio Vfoh;,o

-
~ PODER DO
• CÉREBRO

Como você pode descobrir a localização atual de um palhaço?

L& voce esta aqui • 103


Use a Cabeça SQL

Como os nossos dados de palhaços são inseridos?


'\o"< h lO< ;Lirt<adOJ t·~ ck palh.t~·o~ tmball!iun de fomra volunt;ma .. h ntc~. de' ltcam a l'\JltTil <k nova\ infonnaçõe' pm unt
dua' 't·mana' ;mtt·~ de tlTdx:r nmo' cladm. A~ \CLC~ dua ... pc,,oa' divid e m a p ilha dt· tl'l,'l~U·o~ l' <h inserem ao mesmo
Tendo '"o l'lll llll'lllt'. '.uno' olhar toda.~ a.~ linha.' na no......a talx:la rdl-rl'llll' ao palhac;o l.tppo. Podemo\ mar o comando Sll cada P.
par.t ohrer "' tt·,po''"'· I ,,.,u n
l.11t mio
111.1rot . I
SELECT * FROM palhaco_info WHERE nome = ' Zippo' ; I~<>I!JIIt

'lllt: 111 11

lthd ~ J·

ul t ,me
Zippo Shopping Millstone F. terno loron jo, col~os largos dançar
Zippo Shopping Mills1one F. terno laranja, col~os largos dançar, cantor
Zippo Hospital Ooklond F, terno laranja, calços largos dançar, cantor
Zippo Trocy's F. terno laranja, calços largos dançar, contar
Zippo Mercado do Bolo F, terno laranja, calços largos dançar, malabarismo
Zippo Shopping Millstone F. terno laranja, col~os largos dançar, contar
Zippo Hospital Ooklond F. terno laranja, calços largos dançar, cantor

is-1-ts li6t:S "~J':SI-r6s si.,


\
f.s.fts t/6t's .;....,.(.., f.s.fcs ,;ffor..c{ks llcc..,
~lfcl-c..,~~ ,il4c.,s
si6 ,'tl(,.f,·cos. s~ r~ptf.;,tlo.

l lit ah,'ltllla lll<tlllll.t cll l;vn uma con,ulta em nos'o' dado' e obtt'l apl'WI\ m H'gt~lto' tlliti~ tt'l'ente\ da ,;,u;dit.a~·ào de 7jpp
\'on:· cothl'J..'lll' ditt't qwtllor a \Ua última localiaçào.

Claro, isso é fác il, é só Infelizmente não é possível dizer se o


olhar o últ imo registro. último registro é o mais atual. espe
'ó~ tc:mo~ mail> de uma pe,~oa in~crinclo dadm ao

o me\ mo tempo. E o\ ITJ.\lstro' podt·m te: r se mi-.turado.


t\lal> ainda que l'ssl' fosst' o pmhll'ma, você n ã o pode
confiar que as linhas d a t abela estejam em
ordem c r onoló gica.
liá di' CNh f:uort·-. inll'lllO\ no IMnco de dadu~
que p<xleriam ahn;u a m <il'lll t'lll qut· a' Imim~
'ilo arm.venada,. bto mdw 'l' o \l'll Sistema SQL
(RDB~I"i) indna "' roluna~ <~ol)ll' o que: fitlaremo-.
postcriorlltt'llll').

Y9cê nã9 p9de ga.tant:lt t ue a


últlma linha da tabela seja a lln~'
ma.ls tecente adl.c19nada à tabela.

104 Capitulo 3
delete update

lozo, nós temos um problema


111<1 11\1 t 'l JKKir contar como a uhinm linha Sl'Hdo o n:gi~tro tua i~ n·rcnlc, lemo~ um probkma. :'\foo.,o.,a tabela de palha~·os
10 tempo. lht.t de onde O\ palha<;<>.., t.'o.,t;u iam em t.·cno mmnt.·nto. Mas a razão principal da tabela é saber onde
~n I· c r ~Ma palhaço foi visto pela última vez.

ttKio. \'cxê notou aqul'lt·o., tl'~'ll m duplicados:1 :"\o, tcnHh dcm re~-,ri..,lro'> mmrr.mclo Ztppo no me, mo lulf<U",
l
mNna roi"'· Efc.., cx·upam t.•o.,paço c 'áo dc~acclcrar o.,cu ~mtl·ma \QL na medida em qm· o.,ua tahcla lic.t cada \C/
R •liO' tluplirados não deveriam existir nunca em uma tabela. Em pouco'< apttulm l''t;ucnuh t;thuulo
r ",,n,_ duplicado' o.,;io tlllll\ l romo C\ itá-(o., com um bom projeto de tabela. \o< t. H' I" n>mo niar tahda'
tuiuo n·gí,tr<h dupliradm. ~ l;to.,, 110 momento. \'antm nm conrt.·tttrar no que podemo' l;ttl t pata roll\tortar noo.,-.;t
, "'trnlc para que a'o.,int da C<lllll'lllta dados úteis.

não exl~em •
retgunt:as Id'i9tas

r ?«que não podemos presumir que os últimos registros são r Não há momentos quando queremos manter dados assim na
tabela? Faz sentido lNSERT (inserir) novos registros e manter
GSNJS recentes?
os antigos?
R: Aordem dos registros em uma tabela nao é garantida e em breve
mva modificando a ordem dos resultados conforme obtém. Não R.: Absolutamente. Use o nosso exemplo atual. A tabela como está
se Ç(XIe ter confiança absoluta que o último registro é realmente o agora, nao só nos informa o último lugar em que um palhaço fo1
:.oro regiStro inserido, bem como simples erros humanos poderiam avistado, mas também dá um histórico de seus movimentos. Essa
aordem da tabela. Suponhamos que inserimos dois comandos é uma informação útil em potencial. O problema é que nao temos
ISERT para omesmo palhaço. exceto façamos alguma observação nenhuma informação clara em cada reg1stro que nos diga quando o fato
rocar que um reg1stro venha antes do outro. depois que estes ocorreu. Se adicionarmos uma coluna com a data e a hora atual talvez,
óXIs es5verem em sua tabela. nao saberemos com certeza qual foi estaríamos aptos a rastrear os palhaços com grande exatidão
prrnero
Mas no momento prectsamos consegUir remover aqueles próxtmos
r~que sabemos sim a Ol'dem. Novamente, por que não
~sinplesmente usar o último mgistro?
reg1stros duplicados da nossa tabela para simplificar as co1sas
po.'

RVamos ampliar o exemplo. Temos rastreado o mesmo palhaço


r. Ok, então até o final do livro eu saberei como projetar tabelas
sem linhas duplicadas. O que acontece se o cara que trabalhou
!))!anos Talvez tenhamos assistentes que rastreiem e que também antes de mim, deixou uma tabela mal projetada?
:se:em suas proprias informações. Alguns dos palhaços têm centenas
de •;giS!tOS Quando usamos o SELECT, obtemos aquelas centenas R.: Tabelas mal projetadas são comuns no mundo real mas a ma1oria
;:stros pelas quais temos que nos arrastar até o último, que das pessoas que aprendem SOL descobre que tem que consertar a
~samente esperamos ser a ma1s recente. bagunça na SOL feita por outras pessoas.

Há uma porção de técnicas para limpar as linhas duplicadas. Algumas


das melhores envolvem JOIOS, um tópico a ser visto posteriormente
neste livro. Até o momento, você não tem todas as ferramentas que
precisa para consertar dados ruins, mas as terá no final.

l.

você está aqutt> 105


Use a Cabeça SQL

Eliminando um registro com DELETE


l';ucn: que lcrcmo' que dinunar (tambc..·m conhecido como "cldctar") algum. rq.,r:istro,. P:u11 que..· a tabela no~ ~eja rmm util,
ckwríamm ter l>Omcntc uma linha por palhaço. Enquanto l')lpn;uuo' por uma nova \isualvaçi"to de Zippo d1egar, uma qut
falo 1.ahen·mo\ que é amai~ n:n·ntc, nó~ podercmol> eliminar all-,'lllh dos registro~ ;mtigm ck Zippo que não nos ;úuda.
O mnmndo DELETE 0 Mlfl k·11 arncnta para dclctar linhas dc dado~ de :-.ua tabela. Ela utilit.a o nlcsmo tipo de chíusula qut
\\'I U.RE quc mel' já' iu .

.\qwc..•,tito as linhas pam Zippo n<muncnlc:

IlO:.- ·~'~mo <l! .~rt;nc~a .t: VJ.dad.,s

Zippo Shopping Millstone F, terno laranja, calças largas dançar


Zippo Shopping Millstone F, terno laranja, calças largas dançar, cantar
Zippo Hospital Oakland F, terno laranja, calças largas dançar, cantar
Zippo Tracy's F, terno laranja, calças largas dançar, cantar
Zippo Mercado da Bola F, terno laranja, calças largas dançar, malabarismo
Zippo Shopping Millstone F, temo laranja, calços largas dançar, cantar
Zippo Hospital Oakland F, temo laranja, calças largas dançar, cantar

~
Imãs de gelade!ta - c9mando DELE1E
Nós escrevemos um comando simples que poderiamos utilizar
para eliminar um dos registros de Zippo, mas todos os ímãs caíram
da geladeira. Junte novamente os fragmentos e anote o que acha
que cada parte do comando faz.

WHERE [ DELE TE
J
[ palhaco_info J I
,;":!
atividades

cantar

r
lts cspcsJ vfr,lllcs t 4ptrcli6rts { Zippo
:J
tlt iJvcltlclit t p6,./-6-t-vfr,111•s
trc~ pt311t'I6S' tlt~cts pcrc
~trt~ rtc6ll.ti16s 116 ct.ê6• h!JIIt
• v6,./-•Jt pcrc ctltct6,cr -l-c,.,-6s
3vc,./-6s 16rt~ 'ltctss:rtos.

106 Capttulo 3
detete e update

Nós escrevemos um comando simples que pode1í;unos utili/..ar p;u-a eliminar um dm


dt: registros de Zippo, mas todos os ímãs caíram da geladeira. .Junte noY<lilll'lltc os fn.tl,'lncuto>.
e <mote o que acha que cada parte do comm1do faz.

\~'cê. F9deusar as clá.usulas WBERE c<?m


edarações DELETE da mesma t<?tma <tue
4l usou n9 c<?méUld<? iNSERi.

~un~o nossa nova instrução DELETE DELETE FROM palhaco_info


uw o comando que acabamos de crim·. lsto faz realmente o que
1111e ele faria. Todos o~ registTos que se ;Uu~t<Ull a uma condi~·ào da WHERE
aWHERE 'erào deletados ck sua tabela. atividades - 'dançar' ;

visto ultimo aparencia a··.::L-:ie-

Eisie Centro do Terceiro Idade Cherry F, cabelo vermelho, vestido verde, pés bolões, carrinho
Hill enormes
PieIdes Festa de Jock Green M, cabelo laranja, terno azul, pés enormes mimico
Snuggles Mercado do Bolo F, camiseta amarelo, calços largos e corneta, guardo-chuva
vermelhos
iN. Hobo Circo BG M, charuto, cabelo preto, chapéu comprido violino
Clorobelle Centro do Terceiro Idade Belmont F. cabelo rosa, flores gigantes, vestido azul gritar e dançar
Scooter Hospital Ooklond M, cabelo azul, temo vermelho, nariz enorme bolões
Z1ppo Shopping Millstone F, terno laranja, calços largas dançar
Bobe Autopeças do Eorl F. todo rosa e brilhoso malabarismo, carrinho
Bonzo M, vestido comprido de bolinhos contar, dançar
Sniffles Tracy's M, terno verde e roxo, nariz pontudo
Zippo Shopping Millstone F, terno laranja, calços largas dançar e contar

Snuggles Mercado da Bolo F, camiseta amarela, calças largos e azuis corneta, guardo-chuva
Bonzo Porque do Dickson M, vestido comprido de bolinhos contar, dançar

Sniffles Tracy's M, terno verde e roxo, nariz pontudo montando em um carrinho


Mr. Hobo Festa de Eric Gray M, charuto, cabelo preto, chapéu comprido violino

você está aqui • 107


Use a Cabeça SQL

•~ P~DERDO
-{5êf CEREBRO
Você acredita que pode deletar uma única coluna de uma linha usando DELETE?

Regras do DELETE
• Você não pode usar DELE TE para deletar o valor de uma coluna
simples ou uma porção de colunas. DELETE

• Você pode usar DELE TE para deletar linhas simples ou linhas


múltiplas dependendo da cláusula WHERE. WHERE

• Você já viu como apagar uma linha da tabela. Podemos também


WBERE
apagar múltiplas linhas de uma tabela. Para isto, utilizamos uma
cláusula WHERE para dizer ao DELE TE quais as linhas escolhidas.
Esta cláusula WHERE é exatamente a mesma utilizada no capítulo 2
com seus comandos SELECT. Ele pode usar todas as ferramentas
que você utilizou no capítulo 2, tais como LI KE, IN, BETWEEN e
WHERE
todas as condicionais para dizer precisamente ao seu Sistema SQL,
com exatidão, quais linhas serão apagadas.
WBERE
• E preste bastante atenção nisso: você pode deletar todas as linhas de
uma tabela da seguinte forma: DELE TE FROM sua tabela.

não ex1stem •
Pet·huntas IJiota.s ----... .,

f: Existe diferença em utilizar o WHERE com um comando DELETE


versus WHERE com SELECT?

~: Nenhuma diferença. O WHERE sempre será o mesmo, mas a


diferença entre o que o DELETE e o SELECT fazem é significativa.
SELECT retoma uma cópia das colunas das linhas que se ajustam a uma
condlçao, mas não altera a sua tabela. DELETE remove qualquer linha
que se ajusta à condição WHERE. Ele remove a linha inteira da tabela.

108 Capitulo 3
detete e update

Seja 9 DELETE nas clâusulas WBEKE


Sinta-se corno urna Jeclata'(ã<>
DELE'ffi com clâusulét.i WBER.E,
:~eja t.c1.ITlbérn ANo e- OR., pa~·a
JetetminaJ· <>u nã<> alj;umas Ja,
linha,.

Risque a linha, ou
&ETE FROM notas_do nu ts linhas, que cada
consulta deletou:

lERE empresa = ' Krispy King' AND nota <> 6 ;

lERE empresa = ' Krispy King' AND nota = 3;

IIIERE empresa = ' Snappy Bagel ' AND nota >= 6;

I!IERE empresa = ' Krispy King ' OR nota > 5 ;

IIIERE empresa = ' Krispy King ' OR nota = 3;

II!ERE empresa = ' Snappy Bagel ' OR nota = 6;

notas donuts
mptes a Hora rio da t a t i po nota corr.en tar.os
Krispy King 8:50 27/09 cobertura simples 10 quase perfeito
Duncan's Donuts 8:59 25/08 NU LL 6 gorduroso
Storbuzz Coffee 19:35 24/05 bolo de canela 5 Nã o são fresquinhos,
mas são gostosos
Duncon' s Donuts 19:03 26/04 geléia 7 Sem geléia suficiente

você está aqui.,. 109


Use a Cabeça SQL

Seja 9 DELETE nas cláusulas WBEitE Os doi


Jl.\ olJ II.'lla' 111

SiTttq-se ~.:omo umot deci<U·f.\t;ão J 'IIIC IJIICI CI

OELE'ffi c•'m cláusulas \vi-fERE. nfmmc "li'' 1


1111 uo\o n .-:_·
->ej<\ t<\ml~m A.~o e ORs pa11t
determinar ou não nl~uOH\S Jns
linhl\!'1.

Risque a linha, ou
DELETE FROM notas donuts linhas, que cada
consulta deletou:

WHERE empresa = ' Krispy King ' AND nota <> 6;


o
WHERE empresa = ' Krispy King' ANO nota = 3; .5e~t~ rtsuli•tl4J
tlt/ff411.
,.4
WHERE empresa = ' Snappy Bagel' ANO nota >= 6 ; .5e~t~ rtsut+•t14J ,.-4
tltlff411.
rosa
WHERE empresa = 'Krispy King' OR nota > 5 ; ~~~~

WHERE empresa = ' Krispy King' OR nota = 3 ;

WHERE empresa = ' Snappy Bagel' OR nota = 6; .5e~t~ ruuthtl4J ,.,4


Jt/ff4tl,

notas donuts

I r; •· .;a ' { 1..:> da .. 1 tipo no·d

Krispy King 8:50 27/09 cobertura simples 10


Duncan's Donuts 8:59 25/08 NULL 6 gorduroso

Storbuzz Coffee 19:35 24/05 bolo de conelo 5 Não são fresquinhos


mos são gostosos

Duncan s Donuts 19:03 26/04 geléia 7 Sem geléia suficiente

110 Cap1tulo 3
delete e update

~ois passos do INSERT e DELETE


,, tun registro ~obre Cla.rabelle na tabela inteira.
rtmo~ apenas um palhaço por linha que nos /}p('74S 4 •hvltl4tl( t/(14 u+~
~UJinfOJmação mais recente, nós prccis;unos criar
tlt"/(r(,-1-e t/4 31/( '74 ,,.,~,. •+v41.
rq,tro e apa~,'<lr o velho.
Al4SS4 -l-rd~t/1.4 (rlt 4tllciiJ'J4r 4S tlcli4S 'f(s-1-4

-1-d(/4, Al:s (s+•..,4s .._4s+r•'1J4 4p('f4S v ....


lt;,l.lt J4 -1-d(/4 'flt ,.:.,,.,.; 07 p•r• '7C4 4t:llpltr
h,-1-4 (Sflt)4•

./
'1ume visto ultimo aparencia atividades
Clorobelle Centro do Terceiro F, cabelo rosa, flores gigantes, vestido gritar e dançar
Idade Belmont azul

OPrimeiro, use o INSERT paTa adicionar a nova informaç'ào (c as informações antigas t;unbém).
IAJ.siJt.1'"(,;,st"r4) r(5ts.fr4 IIS4'1tl4 J-4t/4S
4
mSERT INTO palhacos_ info / 4S tl4ti4S 4rt5t.,4t"s 4p('f4S •lffr4""
44

VALUES / t: 4111, 4 1/( pr(ct".ur 41ffr4r.


3

('Clarabelle', 'Centro da Terceira Idade Belmont', 'F, cabelo


rosa, flores gigantes, vestido azul' , 'dançar' ) ;
n;>me visto ultimo aparencia atividades
Clorobelle Centro do Terceiro F, cabelo rosa, flores gigantes, vestido gritar e dançar
Idade Belmont azul
__.
liSERT
Clorobelle Centro do Terceiro F, cabelo rosa, flores gigantes, vestido dançar
Idade Belmont azul

O Então, DELE TE o registro antigo usando uma cláusula WHERE.


DELETE FROM palhaco info
- ~
WHERE
atividades - ' gritar'
AND nome = 'Clarabelle' ;
.\.gor.t nós temos na tabela apenas o registro novo.

o•~ visto ultimo aparenc.La atlvidades


Clorobelle Centro do Terceiro F, cabelo rosa, flores gigantes, vestido donçor
Idade Belmont azul

você está aqui 11> 111


Use a Cabeça SQL

Use INSERT e DELETE para mudar a tabela drink_info como


pedido. Então, desenhe a tabela alterada ao lado.

drink info
;r . l\k p •rt oidx:at o~ <: q. 1 .... a!;Jr las
" ""'
Blackthom 3 8.4 amarelo s 33
Blue Moon 2.5 3.2 azul s 12
OhMyGosh 3.5 8.6 laranja s 35
l ime Fizz 2.5 5.4 verde s 24
Kiss on the Lips 5.5 42.5 roxo s 171
Hot Gold 3.2 32 .1 laranja N 135
lone Tree 3.6 4.2 vermelho s 17
Greyhound 4 14 amarelo s 50
lndian Summer 2.8 7.2 marrom N 30
Buli Frog 2.6 21.5 cor de s 80
cone lo
Soda and lt 3.8 4.7 vermelho N 19

Mude as caloria s de Kiss on the lips para 1 70.

Mude o s valores do amarelo para dourado.

112 Cap1tulo 3
delete e update

174~t_114_tlrl.,,J: prtc4 ccr~4tilrc.f4s c4r ,t/4 cc14rics

81ccl:.fi.4M

81/lt ~441'1

OI.~ b4sl.

Ll,.th·~~

klss 011 .ft.t Lips

lf4.f b4/tl

LMt frtt

brt~l.4111'11l

r,,,.., .511~1t1&tr
81111 Fr45

S4tiC Cllll I.f

Faça com que todos os drinks que custam $2.50 custarem $3.50, e faça
com que todos os drinks que custam $ 3.50 passem a custar$ 4.50.

você está aqui_.. 113


Use a Cabeça SQL

. A~9m~seu Iá~is----------------------------------------~~----~
S9luc;ão Use INSERT e DELETE para mudar a tabela drink_info como
pedido. Então, desenhe a tabela alterada ao lado.

drink info
m• do d •. nk P' o .uboidrat~:~s C• r ge~o calor1as
Blockthom 3 8.4 amarelo s 33
Blue Moon 2.5 3.2 azul s 12
Oh MyGosh 3.5 8.6 laranja s 35
lime Fizz 2.5 5.4 verde s 24
Kiss on lhe lips 5.5 42 .5 roxo s 171
Hot Gold 3.2 32.1 lo ranjo N 135
lone Tree 3.6 4.2 vermelho s 17
Greyhound 4 14 amarelo s 50
lndion Summer 2.8 7.2 marrom N 30
Buli Frog 2.6 21.5 cor de s 80
canela
Soda and lt 3.8 4.7 vermelho N 19

Mude as calorias de Kiss on the Lips para 170.

Mude os valores do amarelo para dourado.

I I \ \ I I
(. 6.~·?·~~-~':'.t! ~ 4., .14~ ..~~{((':~~~- ~ . ~ ~ 5.0);.............................. ....................................... .
1
/)U..J:rf.
.......... FJt.tJM.
········ Jrt,~ - ,itfo
............ w#f.Jt.f. cor=............
······················· '•.,.•r(lo .)• ........................................... ............. .

114 Cap1tufo 3
delete e update

ltOiflt_ Jo _Jr,;,l: fl'tfO ccrloiJr.-1-os C61' 5tlo cc16rt-..s

61•cl:-/-1.61'1t 3 8.t./ J4111'CJ6 s 33

6111t ~66, 2S 3.2 ·~111


s 12

OJ. ~, b6SJ. 3S 84 lcrc'!j• s 3S"

Lr._tf;·~~ 3S s-.t./ Vti'Jt s 2t./


k rss o, -1-i.t Ups S"S t./zs 1'61C6 s lltJ

#o.f6oiJ 3.2 321 ,.,..'!j. Ai 13S"

Lo~tt trtt 3.( t./.2 Vtl'lf!tll.6 s 11

bl'tji.OII,J t./ lt./ J4III'.J6 s S"tJ

r,,,., s lllf!lf!tl' 2.8 7.2 lf!CI'I'61f! Ai 3tJ

61111 fi.o5 2( 2/.S" c61' Jt cci'Jtl• s 80


So.t• .,, I.f 3.8 t./.7 Vtl'lf!tll.6 Ai 19

t: ~ / ~ l"'
'ST"· -..1 I
,.0 t 11""141 pt,.J,.,t.c) oiO\CS t 11""141 JlltST'CO tlfl
Jllt voct prtcisc pt~tscr Jcs.f.,.h. St .froc•r
os Jr,.,l:s Jt i2.s-Op41' i J.s-Ot os Jt
i J.s-o,.,.. i '-!.s-o) voct .ft,.: .lllf!t,.f•J6
Esta é mais uma de suas pegadinhas? 4 v•lor J4 6111( ~661t (~f! Jols J;l•rts. A-ot"11/ts
() JtssoJprtcls•r: •1-hr•r os v•lorts lfiClS cl.fos
o fl'flf!tlro <JJSOp•r• HS 0')J t s: t,./-:;6 4

8111( ~061t Jt i2.s-o,.,.. i J.s-o.


Faça com que todos os drinks que custam $2.50 custarem $3.50, e faça )
com que todos os drinks que custam $ 3.50 passem a custar S 4.50.

...!:~~~.r:!:~:f?. -~~~"!~-'~"-.~~?-.'!!:~...('P~ -~ .~~.~~1'-1.:~.R:~.). ..'~.t:~'!j~. .). . ~.). J.~j


j ....
I 111

.. JJ(.,J"r.~.F.~~ .t!t:t'J~J~rf.~Ydf.~~.t;~$.f..':'.JS.; ............................... .............. .


(' 16 I 3 3 I , I ,
...!:'!.~í~.r'!:'!."Cf?..~r.'!!~../'!~~.~~~~~...... ~~~~~~~- J. ... :~ ... :.?-:).. ~.~~'..l ..~ J. !~))....
I , I I I I I I
.. -~. ~:~~ .~)}. ~- !.:& .~:!. ~.. ~~:.~~ -~ ..~ ?.-7J .................................................. .
I I

,J•.

}~~~:..~E':~~-~~~~-~~./~~~. ~~~Jt._r. !.~~~~-~ .?::f;............................... .. ......... .


Pontos extras se você colocou os dois comandos INSERT em um só!

você está aqui to 115


"'"
Use a Cabeça SQL

Cuidado com o seu DELETE


Cad;• \l'/ que apa~ç,u· o~ rt'l.,'l\lr<>,, 'oct nHTl' o ri'co dt·
anckntahut.·ntc apagar rcJ.,ri,tro' qut.• ni'to tinha a intt:nçào de Vse 9 DELETE cu'idad9samerr
apa~;u. l 'i.' como exemplo 't' tiw''t.'lllO~ qut.• adicionar um
IHI\'O n·l{i,lro para \1r. I loho: Cett'i~i<rpe-se ~_ue 'inclu'iu a i
~~· cláusula W1ffif{E c9m pted~
f
1t311,. (s+• • ,;,~4r""'•su
N

311t prtcls•11'14S •Ji'ct'4~•rJ


r ~r. l/6§4 vis/o ~• tr•c;s. pcu·a mitcu· a~ linhas exata.'S ~U'!
tealmente <iUel' apqgcu·.
( o IIJS11t.rp•r• l•~~lo.
DELE
LINSERT INTO palhaco info IJ'io st ts!ll(j• ti• ••rr• ,;,v(r/fJ•
~ ,. lrt,.h J4 •p:s+r4lo
VALUES WHEI1
' Tracy\' s ' , ' M, charuto ,
( ' Mr. Hobo ' ,
cabelo preto , chapéu comprido ', 'violino ' ) ,.
WHEI
! 3p.:; ·' , ·+

Eis ie Centro do Terceiro Idade F. cabelo vermelho, vestido verde, pes bolões, corrin.'lll
WHEI
ChE!rry Hill enormes
Pickles Festa de Jock Green M, cabelo laranja, terno azul, pes mímico
enormes
Snuggles Mercado do Bolo F, camiseta amarelo, calços largos e corneta, guordo·dl
WHE~
vermelhos
ANO
Mr. Hobo Circo BG M, charuto, cabelo preto, chapéu violino
comprido
Clorobelle Centro do Terceiro Idade F, cabelo rosa, flores gigantes, vestido gritare do~
Belmont azul WHEl
I
Scooter Hospital Ooklond M, cabelo azul, temo vermelho, nariz bolões vis
enorme
Zippo Shopping Millstone F, terno laranja, calços largos dançar, cantor

Babe Autopeças do Eorl F. todo rosa e brilhoso malabarismo, WHEI


Banzo M, vestido comprido de bolinhos cantor, donçor ·~- 'HOS]

Sniffles Trocy's M, terno verde e roxo, nariz pontudo


Zippo $~.- ... ,.. ...,. Millstone 1ronjo, calços largos cantor
'•
Snuggles Mercado do Bolo F, camiseta amarelo, calços largos e corneta, guardo~ ! J.'v;l'l
vermelhos t"J'''
Banzo Porque do Dickson M, ~-· .,.., ,_.., de bolinhos cantor, dançar t••..:nr
Sniffles Trocy's M, terno verde e roxo, nariz pontudo montando em
Mr. Hobo Festa de Eric Groy M, charuto, cabelo preto, chapéu violino
DELETADO ~- ..... ·--
.... violino
..... Mr. Hobo Trocy's M, charuto, cabelo preto, chopeu
comprido

Ab-9ta seja ..f9cê 9 DELB7E

116 Cap1tulo 3

-
delete update

SEJA Q DELE1B
Abaixo . .Jocê .JaJ encontt-m· uma 'ié1·íe Je cláu-;ula,; \vHER.E
I!Jleute. para um c6d'igo DELBTC p1-<1etnJo pn11l limp<ll·
:t a tabela p<Uhaco inÇo Jn pátlnn antet'iol.
im~lne ~ua'i:~ cl>dit,:o,; n<>-; (\juJam e ~uaJi
Cl"Íé\01 no.,los prol~lelllé\i.

; 'LUe

OELETE FROM palhaco_info

IIHERE visto ultimo = ' Hospital Oakland' ;

IIHERE atividades = ' violino ' ;


ll

•rrinho
IIHERE visto_ ultimo = ' Parque do Dickson '
:a AND nome = ' Mr . Hobo ' i

da-chuva
~visto ultimo = ' Hospital Oakland'

o
AND visto ultimo = 'Parque do Dickson' i

mçar

WHERE visto_ultimo = 'Hospital Oakland' OR ·· ·········································································


s
visto ultimo = ' Parque do Dickson' i

mtar
~~carrinho liHERE nome = ' Mr . Hobo' OR visto ultimo =
nçar Hospltal Oakland' ;

i
t -chuva \: 'll! e~'n um único comnnJo DELETE ~ue limpe
····· ······················· ········· ······································
, e>, dnd••, e;xt11b Joo; tet'i~to-; de J\'Ú·. Hobo ieOl
jlçor , elll nenhum Jo~ outl-os.
carrinho

voce esta aqui • 117


Use a Cabeça SQL

Abaixo. você vai enc<>nu-a.t uma séri~ de cláusula!'l WUEI\E


pm-a um eMito DELETE projetad<> pm-a limpm·
a t<tbela pa.lhaco_in~o na p4l:ina ante\"iot-.
im~1ne ~~laJ:i c6dit;o:; nos é\}udam e <f~ais
criam nov<>s pt·ob]ema!i-

DELETE FROM palhaco_info

v:' .5coo-hr ; ....~:... -h... tllt\ rtJt"sl-ro 3"t st ijval• • u-h.


WHERE visto_ult~o = 'Hospital Oakland' i .....P.~~~~ -~~':'.~~ _~(.":: .':~,~~.-!:.':~ -~-~.~:H~~~: ........ ..
t;.._~:... lltldc rt.t..,"s-1-ro
• • • • • • • • • • • • • • • •
t/11 Sc11o-hr •
.............. .... .............. .... .....
o •• o •••••••

v:' Al';o 3vtrtlt\oS -,.,•r o rtJt"sl-ro .,ovo.


WHERE atividades = 'violino' i ..-.. -~~~ti~ -~~~~~.~.S..~~$.'~-!~~~.~~.~:.:.~~~~-~- ........
,;,c/vstvt os #IIIV6S,
............................ .........................................
WHERE visto_ult~o = 'Parque do Dickson'
= ...... __ l!F:.~~~ .4f.~'!~~ -~~- ~~-~- .................................
AND nome 'Mr. Hobo ';
v:'() /}Al/) sij.,,"fi'c• 3vt 41t\~os llltvtlt\ Str Vtrlll•lltlrtJs, . . . . .~.~~~~~-.~-~S..~~,~~---· -·-·- . . . . . . . . . . . . . .
WHERE visto ult~o = 'Hospital Oakland'
AJ';11 Jtldc 171llill,
.........................................................................
AND visto ult~o = 'Parque do Dickson' ;

WHERE visto_ult~o = 'Hospital Oakland' OR .....P.~!~~-~.S..':t!'~f.:_~~-J_~-~~':'.1~-~-~~-~?.~':J.~'!f.~...


visto ult~o = 'Parque do Dickson'; ..... ~~~-~~.':.t.3.'~f.':~~-~~i.~.~.t!.~.~'::.~~~~...............

..-~~~~~ .f.~~'!.~.S.. ?.S.. ~~3.~"s.-!:".?~. '!.~.~r... ~~-~~J. ~"'!.~~~~~-~~·


WHERE nome = 'Mr. Hobo' OR visto ultimo = ...':.t.3~~f.':.~-~~~~. ~-'!.~!~~.o_".~!/!-!:".~.~~--~~?.~~".: .....
'Hospital Oakland';

AcQt·a escl'eva um único comando DELETE ~!'e .... -.-- }Y-:.~ :..~ .f.J!:~J:t1 f.~~~~~o -~""f'!
1
........ -.--... '......
limpe toJos o~ Jados extl'a.-> Jo:~ re(lsu·o:~ Je Ml'. w#f.Jtí #llllt\t .. .(-{r. #dll
. ........................................ i .......\···;·.,............. ..
I-tolw sem toem.- em nenhum do:; outros. lfA.J/) Vt"sl-11 vlh--..o <> 1r•ct. s •
............ -............ .-:.......... -· .........f..... .. J . ...............

118 Cap1tulo 3
delete e update

Correto! A não ser que esteja absolutamente certo de que sua


cláusula WHERE deletará as línhas que desejar, você deveria
utilizar o SELECT primeiro para ter certeza.
Já que ambos podem utilizar a~ mesma~ cláusulas WHERE, a.\ linhas que o comando
SELECT exibe vão atingir nas linhas que você delet;u·á, ~e u~ar e~ta mesma cl;iu~ula WHERE.
É um método seguro de ter certeza que não está apagando nada acidcntalmcmc c irá <\iudá-
lo a ter certeza de que está ak;mçando todo~ o;, dados que de~eja deletar.

~,roMema com DELETE impreciso


Er .mlilo~o. Se não tomar cuidado, os dados errados serão o alvo.
Altere apenas 9S teg1stt9S
!OOtmo> e1it;u· mirar os dado5 errados se adiciou;m11o5 mais um pas~o
l(lpruJ;rama de dois pa,sos INSERT - DELETE.
'J_,ue deseJa usand9 9 c9mand9
, llllll pro!,'l<Una de TRÊS P. \ SSOS que você pode seguir: SELE C! Et1mell-9.

O Primeiro, SELECT (~elecionc) os regisu·os que ~abe que :-.erào removidm para
ronlinnar que irá deletar apenas os rq~isu·os p l;mcjado:, c nenhum registro que não
deve ser apagado.
SELECT FROM palhaco_info
WHERE
atividades - 'dançar' ;

O Próximo, INSERT (insira) o novo re1,ristro


IIJ.5f.Jt.r(1;,str•) 4 rt.5'-s.fr4
INSERT INTO palhaco info / vs•,t/4 .f4tl4s 4S J•tl4s 4 ,.,.,,-,.,-s
- ,.L' .,t.'I.S l.iffN.'It/4 I. C41V'I• &Vt.
VALUES prt.ct'"SI. •1-ft.r•r.
('Zippo', 'Shopping Millstone', 'F, terno
laranja, calças largas', 'dançar, cantar') ;

você está aqui~ 119


Use a Cabeça SQL

(JUI C~lc
Finalmente, DELETE o 1q.,>i!:>tro ;ullil{o com a nH:~ma d<tu~ula WHERE que \OCê '"ou
nun o cmmmdo SELECT no rome~·o de~rc proJ.,'l<una ck IH.''- pa,~o,.

DELETE FROM palhaco_info


WHERE ~ - u;.,.,,)t • cl:vsvl• wlh.Jt.f. l"f! vl-,.,. ""
3
atividades - ' dançar ' ; p•r• Sf.Lf.C.í<stttct'""•r> " rtJ'"s-1-r"
""pus"/ p•r• •cl••r f! tlt/ff•r"
rf!Jt"s-/-r6 •,j-,j6 •

nome v sto ultlmo aparenc1a atlvldades


A pattvr.
depois d
Zippo Shopping Millstone F. terno laranja, calços largos dançar, contar
na llllssa

Shopping Millstone F. temo laranja, calços largos

Não seria um sonho se eu


pudesse alterar um registro em
apenas um passo sem me preocupar se
meu novo registro foi apagado junto
com o antigo, mas sei que isto é apenas
uma utopia.

Reg r

Altere seus dados com UPDATE (Atualizar)


•\t{· o n1onu:nto, você já dt·w l.'~lar ronfortán:lutilizando INSERT l' DELETE para manter !>Ua!> tabela~ alualit.adas. Nó~ ate
oiN.'IYaJIIO' alguma:. Iom"" de u';'t-la' junta:. para, indirctamcllll', modificar uma linha em patiicular.
l·.ntrct<ulto, ao imé~ de imc1ir uma no\'a linha c delctar a antiga, \ocê pode r<:ulilit.ar uma linha qul' .iá c\Lá na tabela, altt>·
rando .tJX'n<L'- <>' ,·aJorc~ da' l·oluna~ que quer alterar.
O romando SQL é chamado de UPDATE. c ele lu cxatmncnh.' o que de ~ignifica, atualit.ar. lJl· atualin uma coluna, ou
coluna,, p<mt nm·o-. nuort·~. L da tnl'~tna fonna que o SELECT l' o DELETE, \'OCê pode: attibuu uma dáu,uJa WHERE para
iudi<";u que: linha de,cja UPDATE (atualll~'tr).

120 Capitulo 3
detete e update

;mtá o com;mdo UPDATE em ação:

UPDATE notas donuts


SET
tipo - ' cobertura'
WHERE tipo = ' cobertura simples ';

\~tiTa<haYe SET diz ao Sistema SQL que ele precisa alter<u· a colw1a antes do sinal de igual para conter o valor
JX>!Ido~inal de igual. No caso acima, estamos alterando 'cobertura simples' para somente 'cobertura'
IUNíatabela. O WHERE diz para mudar somente linhas onde está digitado 'cobertura simples'.

notas donuts
empresa horario data tipo nota comentarios
Krispy King 8:50 27/09 cobertura simples 10 quose perfeito
Duncan's Donuts 8:59 25/08 NULL 6 gorduroso
Storbuzz Coffee 19:35 24/05 bolo de canela 5 Não são fresquinhos,
mos são gostosos
Duncan' s Donuts 19:03 26/04""\.. / geléia 7 Sem geléia suficiente

notas donuts

ie~ras do UPDATE
1 Você pode utilizar o UP DA TE para alterar uma única coluna ou uma porção delas.
Adicione mais pares da coluna= valor para a cláusula SETe ponha uma vírgula após
cada uma delas:

UPDATE sua tabela


SET primeira_coluna ' novo valor '
segunda_coluna = ' outro valor ';
a
1 Você pode utilizar o UPDATE para atualizar uma única linha ou múltiplas linhas
dependendo da sua cláusula WHERE.

você está aqui 1> 121


Use a Cabeça SQL

não e)(Í'Item •
f etguntas Idi9ta.'l
UPDA
l mio o ''
f O que acontece se eu não usar a cláusula WHERE? I{: S1m você pode Isto ma atualizar a mesma coluna da llllhl
Pa qm elo I)
do 1c
forma E ass1m está ótimo para nossa tabela de quatro lirt.Q
R: Então todos os valores constantes na cláusula SET serão alterados se tivesse usado esse comando em uma tabela com cerne.~
na sua tabela milhares de registros, você teria alterado o tipo em cada "'
contendo Knspy King.
f Há dois sinais de igual lá na query SQL. na página anterior que parecem
es1ar fazendo coisas diferentes. Está correto? f Ai ai ai! Como posso me certificar de que estou atua ar.
apenas o que preciso?
R.. Exatamente O sinal de igual na cláusula SET diz "defina esta
coluna igual a este valor', enquanto aquela na cláusula WHERE está R..: Da mesma forma que viu com DELETE, a não ser que
testando para ver se o valor da coluna é igual ao valor depois do sinal certeza que está direcionando para as linhas corretas oom sua
de igual. WHERE, faça um SELECT primeiro!.

f :Eu poderia ter utilizado esta instrução para fazer a mesma f :Pode-se ter mais que uma cláusula SET?
coisa feita lá em cima?
I"{: Não, mas não deverá precisar. Você pode colocar todasasat
UPDATE nota_donuts SET tipo eseus novos valores para elas na mesma cláusula SET, comorooS'
' cobertura ' WHERE empresa ' Kr ispy King '; anteriormente.

UPDATE é o novo INSERT-DELETE


Q u;uHio 'IKl' u'a o UPDATE. não está apagando nada. .\ o mn·, d,,,o, t•,ta reciclando o registro antigo em um

Co111tct colfl uf!)/}rf.... '\t ..[ ....,:s t,..-io.J o ~tolflt ti• 1-dtl• co~~ttlo o rt5 ,s-fro 3vt 3vtr vs•'
UPDATE nome
SET nome coluna novo valor
WHERE nome coluna = valor qualquer;
~
Aloss• co~tlt~Vtl cl:vsvl• w/fiJd. ts.f: •3vt' f'"'
~vtl•r • t/t'N!ct6"'" prtct''s•lllt~th 3v•l rt,t's.fro C9d1g9s lJPDATE
atltl'tllloS •lht;y"•
\ 'amo' Yê-lo l'lll a~·i1o romo um comando que
subst.Itu!t a c9mb1n
lumion;ua co111 a tahda palhaço_i n fo .

A-1-/-tn o v•lor
"' coltl~t• vlsl-6 palhaco info ~
vl-h'lflo ,.,,., t;•?s~ ~----., - Alio ts3vts•'-•
'Tracy\ f S f ,;,vtr·hl.•p•rH
sv• •spc.
Hobof
'Parque do Dicksoa
delete e update

~~~ATE em agão
ncomando llPDATE, a colwm visto_
sma do regi~tro do J\1r. I lobo é alterada de
Mas tio Diclu.on para Tracy's.
s ou
que

ndo

enha UPDATE palhaco_info


)Sula
SET visto ultimo= 'Tracy\'s'
WHERE nome = 'Mr . Hobo'
AND visto ultimo - 'Festa de Eric Gray' ;
pnas
trado

visto ult1mo aparencia


Elsie Centro do Terceiro Idade F, cabelo vermelho, vestido verde, pés bolões, carrinho
Cherry Hill enormes
Pickles Festa de Jock Green M, cabelo laranja, terno azul, pés mímico
n novo enormes
Snuggles Mercado do Bolo F, camiseta amarelo, calços largos e corneta, guardo-chuva
vermelhos
Circo BG M, charuto, cabelo preto, chapéu violino
comprido
Centro do Terceiro Idade F, cabelo rosa, flores gigantes, vestido gritar e dançar
Belmont azul
Hospital Ooklond M, cabelo azul, terno vermelho, nariz bolões
enorme
Shopping Millstone dançar, contar
Autopeças do Eorl malabarismo, carrinho
contar, dançar
corneta, g
contar, dançar
malabarismo, carrinho
violino

!f, 1mr 4 vPbA-·n.J v4ct ts-1-:


tJif.l.~t/4 ,-, 14c4J tlf.f-:;4 11C4 t.:
~111.11,.., ri'SC4 Jt Jtlf!"l.l.r Jl.l/4$

úr<4rrtf.,,..,t,.ft (f!"';4r4 sdrtscrtv1


JcJ,s t~ci'sft11/-ts).

você está aqui • 123


,...
Use a Cabeça SQL

l
r
Atualizando os movimentos dos palhaços n

I
Desta vez, vamos fazer direito. Preencha um comando UPDATE para cada
visualização. Nós já fizemos um para você iniciar. Dai, preencha a tabela
Pi
palhaco_info na forma como ela vai ficar depois de executarmos todos os
comandos UPDATE. Sn~

Mr.

......~f.P.I!.:.~ f.~.~~~~.t>.-'~tt>. ... .... ....... ... .... .... .... ..............................
I I
Cio

..... ~r:~:I:N!~4~e'- .•.. Ç!,IJ:br. ......... ..... ............ ... ................ .. ..... .. s~

......~ff.~~~.':'.~~~ ."..~~~f./; ........................................................


B
s
S,v,,lts _,,,•• ts+: Vt~;,Jt>

Cl.lfU ll.f',I.S l.}tlt"$


~11,
~~--------~----~
·~ ............ ................. ................... ....... .... ... ...................... ... .........
······················ ···················· ···················· ···· ······························

ti
8~>,~~> Vls-1-~> ,~> p,.,.fJtlt Ptc~l~
li~> ~~c~s~>,
,,,

s,rll lt s "'si-~> 11\0,.f.,tlo


til\ tJII\ carr r,l.o h

1
A-tr. Ht>~o Vt"S-1-t> pt/1. ,:,.;.,.....,.
Vt} "" lts-1-a Jt Íl'ii: br"j

124 Capitulo 3
I

delete e update

I
o visto ultimo aparencia a~iv idade"

Elsie Centro do Terceiro Idade F, cabelo vermelho, vestido verde, pés enormes bolões, carrinho
Cherry Hill
Pickles Festa de Jock Green M, cabelo laranja, temo azul, pés enormes mímico
Snuggles Mercado do Bolo F, camiseta amarelo, calços largos e vermelhos cometo, guardo-chuva
Mr. Hobo Circo BG M, charuto, cabelo preto, chapéu comprido violino
Clorobelle Centro do Terceiro Idade F, cabelo rosa, flores gigantes, vestido azul gritar e dançar
Belmont
Scooter Hospital Ooklond M, cabelo azul, terno vermelho, nariz enorme bolões
Zippo Shopping Millstone F, terno laranja, calços largos dançar
Babe Autopeças do Eorl F, todo rosa e brilhoso malabarismo, carrinho
Banzo M, vestido comprido de bolinhos cantor, dançar
Sniffles Trocy's M, terno verde e roxo, nariz pontudo

~ Vi's-/-tJ _111-/-r"'NJ cpcrt,ci'c c-h-vttJctJts

Ústt Ct,J.rtJ Jc1ircttrc ItJut ~ cdtltJ vtrllltll.tJJ vts-hiltJ vtrJtJp:s JciÕts; ccrr,;,l.tJ
~rr;H,'H t"tJI'IIItS

Fuh Jt JccJ: ~rtt" MJ cdtlt~ lere~~ +tr,tl 1.~11/J p:s t,tlf'lllts


I
Plt#ts llltllltCI.

slllljjlts

t.tr. H.,~.,
Ctcrcltllt C.t,frt~ tJc 1ircttrc ~ cdtlt~ rt~si.J llt~rts J''j""+tsJ vts-hilt~ 5 ,.,-;..,. t t~., .,.
5
ItJctJt 8tlllltJ,+ ·~111

Scooffr Ht~sptfct fJcJ:I~o,J MJ cdtlt~ 1.~11/J +tr,tl vtrllltll.t~J ,.,.,-~ i~oiÕts


t11tlf'lllt

2.1;,.,
.
. ... 6th /tllft~ptscs tlt~ icrt ~ ft~Jc rt~sc t Jrlll.t~sc IIII.II.Í4f'tSIIItJJ Cl.f'f't;,l.tl

. 6.,"5"
S~t~'lllts

voce esta aqui.,.. 125


Use a Cab eça SQL

.- Ap9nte seu 1âp1s


S9 luç-ã9 Atualizando os movimentos dos palhaços
Desta vez, vamos fazer direito. Preencha um comando UPDATE para cada
visualização. Nós já fizemos um para você iniciar. Daí, preencha a tabela
palhaco_info na forma como ela vai ficar depois de executarmos todos os
comandos UPDATE .

I ......~f.Pff.~~ '~-~~~~~-·~~ ............................................................


I I
..... ~-r.~:l:ttt!i!.4{i.~l. :~.. Ç_I,IJ.f.4r. .................. ............ . ....................... ..
/L
......wn:t~-~-e -~ ..2.tpp4. )· .................... ·i:J:;· ~r;, '&iiêrt.w.os- .tisp("~·~~
I I

.......................... . ........... . ....................... -.1-I'"«S' ,;,fbi"N5A(i. .J'!.~} t


I a Cu·-hlit.llt"st.&~l

L
oll
,.,. co 111'1 • o
I •
r---------~---=--~1'

..... -~f.P.f}.~~ ,.._,~~~-~...!~f~........... ..-~~~!~·-~~ -~~~·-~ ................. .


.5,1133/ts a3ora u;: vu-h;,Jo
..... S~ f:«~«r.&JC.t'A -~.~F; .c-.lf\t.tefA .CftiA('.((4J .c-.lf«S. ./Ar.5c.t.f.~l/1-/ ........... ..
calj«S larJU a~lliS
..... .'~H.~~t~;~.~~~ .":.~ ~IJ.I!j5((/; .................................................. ..
..................................................... ............................................
_-
......~f.Pff.~~ '~-'~~~-~..:~f.~ ........................................................... .
I I

8,.~,. '"s+" "" P.r3vt "" ..... ~!.vrd~._.,11.~-b~~.=:.. f.~,r.t;t.!~.l!~. P.ttrt:s.~IJ. .................................... ..
/Jrcks6 ., ......'.!IH.~~~-~-~~~~-·$.~~~~; .......................................................... ~
................ ....... .........................................................................

..... .~f.Pfft~ '~-'~·~~.;~f.~ .............................................................


I I

5,.,t/llts vts.fo ""0 ,-1-a,.,l.o t"" ..... ~~r~h'.~,.~-""-~~ .7.. ~~~-+,('_ -~~-t;~t:r.!"IJ.4~......................................
1111\ carrt,.,l.o ......wH.t~_(.IJ.O,.e .:t:. ~S,,'I.fJes.'; ......................................................
...... .............................. ............................................ ................

IJP!JA-rí f.4/I.Qco
·················· ,;,fo
........................................................................... ..
I I

~r. lido vts-1-o ptla ,;,;,.,... ..... ~"!.l!!~h_l!.~-b:"!'-.~ .":.. F..t.~h .t!.~.~r.(ç_/,r.' ........... .............. ........ ..
vt3 174 lts;a J( Írtc br«J ......wH.t~.t.M,.t..=!.~~../:&~.~>~j ......... ............................................
~--~~~~~~11
~ ...............................................................................................

126 Capítulo 3
I

delete e update

~ - visto - ultimo aparencia d. ' vidade"


Elsie Centro do Terceiro Idade F, cabelo vermelho, vestido verde, pés enormes bolões, carrinho
Cherry Hill
Pickles Festa de Jock Green M, cabelo laranja, terno azul, pés enormes mímico
Snuggles Mercado do Bolo F. camiseta amarelo, calços largos e vermelhos corneta, guardo-chuva
Mr. Hobo Circo BG M, charuto, cabelo preto, chapéu comprido violino
Clarobelle Centro do Terceiro Idade F. cabelo rosa, flores gigantes, vestido azul gritar e dançar
Belmont
Scooter Hospital Ooklond M, cabelo azul, terno vermelho, nariz enorme bolões

as Zippo Shopping Millstone F. terno laranja, calços largos danço r

f.fão Babe Autopeças do Eorl F. todo rosa e brilhoso malabarismo, carrinho


~ es-f~ Bonzo M, vestido comprido de bolinhos contar, dançar
Sniffles Trocy's M, terno verde e roxo, nariz pontudo

()16trfrlls l'tJt"sl-ros 17Cll lora"" a1-hrcti6S,


..........

,...~ Vt"s-/-6 111.ftw.o ) apcrt,ct"c ,..fr-vtil•tlts

Ílsi~ ~,,-r6 tia "fircti'ra Ztlctlt


-~ ~ cdt/6 vtr,..tll.oJ ves-hii6 vtrtltJ p:s Jcl4tsJ carr,;.,t.6
Ct.trrj H,w (,OI',..(S

AcMts Fui-c tlt Jack brtt, M.J cdtlll lar•'!j~ .ft,.,6 ·~11/J pts t,61'1f\tS ,..,,..!(:.
I

5111155/ts M.trcctlo tlc $o/a ~ ca,..,st-1-a clf\Crtl~ catscs lcr5•~ COI'IfffCJ j114rt/c-ci.IIVC

r. ~ )
tv.H6~ll Fui-c tlt Írlc b~'~']_ ,(..(J cl.cr11.f6J cdtlo prffllJ cl.cptll C6"'fl'tilll Vt611;.,6
- ii
Clcrcitllt Ce,-1-r" ti• t'ircttr• Ztl•tlt
St,,..6,-~-
~ cdtlll rlls•J l16rts 5,.-,.,,.ftsJ vts-hllll •3111
r-~-;;.) "·i3>
~
Seuhr Hospt-ht Oc#a,tl ,(..(J cdtlll •311/J .ftr,ll vtrlllltll.oJ ,crl3 t,lll'llllt Jct4u

litf6 St.llpp';.,J M_t!ls-/-6,t ~ .ft,.,6 lcr•'!j•J cclscs lcr5 cs cc,-1-cr


:
8dt lflll-6ptj«S t/6 Íarl ~ l-6tl4 rosc t Jrt11.6S4 1111CicJcriSif\6J ccrrt;.,l.6

8.~6 ~I'JII( ,;;b1ckS6,. ) M.J vu-hi/6 C6"'fl''ll6 tlt 16/,.,l.cs

?'-
ca,-1-arJ tla"1•r

~
~ v
S,rfllts

~
tra'js

ff
A t,cs as p•r s t c•
ti
M.J .ftr,6 r6xo t vertltJ lf«rl~ p6,-/-vt/6

tlc l'tjt"s-1-~ Jllt Sf.r(tlt/t;.,IW.oS) ,o uPb/}rf. /t>I'CIIII (


.f.
P,· l ,h rtt,cl.tlf\IJS 1-lltiCS as lacii,4S tlt V61 • ,. p•J'"• •
' . 99
71
.......
-
( lf\6,-/-cr (lf\ ccrrt;.,l.6

•I r•tlllS. ,,. 1111t JP

você está aqui • 127


Use a Cabeça SQL

UPDATE (atualize) seus preços


lA·nthr<t-'>e de quando tcnt;uno., aht·t~u \omcnlc O'> prc~·os um
d11nk.., da tabela drink 1nfo.1 ~ó., qucrímno.., altcr;u m chinb
<k S~ ..'iO para S:l.íO, t' os dt· s:~ ..iO para S L)().

drink info
" : :~nk o . o.tara~os "r ,. ' 1as
Blackthom 3 8.4 amarelo s 33
Blue Moon 2 .5 3.2 azul s 12
OhMy Gosh 3 .5 8.6 laranja s 35
Lime Fizz 2.5 5.4 verde s 24
Kiss an the Lips 5.5 42.5 roxo s 171
Hot Gold 3.2 32.1 laranja N 135
Lone Tree 3.6 4.2 vermelho s 17
Greyhound 4 14 amarelo s 50
lndian Summer 2.8 7.2 marrom N 30
Buli Frog 2.6 21.5 cor de canela s 80
Soda and lt 3.8 4.7 vermelho N 19

\ 'amo-, dar uma olhada em como podemo'> abonl;u· t'\lt• probkma u'>ando
o comando UPDATE para Í1 a cada rq.,ri.,tro indi,·ichmlmt•nu: t• t''><"H'H'J
uma \l'lll' de com;mdch UPDATr. romo e'>le:

UPDATE drink info


SET preço = 3.5~
WHERE nome do drink - 'Blue Moon';
)'
u./-,·1;~·~"s v~• cl:vsvl• w/lílt.í
,..,.. (!SC41I.t.l' ti~· C41tl'l.
#!Sft.cfltc• ,..,.. u s,-.. sdt.r~"s
3v•l rt.j'"s.fr" v•~"s • .fv•lt~•r.

128 Cap1tulo 3
delete e update

Escreva comandos JP A r: para cada registro na tabela info drinks


para adicionar outro dólar no preço de cada um. -

Espere um minuto. Por que está nos


dando todo este trabalho? Não existe
um operador que possamos utilizar com
o UPDA TE ao invés de mudarmos cada
registro manualmente?

Você está certa.


PaflTl' que alt,;uns opnadore~ c~pcrtos
't·riam ju,t;m1cntc o que <uudaria aqui.
\'amo' l 'PO.\ TE (atuali/.a r) t<xlo'> m
prc<;m do., drink.'> \Cill tn que tiver um IX>r
um. mmnmlmcnre, ani.,<·ando '>obre'>crcwr
dad<h que já havíamo'> altl·r~tdo.

voce esta aqui • 129


Us& a Cabeça SQL

Tudo o que precisamos é um UPDATE


'\m,a tohmant~n~a é umnumt•ro. bu SQL. podemo.. t;vcr operações matemáticas básicas em coluna'
'\o ca~o de no~'a colu11.1 p1 c<;o, pockmo~ adirion;u l do lar p;u a cada Linha que preri,;uum alterar dentro da
llllllll'IK ; ..,.
no"a t.1 hda. \qui \·ai to mo:

/1ttllcf4,.,. / p•r• c•tl• v~ i/tJS J


UPDATE drink info
prtf4S (tlrl,ks tlt IZ.S"O f~(
SET preco = preco + 1; IJ.S"o) 3vt prtctn~s ~~u
WHERE
nome do drink= 'Blue Moon'
OR
nome do drink= 'Oh My Gosh'
OR
nome do drink= 'Lime Fizz' ;
nào e;x•;tenl •
fetguntas ld'i9ta.S
f ·Posso usar subtração com um valor numérico? f :Eu poderia ter utilizado outros operadores C9méU1d9s UYDATI
Que mais posso usar? para fazer a mesma coisa feita lã em cima?
podem set utiliz.a.dl'
R.: Multiplicação, divisão, subtração- você pode f{: Sim, há um bom número delas. Posteriormente,
usar qualquer uma delas. E você pode executar
estas operações utilizando outros valores numéncos.
falaremos sobre algumas coisas que você pode fazer
com suas variave1s de texto junta as numéricas.
pata múltipl9s
não apenas 1.
f : Como o quê, por exemplo? Dê-nos uma tegistt:9s na sua.
f Você pode me dar um exemplo de quando poderei pista?
tabe,Ia. Use-9 c9m
utifiZN multiplicação?
1\: Ok, uma coisa que você pode fazer é usar a 9petad 9tes básic9s
f( O s1nal de igual na cláusula SET d•z "defina esta função UPPER ()para alterar o texto da coluna inteira
coluna. Suponha que tenha uma lista de itens em uma para letras maiúsculas. Epode até adivinhar, LOWER
tabela, cada um com um preço. Você poderia utilizar ( ) fará todo o texto ficar com letras minúsculas. de méltemátlcét pm~
o comando UPDATE e multiplicar o preço de cada
item por um número fixo para computar o preço do f :Pode-se ter mais que uma cláusula SET? méU1ipulcu· v'al9tes
produto incluindo os 1mpostos.
R:Não, mas não deverá precisar. Você pode colocar numétic9s.
todas as colunas e seus novos valores para elas na
mesma cláusula SET, como mostrado acima.

o o

Os dados mudam, entã o é crucial saber como atualizá-los


\ta~ quanto mt:lhm lm \c,:u trabalho projetando ~ua tabd;t, nwno' update tem
qut' liv:er no tina I ela, cout;t\. Hon~ projeto-. de t;1hda o deixa h\Te para \C
concentrar no~ claclo' n;1 tahda.

lnt ne~sado:1 ,\ seguir, dart•mo' uma olhada dt· perto l'. 'em aJlic;;"to, em proJeto
de tabela ~ob su~pei ta ...

130 Cap1tuto 3
delete e update

Sua caixa de ferramenta SQL


O capítulo 3 em breve será somente
uma lembrança, mas aqui vai um rápido
lembrete dos novos comandos SQL que você
já aprendeu. Para uma lista completa de dicas
de ferramentas no livro, veja o Apêndice iii.

rDELETE

SET ~I

você esta aqui • 131


4
Por que ser normal?
t-
*

Você tem criado tabelas sem dar muita atenção a elas. Tudo bem quanto a isso, elas
funcionam. Você pode usar o SELECT, INSERT, DELETE e UPDATE nelas. Mas, à medida que você
insere mais dados, começa a ver coisas que vai desejar ter feito para que a sua cláusula WHERE fosse mais
simples. Você precisa é fazer suas tabelas mais normais.

este é um novo capítulo 133


Use a Cabeça SQL

Duas tabelas de pescadores


Jark e ~l ark ni<u·;un uma tabda p;u·a arm azenar inlonnac;õe~ ~obre que bra de recordes dt: peixes. A tabela de
~l;u·k tem coluna:, para a~ l''pécic!> c nom e!> populare~ dos peixes c onde eles for;un pescados. Ela não indui
o~ nomes das pe~soa., q lll' pc~nu·;u n o peixe.

peixe_info

pop ular e s peci e loca l pe s o


robalo M. solmoides Logo Montgomery, GA 22 lb 4 oz
olho de peixe S. vitreus Logo Old Hickory, TN 25 lb o oz
truta, cutthroot O. Clorki Logo Pyromid, NV 41 lb o oz
perco P. Flovescens Bordentown, NJ 41b 3 oz
guelras azuis L Mocrochirus Logo Ketono, AL 4 lb 12 oz
peixe agulho L Osseus Rio Trinity, TX 50 lb 5 oz
croppie P. onnuloris Represo Enid, MS 5 lb 3 oz
lúcio E. omericonus Logo Dewort, IN 1 lb o oz
peixe dourado C. ourotus Logo Hodges, CA 61b 10 oz
salmão O. Tshowytscho Rio Kenoi, AK 97 lb 4 oz

G
o

A tabela de] ack contém o nome popular c o peso do peixe. mas t;uubt
contém o ptimciro nome e o sobrenome da pessoa que o pescou, e di1
a coluna local em uma coluna contendo o nome do corpo hídrico omk
peixe lo i pego e uma coltma sep<u<tda para o estado.

ish .fdt/4 h,,..,;:,. , st r(/trt ~ 3vdr• Jt


l'f!C41'tlf!SJ ,.._as .f.t,.._ 31/Ut 4 ,/6/)1'4 ,/(! C6fllii&J

peixe_recordes
~
pr~'lleir~ nome sob.enome popul a r local es ta do peso data
George Perry robalo Logo Montgomery GA 22 lb 4 oz 2/ 6/ 1932
Mobry Horper olho de peixe Logo Old Hickory TN 25 lb o oz 2/ 8/ 1960
John Skimmerhorn truta, cutthroot Logo Pyromid NV 411b0oz 1/ 12/ 1925
c. c. Abbot perco Bordentown NJ 4lb 3 oz 1/ 5/1865
T.S. Hudson guelras azuis Logo Ketono AL 4 lb 12 oz 9/ 4/ 1950
Townsend Miller peixe agulho Rio Trinity TX 50 lb 5 oz 30/ 7/ 1954
Fred Bright croppie Represo Enid MS 5 lb 3 oz 31 / 7/ 1957
Mike Berg lúcio Logo Dewort IN 1 lb o oz 9/ 6/ 1990 J
Florentino Abeno peixe dourado Logo Hodges CA 6 lb 10 oz 17/ 4/ 1996
Les Anderson salmão Rio Kenoi AK 97 lb 4 oz 17/ 5/ 1985

134 Capitulo 4
projeto de tabela inteligente

Escreva uma consulta para cada tabela para


encontrar todos os registros de New Jersey (NJ) .

. ....................................................................... .
~

A~onte seu Iár1s


S91uç,ã9
Escreva uma consulta para cada tabela para encontrar todos
os registros de New Jersey (NJ).

JJ;s ftiMS 311t vs•r


""'t,Ikip•r• ()

4fffr or rtsvlhJt~s
1.• ctJ•tlt t tshJt~
jV~6S, ~
.. ......~~~~.~.f.lt!!.~ f.~l~(_!."'!_~tl..................... •... . ......
tmnht:m
di\idl"
I, C .. wH.!i<! ~~~tl:I./(! ''f.A}J'; ....... t.............. . ........ .
> onck o

Bordentown, NJ 4lb 3 oz

(sfc WtSVIh ft'tiCIII'•


932 l..irt-f•,..t,h ,. ct~l1111• f!sl-•tlt~.

~
960
925
865 ····· ................... ........~~~~~~ f~~.f.~~~.~-,..~~6.':".~!. ........... .

w.H.~ ~!!:.~~~ ~ '!J,l:, ... ·~


950
954
... ... . ...
957
990
996
985

vocé está aqui t> 135


Use a Cabeça SQL

nã<> e;<Í~<J.O} •
f ett:untAs Id'iQtas
f :Então a tabela do Jack é melhor que a do f :Por que consultas curtas são melhores que fnós:Suponha que temos um enden!çoder.a
não temos uma coluna pêl'3 o~
Mark? as longas?
e outras colunas que separan estes clal:t(
ft:Não. Elas são tabelas d~erentes para propósitos ft:Quanto ma1s Simples a consulta, melhor À
diferentes. Mark raramente va1 preasar pesqu1sar medida que seu banco de dados cresce, e à medida R: Enquanto duplicar seus dados
diretamente por estado porque ele só realmente que você adiciona novas tabelas, suas consultas boa idéia pra você agora, leve em
se importa com os nomes das espécies, seus vão se tomando mais complicadas. Se começar quanto espaço vai ocupar no seu HO
respectivos nomes populares e o peixe recorde e com a consulta mais fácil possível agora, você vai banco de dados alcançar proporções
seu peso. agradecer depois. cada vez que duplicar seus dados. es:
uma cláusula em um comando UPCV1
Jack. por outro lado, va1 prec1sar fazer consulta f. Então você está d'IZeCldo que eu sempre devo ter teria que lembrar de ad1aonar qua'lOO
pelo estado quando estiver fazendo uma consulta pequenos bits de dados nas minhas colunas? sofressem alterações.
em seus dados. É por isso que a tabela dele tem
uma coluna separada: para permitir que indique ft: Não necessariamente. Como você está Vamos olhar mais de perto em como
precisamente os estados em suas pesquisas. começando a perceber entre as tabelas de Mark e tabelas na melhor forma posslvel para~
Jack, depende em como usará seus dados.
f Devemos evitar o UKE quando estivermos fazendo
consulta em nossas tabelas? Há algo de errado com Por exemplo, imagme uma tabela listando os carros
isso? para um mecânico e uma listando carros para um
C9m9 .,fooo .,fqj utiliza
vendedor. O mecãn1co pode precisar de Informações
It, Não há nada de errado com LIKE, mas pode mais precisas sobre cada carro, mas uma garagem seus Jados aietm·á e
ser ditrcll se usar nas suas consultas, e vocé se de carros precisa somente da marca do carro,
arrisca de obter resultados que não quer. Se suas modelo, e numero do chassí. cQmo .,focê m9nta sua
colunas contêm informações complicadas, LIKE
não é específico o suficiente para apontar os dados tabela.
preasamente.

~ PODER DO
~ CÉREBRO
SQL é a linguagem utilizada por banco de dados relacionais. O que você acha que
rei acionais quer dizer em um banco de dados SQL?

Uma tabela tem tudo a ver com relacionamentos


~QL (' ronht·(·lcla (orno sistema de gestão d e b ancos d e dados relacio n ais, ou RDBMS.
'\;lo 'l' incomock un memoriDí-lo. ~m no' llllJ>OI't<Ullm lllt'\1110 apenas com a pala\ra REL \ T IO'\ \I •. , ·- 1
.
() que tucIo quer< I1/t:t c. que para proJl't;u uma label . Ic\·ar em conta como as
' a f'era, HKl·• pren:-.a
~~~•I t •...otJrr•
til( voc':J.IItl' ti~
colunas vao -
se relactonar•
uma' com a.., outra.., para d escrever a l go. ~ li .' .
., •s s11 ll pr''~<

fdtl•?
1 . Escolha o objeto principal, aquele que você quer que sua tabela descreVi
c,...., Voct vffl
~ tshhitt1.?
2. Faça uma lista das informações que você precisa saber sobre seu único
objeto principal quando estiver utilizando a tabela. ,
/ " ' ~~~•I • ,.,.,ti'f"• ,.,.,'s ltell i.
\? l•·'l " • ,.,, s111h JtJ. 1J
3. Usando a lista das informações, divida a informação sobre aquele obje
principal em pedaços que possa utilizar para organizar sua tabela.
• \11,'1 1111a' pe\\o;L, ~dwnqlll' Hl'.I.\TIO:'\.\L "J:!ulir;~n
t:tlll'l.t> tdacinmu:J<e, L'IIIH' ,j, h1u "'10\t'Jr.Jdo.

136 Capitulo 4
projeto de tabela inteligente

Você pode destacar as colunas que Mark, o ictiólogo, usou para descrever como
ele quer selecionar a partir de sua tabela? Preencha a coluna_principal

Sua vez. Oescritor da Revista Carretilha e Companhia, que utiliza esta


tabela para selecionar detalhes para seus artigos. Após, desenhe flechas
partindo de cada coluna para onde ela se refere no comando.

sobrenome primeiro_
nome

peso di'! ta

você esta aqui 1> 137


Use Cabeça SQL

Você pode destacar as colunas que Mark, o ictiólogo, usou para descrever como
ele quer selecionar a partir de sua tabela? Preencha a coluna_principal

Exerc..í c..ios

lo c

Sua vez. O escritor da Revista Carretilha e Companhia, que utiliza desta


tabela para selecionar detalhes para seus artigos. Após, desenhe flechas Dados a
partindo de cada coluna para onde ela se refere no comando.
() Cllll (' 11111 ••

pr1me1ro_
s brenorne
popular

30 minut

p o

11111111 I O cl.t 111


llt l.tto. se "l'
lmscut dt\ idi<
111 111( d,\ llto\

138 )pltufo 4
projeto de tabe/' inteligente

Mas por que parar por aí com a tabela de Jack? Você não
o poderia dividir a data em dia, mês e ano? Você poderia ainda
o
dividir o local em nome da rua e número.

Nós poderíamos, mas não precisamos dos dados divididos nest e n íve l .
Pelo menos, não neste \aso. Se .Ja\k estivc~se escren:udo um arligo sobre o~ melhon:s locai-. para
ir nas swL~ férias para pegar um peixe gr<Uide, CJWio ck poderia querer o nome da rua c o número
para que o~ leitores pudessem e11coutrar acomodac;ôes em loca.is próximos.
J\1as.Jack precisava somente do local e estado, então de adicionou tantas colunas qtt<ullo ele:
precisa,·a para economi7.ar espaço na tabela. Neste ponto, ele achou qll<: sua tabclajá estava
sulicientt·mentc di,·idida - ela é a tômic a .

·~ P~DEitDO
'fXr CEitEBitO
O que você acha que a palavra atômica significa em termos de dados SQL?

J1~os atômicos
um.uomo? I· m pequeno pedaço de informação
p<xlc ou não deveria ser dividido. É o mesmo para
d '· Qu;mdo eles são ATÔMICOS, isto quer
elt j;t loi di,idiclo até o menor pedaç o de
Wos que não pode ou não deve ser dividido. p.,.. 6 t~+,.t,•t/61'
tlt pt~~·J 6 f!~tlf!l'f!j6
C61ftplff6 f!.t\ tl~t~• C61tl~·
~minutos ou é grátis t svltcit~~t~f!~
Jlll rnlrel(aclor de
IV.. rlw~ar aonde
de ><l preri-.a do
\v
da rua e mdercço

voe e está aqui "' 139


Use a Cabeça SQL

Local, local, local


. \~ora imaf.\Íilt' um c<>lll'lor dt· llllÚH'I">. Ek podt· querer ll'l lllll<t colun.1
">l'p;u·acla para o n(mwm da rua. Ek pode <Jlll'll'l' rolhuh;u apcna~ pdo
numero d;t rua fonwndo para H' I toda.., a.., ca..,.t.., ;, \l'ncla. P;u a dl' o nomt·
t ' o númt'l o d;t rua ..,;.o «tda uma. atômica. R_: Não
P•r• ., c<~rrd<~r lit ,.,.,;vtis stp•r•r ., ,.,,.,f! 11• pedaçosq
rv• li<~ ,t5,.,t.r<~ pt.r,.,;.ft &llt! t.lt. vjj• .j-.,,Ju u r pedaços p
c•s•s ~ vt.,tl• f!"" 11""• rv• t.sptctli'c•J c<~"" v""•
C<I"'SIII./-• Si""flt!S, ~

Dados atômicos e suas tabelas

1. Qual o objet o pri nci paI que sua tabela descreve?


~ Su• 1-dtl• tlt!SCI'f!V(! p•lf.•j<~SJ
v•cuJ ,J.,,vl-sJpts s4 •s?

2. Como você USará a tabela para Chegar até este ObjetO


_/I
Pr~f!"l; sv• ./-dtl• p•r•
11,.,. f•ci/ C4"1SIII./-•.

3. As suas COlUnaS
possuem dadOS atômiCOS para
fazer consultas pequena s e diretas ao ponto?

140 Capitulo 4
projeto de tabela inteligente

nã9 e;xjstem •
f etguntas Id'i9tas
f Oátomo não é bem pequeno? Eu não deveria dividir meus f: Como os dados atômicos me ajudam?
óados em pedaços bem pequenos, então?
I\: Eles ajudam a assegurar se que os dados na sua tabela
~:Não. Fazer seus dados atômicos significa dividi-los em menores permaneçam corretos. Por exemplo, se você tem uma coluna para o
~que precisar para criar uma tabela eficiente, não só os menores número das ruas, pode se certificar que apenas números possam ser
~aços possíveis de se conseguir. inseridos naquela coluna.

flàldlwla sua tabela mais do que precisa, se não precisar de colunas Dados atômicos também permitem que você execute consultas mais
:lt.IS não as adicione sem motivo. eficientes porque as consultas ficam mais fáceis de serem escritas
e gastam menos tempo para serem executadas; o que conta muito
quando se tem uma quantidade de dados massiva armazenadas.

Aqui estão as regras oficiais dos dados atômicos. Para cada regra,
rascunhe duas tabelas hipotéticas que violem cada regra.

R.EMA 1: Vmct c9lunct c9m dctd9s at9m'lc9s nã9 p9de c9ntet


muit9S vctl9tes d9 mesm9 t'ip9 de dctd9S nct'iuelct C9]unct.
A c41tl,« t~rusts Jc -1-dtlc
""ttls_c4,-l-1.+4s Jt brtJ Vtillc
u-1-4 rtJr«.

REG-RA 2: Vmct tabela c9m dctd9s at9mic9s nã9 p9de


c9ntet múltlplcts c9luncts c9m º mesm9 tlp9 de dctd9s.
A' .fdtl« Jrinl!s _l•ctts
Vt'tllil ts.f• rtjrl..

você está aqui • 141


Use a Cabeça SQL

Aqui estão as regras oficiais dos dados atômicos. Para cada regra,
rascunhe duas tabelas hipotéticas que violem cada regra.

REG-ItJ.\ 1: Omq_ c9luna. c9m Jq_Jos at9m!c9s não pode tet


muit9s y'qlQtes d9 mesm9 tip9 de dél.d9s nél.<J.uela. c9luné\..
,
Í cl•rt~ 311( s11•s r(Spt~sfcs S(r'it~ Jt/(r(~SJ ""u •311i v•i 11"" (Jc(""flt~:

nome comida ingredientes


1-

pao farinha, leite, ovo, fermento, óleo

salada alface, tomffi, pepino

T
REG-RA 2: Omé\. tabelq_ c9m da.d9s at9m!c9s nã9 pode
tet múltlpla.s c91una.s C9m 9 mesm9 tip9 de da.d9s.

professor estudante1 estudante2


\
estudante3
"')
Razõe
Mr. Martini Joe \ Ron Kelly

Mr. Howard Sanjaya Tim Julie

142 Clfpltulo 4
projeto de tabela inteligente

Agora que você sabe as regras oficiais e os três passos para produzir os dados
atômicos, dê uma olhada em cada tabela anterior deste livro e explique o porquê
de cada uma ser ou não atômica.

Tabela do Greg, página 32 ............................................................................. .... ................... .

Tabela de notas dos donuts, página 65 ... .................................................. ..........................

Tabela de Palhaco_info, página 101 .....................................................................................

Tabela dos drinks, página 61 ................................................ ................................................ .

Tabela Informativa dos Peixes, página 132 ....................................................................... .

lllões para ser normal


,ua empre~a de consultoria decol;u· c você prcci~;u· contratar mais designers de Faz.et dad9s at9mic9s
t dado' SQL, não seria ótimo se não prcci~a~sc ga~L<u· hora~ cxplinmdo como

1~, limcionam?
é9 ptimeh9 pass9
tr '"a' tabela~ do jeito NORMAL quer dizer que elas ~q,'ltcn• algumas regras pata ctim· uma tabela
1qut 'f"' noros designers iriam entender. E a boa noticia é que no~~as tabelas
,atúmicmj;í sào a metade do cantinho. NORMAL.

vo cê está aqui t> 143


Use a Cabeça SQL

Agora que você sabe as regras oficiais e os três passos para produzir os dados
atômicos, dê uma olhada em cada tabela anterior deste livro e explique o porquê
de cada uma ser ou não atômica.

Exerc..í c ios

Tabela de notas dos donuts, página 65 .... f!.f.~~~~·. f!.~.~.~'!!.~.~':.'~,:~.~~~.~~~.~~~~~~./~.~~~~)..~~~~..


coftmc co~~~por·l-c (l.t~ -1-r;.o tltltrt,.h llt ,;,for.t~cf'io. ( co co,./-r:rl"o tl• colti"C c.fr-vltlctlts tlc hítlc tlos
········· ·· · ··· ·· ··· ········ · ·········· · ·· ···· · ···························· · ·~ · ··· · ················· · ···· ·················· · · ·· ·· · · · ·· · · · · · ·····
cctl• coftl,. ff.t~ cpt"cs
p,aft.csos ............................ tl.t~ ptll•fll.... ,;,flll'<t~CfCil
tlt....... ,tia,
... .... .... .... ........ ........................ .............. ..
.......... .~ .................. .... .. .......
" ~f:.·~,~~'!.~~..." :f.~'!!........... ..
A .~~~l!.'!~ ...
Palhaç
Tabela de notas dos donuts, página 101 ......~~. ~' .~ -A"'
Al"' .. ~.":-:~~: ....
..~~:~. ~~~ .~~~ .-!:.·~,~~.~~ .~~.~~~".~. ~~~~~~~~J r':.f.~~l!. ~~~~~ .~. ~~':~ /:.................................................
AJ'illt..l-';.uca.rra~tstltv~clll
' IV
Tabela dos drinks ' página 61 ..................................... ll,. " tJII•,-h'tlatlt
.................
"
Jo1JIItv,6f••rtr•~-o
.. ......................
1
..................

Tabela Informativa dos Peixes, página 132.... ~~~:~~: .~~~~. ~.~~~~~. ~.~'J:.~~f.~. '!.~ :f!t.~ ~~·~~':.~'!!;i!
:~~:.~~~~~ .~. ~~~· -~~~~?.~ .~~. ~~'!~~. '!.~ f.~'!.~f~ .'!.~ .t~f.~~~~{~~. ~~~....................................................... ..

O benefício de tabelas normais

1. Tabelas n9tnléUs não tetã9 dados


dup1icad9s~9 ~ue teduzhá 9 tamanho de
seu banc9 de dad9s.

Z. Com men9s dad9s pata t>es~u'ism·, suas


consultas setão mais tát>idas.

144 Capttulo 4
projeto de tabela inteligente

Porque mesmo quando suas


tabelas são pequeninas elas
melhoram.
E tabelas cresc~:m. Se você começar com
uma tabela normalizada, não Lerá
que voltar atrá~ e altcr;u· sua Labcla qu<Uldo
suas consultas começarem a ficar knlas.

~l~a~os não são normais


N

mhra da tabela elo~ palha~,o~;> Rasu·ear palhaços Lornou-se uma mania nacional, e f.s·hs JIIU c4ty"•s SIJ.iJ .f
o,.llahda não \'ai ter ~-ouccsso porque as colunas aparência c a ti v idades ttJ.IMt!,rl-t Jif~ett"s Jt! '
4115111
j"
mullchdado~. Para nosso~ propósitos, c~ta tabela não é atômica. ~ r&llf! , 4 ,-H,.. Mlli.f4s JtJ.JiJS•
4
palhaco_info ~ ~
r v1sto ultimo aparencia at ~viddJes

E~•e Centro do Terceiro Idade Cherry Hill F, cabelo vermelho, vestido verde, pés enormes bolões, carrinho
Mies Festa de Jock Green M, cabelo lo ranjo, terno azul, pés enormes mímico
I Snuggles Mercado do Bolo F, camiseta amarelo, calços largos e vermelhos corneta, guardo-chuva
I
~ Hobo Festa do Eric Groy M, charuto, cabelo preto, chapéu comprido violino
C10robelle Centro do Terceiro Idade Belmont F, cabelo rosa, flores gigantes, vestido azul gritar e dançar
Scooter Hospital Ooklond M, cabelo azu l, terno vermelho, nariz enorme bolões
Zíppo Shopping Millstone F, terno laranja, calços largos contar
í Sobe Autopeças do Eorl F, todo rosa e brilhoso malabarismo, carrinho
i Porque do Dickson M, vestido comprido de bolinhos contar, dançar
Somo
Sniflles Trocy's M, terno verde e roxo, nariz pontudo montando em um carrinho

Vamos tornar a tabela de palhaços mais atômica, assumindo que você precisa
pesquisar seus dados entre as colunas aparência e atividades, como também
na coluna visto_ultimo, escreva algumas escolhas melhores para colunas.

você está aqui"' 145


Use a Cabeça SQL

Metade do caminho para 1NF


Lt:mbre-se, nossa tabela c~tá apena~ metade do c;uninho para ~cr nomtal quanto ela ti\cr com os dado~
atômicos. QuéU1do ela esti\'cr completamente nonnaJ, estcu·emo~ no PRI ~tl:J RA FORMA O RMJU. ou lF:\.

Para ~cr I f\ F, <L tabela deve SC.f,'lJir t:ssas duas regra~:

·~ P~DERDO
i5fJcEREBRO
Que tipo de colunas você acha que seriam boas
Chaves Primárias?

OI
va

Uma chave rtimfu-ia


Regras da CHAVE PRIMÁRIA é uma c9lunq_ na
,\ rolnna na <.,Ua tabela que será sua chave primária de\'c ser desi~-,rmtda
para isso no momento em que niru· sua tabela. Em pouca:. páginas, sua tabela cr,ue t9tna
criarcmo~ uma tabela r dc~>igmu· uma chave primária, mas <mtes di~M>,
Cé\;dél tet;Ist!9 UlliCQ.
o " o
v<mto~ olhcu· de pc110 no que \·em a ser uma chan: ptimária.

A chave primária é utilizada


exclusivamente para identificar
cada registro
O que l>ignilica que os dados na chave p1imá.Jia não
Tome cu i dado
podem ser repetidos. Imagine uma tabela com as
ao utilizar CPF
roluna.' mo~u·adas ;\baixo. Você acha que alguma dela' como sua chave
seria uma boa dmve primária? Veja Isto! primária para seus
registros.

CPF sobrenome prltneiro_nome telefone Com o roubo de identidades só


aumentando, as pessoas não querem

1' "'tDJu u·hs .fr'is


J colti'1.S poJt:'*~
í co,.ftr vclort:s
fornecer o número do CPF - e com
uma boa razão. Ele é importante
ft'1tlo t~ vis-l--c '"t demais para se arriscar. Você pode
o cPF t • .;.,.,.~v,tlo Jvplic•Jos -por t:xt"'floJ voct pro~cvtl'*lt:lfh garantir absolutamente que seu banco
li'1ÍCC~t~t~ c v-.4 s: h-. '*141"$ Jt 11'*" rt5'-s.fro pu• •'51/t:'*~ cl.c-.cJo de dados é seguro? Se não é, todos
pt:sso~ -1-..tvt~ tlt Pttlro otl ...~t.f,;tcs pt:ssocs &Vt: vtv•'*~jv"hs
esses números de CPF podem ser
pliJt~St: Stl' liAI\4 c/•4Vt
f1'1.....1'14,
J:
t co..:4r.fr-lt.c... o -.ts~t~.o ,~...tl'o htt:lo~tt:J
roubados, bem como a identidade de
seus clientes.
t:,.f;o provcvt:IA~~t:,.h t:s.fu ,'io s~o /,ou
op{;ts p•r• st:rt:'*~ 11'*14 cl.cvt pr,-...cri-..
146 Capitulo 4
projeto de tabela inteligente

A chave primária não pode ser NULL


Se ela é :\'t ILL nào pode ser única porque outros
regi~t:ros também podem ~er :'\liLL.

A chave primária deve ser atribuída no


momento em que o registro é inserido.
Quando inserir um regi:-.t:ro sem uma chave prim~uia, ,·ocê
COJTe o risco de acabar com uma chaYe t)Jimária Nl. ILL e linhas
duplicadas em sua tabela, o que \~ola a p1imeira fónna nonnal.

A chave primária deve ser compacta


{'ma chave primá1ia deveria conter apenas as
infom1açõc~ nece~s{Lrias
para ser única e nada mais.

Os valores da chave primária não podem ser alterados.


Se pude:,:-.e altcnu· o:, ,·atores da sua chave, \'Ocê estm·ia se arriscando, acidcnta.lmcnlt:, a
defini-la como lUn valor já utilizado. Lembre-se que ela de\ 'C permanecer única.

~~ P~DERDO
'fXf CEREBRO
Dadas todas estas regras, você consegue pensar em uma boa chave primária para usar em uma tabela?

Olhe para as tabelas anteriores contidas neste livro. Alguma delas têm uma coluna que contenha
verdadeiramente valores únicos?

o
o

A melhor chave primária pode ser uma nova chave primária.


Quando o assunto é criar chaves p1imiuia~. seu melhor palpite ~e ria criar uma coluna que
contenha um número único. Pense em uma tabela com informações sobre pes-,oa~. mas com uma
coluna adicional contendo um número. No exemplo abaixo, vamos chamá-la de ID.
Se não (()sse pela coluna lD, os registTos de J olm Browu se1i<U11 idênticos. Mas neste caso, de'
sào na verdade duas pc~~oas diferentes. A coluna ID faz de cada rcgistJ"o uma exclusi,idadc. Esta
tabela está em Primeira f orma • ormal.

~---3------~-----B-ro_w
_n______t-_____J_o_h_n______~______
Jo_h_n______~ ~ ,
Petrillo Maria Maria , '\ 1i"''.+t"" V"'' re5'siro p•r•
Franken Em Jot., 8row"J "'~•s • c41v,•
Ib "'16Siro~ 3ve tlt t V"'' Jot.,
8rol!tl, tlt"ltrt~ t/6 f"'""'~ti'r6,

voc é esta aqui-. 147


Use a Cabeç a SQL

Dica Nstd
Há um grande debate no mundo SQL sobre usar chaves primárias sintéticas, ou
inventadas (como a coluna ID acima) ao invés de utilizar chaves naturais- dados que já
estão na tabela (como o chassi de um carro ou o CPF de alguém). Não iremos escolher um lado, mas
iremos falar sobre chave primária com mais detalhe no capitulo 7.

Entãl
perfe
não exlitt!lll •
1 la n 'i1
fstguntas Id19ta.s não t 'l
aban
f :Você disse "Primeira" Forma Normal. Isto quer dizer que existe f :A coluna comentários na tabela de donuts não me pa~.,
a Segunda Forma Normal? Ou terceira? atômica. Não há nenhuma forma razoável de se consultar aqut l'l l(kll1
tabela com facilidade. colu11:
It Sim, de fato existe a Segunda e a Terceira Forma Normal, cada :\l a~.u
uma delas adenndo a um conjunto de regras cada vez mais ríg1do R: Você está absolutamente correto Aquele campo em palt
Abordaremos a Segunda e a Terce1ra Forma Normal no capítulo 7 não é atômico, mas o proJeto daquela nossa tabela não exíg13 Q:.t
fosse. Se quiséssemos restringir os comentários a apenas um OOl=
f :Então nós já transfonnamos nossas tabelas para terem valores de palavras pré-determinadas, aquele campo podena ser atÕilliOO O coman
atômicos. Alguma delas já está em 1FN? desta forma não conteria comentários verdadeiros e esponlà~
(,J t ~ JlllTi~.l d
~:Não. Até agora. nenhuma tabela sequer que tenhamos criado tem lll{ h.••li L,'lllllit
uma chave pnmária, um vaiou único. Jh. II1II O\ l.OJIII

\CJIII t ~ta cl taJ>e;

Ficando NORMAL -~ P~DERDO


L't;i na hora ck 'oh.u .1tr;b c nomtali1;u no''"' tabela ....
"i5fY CEREBRO
Pn:u-.;ulto-. tornar IH>"o' dado' atÔiliiUI't c adicionar a... cha\l'' Você se lembra como ad1c1onar colunas
pnmária .... Clia1 11111.1 c haw primána C: normalmente all{u qllt' a uma tabela existente?
l;vt:mol> ao utilit.;u o codi~o CREATE TABLE.

Consertando a tabela do Greg


. \ p;uúr do qut· \CX'l .l<l \ iu até ~ora. t· "''im que teria que COII\crtar a tabela do c;, cJ.(:

Consertou· 4 t<:lbeJQ do G\'eg - p&t~:;o 3 : iNSER.n'inset'h') tod9s o:s dados é\ntÍ~9S nQic1be)Q nova. Me~ .
cnda linhtt pm·u ttde<j,u cu·~se à no..>v& est:l'Utut·&.

148 Cap1tulo 4
projeto de tabela inteligente

Espere um segundo. Eu já tenho


uma tabela cheia de dados. Você não pode estar
realmente esperando que eu utilize o comando DROP
a
T ABLE como fiz no capítulo 1 e digitar todos aqueles
dados novamente, apenas para criar uma chave primária
para cada r egistro....

Então, agora sabemos que a tabela do Greg não é


perfeita.
IJauão t' atômica c não é chave ptimátia. Mas para a :-orle dde,
I IOt n~-n·,,;irio ,·iwr rom a tabela antiga, e \'Ocê não tem que

abandonar a sua antiga.


parece
aquela PtKitlllm adicionar uma chave primária na tabela do C reg l' l'tver a'
hma' ,~· tOJ n;uem ma i~ atômica~ u~;mdo apenas um non> romando.
\I , atll~·, de tudo, vamm dar uma volta ao passado ...
rticular
iueele
)OJunto
:o, mas
~os.
leomando CREATE TABLE que nós escrevemos
de uma rhaH' primána l ' clq><>is ele toda aquela ronYer~a 'obrt· dadm iltÚmKm. ek pnrelxou
J.h wt-.;1\qm· l><><il·nam 'l'l feita' para tomar suas colunas mal\ atômicas. \l.ts. anil'' dt·
1'01110 wthct1;u uma tabela já t'\Í,tente, \<tmos ptimeiramente H'rilinu como rn;u tamo'> a talxola.

tllx la que ni;mlm hi .ttrá'> no Capítulo l.

CREATE TABLE meus contatos


(
s sobrenome VARCHAR (30) ,
primeiro_nome VARCHAR (20) '
email VARCHAR (50) 1

aniversario DATE, ~ ..... .ftr


. V''J\ ncHAR ( 5o ) f.slas c4111'l&S f"~trr

( P ro f J.ssao ~ • 1

local VARCHAR (50) ~ crta-saldtl&.
·~ .....6,·s ..6l';...,c4S
. / st""
I
7 ..ov•"""

estado_civil VARCHAR (20) ~


interesses VARCHAR (100) ~
procura VARCHAR(lOO)
);
·~ P~DERDO
'fXf tEREBRO
Mas e se você não tem seu comando CREATE TABLE impresso em algum lugar?
Você sabe alguma forma de acessá-los?

você esta aqUI ~ 149


Use a Cabeça SQL

tabe\a
Mostre-me o d~o
1: utili;.;tr o r o mando DESCRI BE meus_ con ta to , para 't:rilicar o código que mcê ulili10u quando niou a
\l' HKC:

tahda.' \'ocê 'e1.1 <th;o m;Ú' ou me no' a"im:

OCR

Crltlft6S ti
:\),,,o que nó:-. realntt'lltt• queremo~> H't é o códi~;o CREATE .tqui t' nfto o~ campm da t<tbda p<U<l qm· pms;uum imaginar o C61li'JC cl.
quc: tníamm feito la no início sem ter que L'~crcver o comando CREATE todo nov;utwntc. f,/ C6,-/-#.
() comando SHOW C'kf.ATE _ TABLE tra 1 ctornar o comando CREATE TABLE qtH.' pode reni;u sua tahda. wm e\rtçãn c;...,.6r.f.
do' dadm nela mst·rtdm. De-.ta foml<t, 'oci· sempre podt H' I como a tabela (JIIl' l''l;i olhando pode 'e r n tada. E.xperimrn ilrh5tr
• cl.•vep
,..,.. ,6
SHOW CREATE TABLE meus contatos ; Cctlc vcl
.fd~l· s
.f.r"'"
Comando para economia de tempo ,6ss• .f.

IX llllM oUmda no t·omaJI(Io que utilv.;mtos JMra ni;u· a tabela, l' o códi~o al><Ú\O qut• o <·ormmdo S HOW CRf.ATE TABLE rr~
on ta tos lhe dt·u. Ut·s nào ..;,o idénúcm, mas "-' col;u· o te:~. to .thai\o no ~eu comando C REATE TABLE. o tl''ultado final 'l'l'i
llll'"tto. \'océ nào ptl'<·is;t rL'mon·r m an·ntos 1-,'l';t\'l's ou conlih'lll<t~·úc:s dc: dados, mas lira mais caprichado Sl' o li;cr.

~Os st;,cts dr,;,J" e ltcl.c,J" 6S """"ts tlcs c61tl'ltS e•


CREATE TABLE contatos r:::_
.fdtlc s." cl.c,.,ttl6s tlt cct,-1-"s 5rcvts. Ílts cpcrtctlll
txtcv.f....6S 6 C"""'""" sHow CJtí/}íf. íi}$Lf..
sobrenome. varchar (30) defaul t NULLI ~/} ,';6 Stf' avt Jl$C"""S
. . , '" .5;s.ft,.,, .5~'-
pr~me~ro
-
nome varchar(20) default NULLI ·r
tltrtf't~J
L •t•usu,.,t
""
tsptcllicl
c.,/lJIJC c
1' Então voe
varchar (5O) defaul t NULL 1 3ve .f6tl"s 6S v•'""ts,.,
"'6 A)ut-t- , 6,.," pcJru.
,.,o vclf!'V
pode ser NUL
ãlpllcada?
sexo char (1) default NULL 1 se !_llfll'"

aniversario date default NULL 1


fdetc. ft Basicame~
~ct ,';6 prtci'st St pt't6ClJfC1' auc,./-• flSere) valoresl
profissao varchar(SO) default NULL 1 ~ ~1.;..,.,.,, t1;,1.c J 6 ffd6 .,:s ltcl.ar coluna ld co
exemplo, o pri
local' varchar(SO) default NULL 1
6s ,.,,.';,-1-tsts. Í/c tsptctltcc c"""" ontat
ts /t;,l.cs Stf'.6 Cf'""C}t'ltJU t auaf
l8l'á 2. etc.
estado civil varchar ( 2 O) defaul t NULL 1 6 c6'!j11,.f" tlt ccrcc-Ftrts • str
v,hliJ'""· /} tltf,-,,.,';6 ptt/1'.6 ts-f~
interesses · varchar(lOO) default NULL,
procuravarchar(lOO) default NULL 1
) ENGINE=MyiSAM DEFAUL~ CHARSET=lati nl
v 6 ..f;,.,,J I'"~' t, 3uc,./-"·

'1.6
/f Stf' 311t ff'Jf.l.
tlt/ffctl" • "..1-dtlc ""'~'.,''
" J
"' /__ /
V6Ct TT:f'C 311t Jtr lJ-'1 lfOIIIt
tllltrt,.h,
150 Capitulo 4
projeto de tabela inteligente

Emb9tél pudesse de'lxm· 9 c9d'lg9 méUs capl'lchad9


(tem9vend9 él última linha e 9S acent9S gtaves), V900
p9de apenas c9J:>1at e c9lat pa.ta 9 c9mand9 cteé\te table.

tREATE TABLE com uma CHAVE PRIMÁRIA


romando que o SHOW C REATE TABLE meus_conta tos mcus_contalo:. nos deu. ó:-. remove mo~ o~ acento~
1a ulnma linha. No topo da lista de colunas adicionamos uma coluna id_rontato que estamo:- definindo como NOT
t •o fmal da lista adicionamos uma linha PRIMARY KE Y, que definimos para us;u· nossa coluna id _contato como a

~id_contato

sobrenome varchar (30) default NULL,


f,r,,..sv~~o• ,.,v•
vl!M,,.....J. primeiro_nome varchar (20) default NULL 1
~ ,oJJ4 5ut vcl
sexo char (1) default NULL
~rvclt~~ts
r/t~t &Vt ~ti'• email varchar(SO) default NULL,
, ktt pri,.l'f«
aniversario date default NULL,
f'" MSSf .fdtf•.
:U.v•lor ..ts.f.
I I
profissao varchar(SO) default NULL,
l.i(lt str• u,,..,.,J
local varchar(SO) default NULL,
,.,.,.MJ• ..f~c« •
.mhttl•. estado_civil varchar(20) default NULL, A3vr t 41flit tsptctltc•"~4S
,
I14S s• cl••vt prl"!crt•. Sr'ficxt
s interesses varchar(lOO) default NULL, ;t"' Stíty>lts: ,:s Cfti7CS
~~Ea~~~~~UWQL_fd ault NULL, ,(t~t"'4S Plt.IM.Ait.lj k!.ij t
KEY (id_contato) c414cC"!4S t11J.rt pcr~sts 4
IJ4"1t Jc C4fti17C 3t1t t~it•Jt~C"14S
p•r• lSS4- I'Jf!s-1-t c•S4174SS•
114VC C41ti1JC ti/_c4'fiCJ.4,
não existem •
Petguntas Id1<?téls
;oJovocé diz que a PRIMARY KEY não f: Éum problemão ter que definir um valor novo para f :Eu posso utilizar SHOW para qualquer outra
wNUlL. Oque mais impede ela de ser a coluna PRJMARY KEY cada vez que vou inserir um coisa além do comando CREATE?
novo registro. Não há um jeito mais fácil?
ft Você pode utilizar SHOW para exibir uma coluna
você. Quando você INSERT R:Há duas maneiras. Uma é usando uma coluna individualmente na sua tabela.
á1res na sua tabela, inserirá um valor na nos seus dados que você sabe que seja único como
contato que é nova a cada vez. Por uma chave primária. Nós já mencionamos que isto SHOWS COLUMNS FROM nome tabela;
o~meiro comando INSERT irá definir é ardiloso (por exemplo, o problema de usar o Este comando exibirá todas as colunasna sua tabela
,to em 1, o próximo id_contato número do CPF). e seus tipos de dados ao longo oom quaisquer outros
detalhes especificos da coluna.
O jeito mais fácil é criar uma coluna inteira
completamente nova apenas para armazenar SHOO CREATE DATABASE nome_database;
um valor único, como id conta to nesta Da mesma forma que SHOW CREATE TABLE,
página. Você pode dizer ao seu Sistema SQL para você irá obter o comando que poderia recriar seus
automaticamente inserir um número para utilizar as bancos de dados.
palavras-chave. Vire a página para mais detalhes.

você esta aqui,. 151


Use ., Cabeça SQL

nãv exlitclll •
Petgunta:-> Id19ta.':l

SHOW 'WEX FROM nome tabela; f· Então, qual éado acento graveque aparece quando f :Oquehádeenadoemutiliw~
Este comando exibirá quaisquer colunas que estão utilizo o SHOW CREATE TABLE? Você tem certeza de nome de colunas então?
mdexadas e o bpo de 1ndex que elas possuem Até que não vou precisar dela?
agora, o único index que olhamos foram as chaves R: Você é perm1lldo fazê-lo. mas eu::
pnmárias, mas este comando se tomará mais útil à 1\:Ele existe porque as vezes seu Sistema SOL 1déia. lmag1ne o quão confuso suas
media que você aprende mais. pode não conseguir dizer que o nome da sua tabela tomariam, e a perturbaçãodedigitaraq
E há mais um outro comando que é muito seja o nome de fato da tabela. Se utilizar o acento graves sendo que você pode se safar de
espec1al grave para ficar entre os nomes das colunas, você Além do mais, select não é um nome de
poderá de fato (embora seJa uma péssima 1dé1a} usar bom. pois não diz nada sobre que b,.."'i
SHOW WARNINGS. uma palavra-chave reservada para o SOL como um se encontram ali
Se você conseguir uma mensagem em seu console nome de coluna
de que seu comando SOL tenha originado avisos,
d1gita 1sto para ver os avisos atuais. Por exemplo. suponha que queira nomear uma
coluna com o nome select por alguma razão muito
Há mais uma boa porção, mas aqueles são os estranha. Esta expressão não funcionaria:
que estão relacionados a coisas que já fizemos ~elect varch1r (~0)
antenormente.
Mas esta já funcionaria:

s~lect varchar (50)

1, 2, 3 ... auto incrementando


\<llnonar a pala\ r<a-dliiH' AUTO_ INCREMENT para IH>"" l'oluna ld_ con::a to limí n>m que no,,o
""ll'ltla ~QL autom;Hkaml'nte prt'l'll<h<~ "õtqlll:la rol una com 11111 'alm que i•m·a;a na linha I çom um' alua
dt I t \ai aumetllancln t'lll acré,çiJno\ dt· I. Z r (' TVII4.
1 .. ~ A • ~cl'olff c pclcvr•-,~li(
S.,.4 f"rf("CS "'"'
A-uro ZA.lCJt.iM.iA.lrccs4 (s~• trfili}•~J,
CREATE TABLE meus contatos / ,.,cl'orl;Jcs (Sp:cl(S J( 5~{.. ÚJsv~rtd ,(~1.1
.../ (s~•"' cl(rhs.J c pclcvrc-cl.cv( ~ IAlb
i d conta to INT NOT NULL AUTO INCREMENT co"' ""' vclor ,-,tcicl ( v• 14" J( ccr(sct,.,.,
Jv
~ r(f(r'i,ct'c ~'- per• ,.,/4r,.,.~u (sptct ''
I -

sobrenome varchar ( 30) defaul t NULL 1


primeiro_nome varchar (20) defaul t NULL 1 A- pclcvrc-cl.cv( I•~ ••s1cc""("N 4 3"( voctts
3(1( (/c lc~c: (/c C4if'o(fC Jo / ~ vct '""'(,.;..,,,
email varchar(SO) default NULL, -/-4tiC V~ 3CI( ,.,S(ri'r Cllf\. "4VC lt-,l,c,
sexo char (1) default NULL
aniversario date default NULL, Ok, parece simples
o suficiente, mas como
profissao varchar(SO) default NULL, uso um comando INSERT
local varchar(SO) default NULL, se aquela coluna já será
preenchida por mim? Eu poss:
estado_civil varchar(20) default NULL, acidentalmente sobrescre1t
interesses varchar(lOO) default NULL, o valor JÓ 1nserido naquelaJO
existente?
procura varchar(lOO) default NULL,
PRIMARY KEY (id_contato)
O que você acha que
vai acontecer?
.\ felhoa ;uuda. C\l>l:tÍilltll e
n>cê mt''llla c n:ja o qut
acontece.

152 Capitulo 4
projeto de tabela inteligente

1 Escreva um comando CREATE TABLE abaixo para armazenar nome e sobre


nome de pessoas. Sua tabela deverá ter uma coluna chave primária com
AUTO_INCREMENT e outras duas colunas atômicas.

································································································

2 Abra seu terminal SQL ou interface Gráfica e execute seu comando CREATE TABLE .

.3 Experimente cada comando INSERT abaixo. Circule aqueles que funcionam.

INSERT INTO sua_tabela (id, primeiro_nome , sobrenome)


VALUES (NULL, ' Marcia ', ' Brady');

INSERT INTO sua tabela (id, primeiro_nome , sobrenome)


VALUES (1 , ' Jan' , ' Brady');

INSERT INTO sua tabela


VALUES (" , ' Bobby ', ' Brady ') ;

INSERT INTO sua_tabela (primeiro_nome, sobrenome)


VALUES ('Cindy', 'Brady ');

INSERT INTO sua_tabela (id, primeiro_nome , sobrenome}


VALUES (99, ' Peter ', ' Brady');

4 Todos os nomes Brady conseguiram? Rascunha sua tabela e seu


conteúdo depois de tentar os comandos INSERT acima.

-
,~ f>l"l..t!l"rll-"ll"'t! Sdl"t!"ll"'t!

você está aqui li> 153


Use a Cabeça SQL

1 Escreva um comando CREATE TABLE abaixo para armazenar nome e sobre


nome de pessoas. Sua tabela deverá ter uma coluna chave primána com
AUTO_INCREMENT e outras duas colunas atômicas.
CJtJ.I}rf. ri}$L.i sv•_~del•
Exerc.í cios (

,if IA111J011JtJL.L. l}vro_IAJCJti~iA.Jt;


prt--..eir"_""""e V/}JtCHI}Jt<2.0)J
S4tre""""e V/}JtCHI}Jt<]O)J
P~t.I~Ait.':1 ki':1 <lll)
);
2 Abra seu terminal SQL ou interface GUIe execute seu comando CREATE TABLE .

.3 Experimente cada comando INSERT abaixo. Circule aqueles que funcionam.

INTO sua_tabela (id , prime~ro_nome ,

INSERT INTO sua_tabela (ld , primeiro_nome , sobrenome)


VALUES (1, ' Jan ', ' Brady' ) ;

INTO sua tabela


( " ,

lNTO sua_tabela (primeiro_nome , so


( ' Cindy', ' Brady' ) ; Adicion ~
INTO sua_tabela (id , primeiro_nome , AqUI t'''·' o n'>tl
(99 , ' Peter ', ' Brady'); mt u~ rotltato~

Todos os nomes Brady conseguiram? Rascunha sua tabela e seu


conteúdo depois de tentar os comandos INSERT acima.

sv• ~del•
-
til pr,--..elr" _""""e S4Jre""""e

I ~I"C l i Bntlj
Abb COLtJJ
2. B"Hj Br.llj 111~ - • llk14tj
c~ lll_co,
3 C,-,,"J Bnllj

.2L Pt"hr 8r.'j

154 Capitulo 4
projeto de tabela inteligente

nào exlstem •
Peth"Ulltél.s Idiotas
f: Por que a primeira consulta, aquela com NULL para a coluna id, inseriu a linha quando a
coluna id é NOT NULL?

R.: Mesmo que pareça que ele não deveria ser bem-sucedido, oAUTO_INCREMENT simplesmente
~gnora o NULL. No entanto. se a ooluna não fosse do tipoAUTO_INCREMENT, você obteria um erro
e a linha não seria inserida. Experimente.

Olhe. você não está me acalmando. Claro, eu posso


colar o código a partir do SHOW CREATE TABLE. mas
o ainda estou sentindo que terei que apagar minha tabela pela
segunda vez e começar a inserir todos aqueles registros
novamente, apenas para inserir a coluna chave primária. _. __
Você não terá que recomeçar; ao invés disso,
pode utilizar um comando ALTER.
l ima tabela com dado-. não preci-.a ser deixada dt.· lado, nt.·m
excluída, nem rcniada. Nó~ podemm na ,·erdadt.• altt:rar a lahda
exi~tentc. ~la'> para (';ver Í'>'O, iremos empn.·-.tar o comando
,\LTER e alguma' dt· '>llil'> pala,ras-chaw do Capitulo .i.

'onando uma CHAVE PRIMÁRIA a uma tabela existente


FIJt.SrJ,) •., s.,lhvcrt
roch~o para adióonar uma dta\'C' primária AUTO_ INCREMENT p;lra a tabela
pcrc lc~tr c.,,.. 3vt c ;,.,vc
,elo Grcg.
c"'":• S!jc • prt-...ti'rc ;,c lls-/-c.
I I
A-&11,- ts.ft o cotlt'o fCI'C Ílt t "f>Cto;,ci.J -..s ; v-.. J.,c
lt3tll' u+: ;,.,ss., ;,.,y., c.,,...,,/., ctltcto,al' I ,.,v• c4111,1 -..;rt~c lit ,.,S'trlr svc cJ.cvt
{ ~l...) ltt..ri~t. ~ -/-a!ltla. Partct la,.,·JtarJ ,,.,.....,.,.. t ... ,,.,.....(,.1"4.

lllriliiD
p~ TABLE meus_con t a t os ,;,.,? ~ ~
.....
ti COLUMN id_conta to INT NOT NULL AUTO INCREMENT ._____~_
JID PRIMARY KEY ( id_conta to) ; )

A) . Voe( tltvt I'(C4,I.tctl' C fl;,l.a t.llt c-/-rl;tll


1!111 I
W&.U.tf. ltSjllsra...t,h ., &llt tlc 1
a cl.avt fl'l-...ar•-..
°
1
IJ• u~r ~~~ ct~lv;,c •' 1-dtla t ;r4~t~tc-/c
IN 1/_c .,./-,ili,

·~ P~DERDO
iX:f cEREBRO
Você acha que com isso os valores serão adicionados à nova coluna para aqueles registros que já se
encontram na tabela ou somente para os próximos registros inseridos? Como você pode checar?

voce esta aqUI • 155


Use a Cabeça SQL

ALTER TABLE e adicionar uma PRIMARY KEY


Tl·ntc: o dxli~o 'on:· llll''mo. \lu a -.c:u tc:rmin<tl "lQI.. l ·-.c o h;ull'<> de: dadw.
gregs_list c: di!,ríte o <·om;uulo:

Is+D ,(t~ 3llt


fDt c,(tcl'IJ,c.tc c

P;mt n : r o qm· aconteceu com 'ua tabl'la. ll'llll' o


wnnmdo SELECT * from meus_contatos;

~r llhliJ«r,.,tJs
tturo _IAJC/t.U-tWt;
c ctJfll'l« /tJt prtt'lcl.t.tc
l
cs st"" 3llt cc.tc
rt5's-/-ro ,. -1-dtlc /tJt
c-1-vcltJ«.lo,
L.t,.,flrrstJ tsff ,;,,
1,.,., ,(c -/-dtt•; br(J
11,.,c por5'i.o Jt t•,hk

Greg conseguirá inserir sua coluna de telefone?\Vá para o capítulo 5 para descobrir.

156 Cap1tulo 4
projeto de tabela inteligente

Sua caixa de ferramenta SQL


Você já tem o capítulo 4 na palma
da mão. Olhe para todas as novas
ferramentas que adicionou para sua
caixa de ferramentas agora! Para uma
lista completa de dicas de ferramentas,
veja o Apêndice iii.

DADOS ATÔMICOS

Os J•J•s '"' sv• .fdtl• sê• •+~c•s st tlts


ts.fê. JlvfJlJ•s •Jt •s "'t"•~s f't.l•j•s avt
..
v•ct /'rtc,"sa.

PRIMARY KEY

v... co/11'1. 1111 11"' c•'!jll..,;.. tlt collllt.S avt


ltlt,j,·l,c• ~~- ,,.,!.• tlt tl•ti.s ,. sv• .f•lltl• tlt
1.,.... :,,••.
AUTO INCREMENT

~~~•""" v.f.'ll~•tl• ..,. tl<f'rtssi• ti• sv• ct>lv,•


•avtl• '"'v"• tl•r: •v+•-.f.'c.,.t...h 11"' v•l•r
,~,.,.. c•tl• ~~~ 311t v"' ,.,..,"" IAJSf.ICr;.,·
tl<tcvhti•.

você esta aqui 11> 157


Use a Cabeça SQL

Ar9m~s~u Iár'ls ----------------------------------------~ 5


Soluç-ão Vamos tornar a tabela de palhaços mais atômica, assumindo que você precisa
pesquisar seus dados entre as colunas a parê nc i a e a t 1 v idades, como também
da râg'lna 113 na coluna vi sto u lt i me, escreva algumas escolhas melhores para colunas.

.... /_ ,
P.n. .for,•r ts-f• .fdtl« • .f(;,.,,.c•J voct ~r• &"t ptj«r
• Cltlu ,.,,5/.fr"pi«S • .fr-vM«tlts t"" coiCI,«S stp«r«tl«S t
•!Citlu ,.,,5/.fr"pi«S «p«r'i,cl«S «prtst,-1-•J• s stp•r•J•""t,- h.

Po,-1-os tlri-ru st voe( &Cii'str stp«r«r •


cole~,• loc•l t"" t'ftltrtjOJ cti/«tlt t ts-f«tlo.

158 Capitulo 4
SALTEI\

-+
m

-+
*Reescrevendo o Passado

Você gostaria corrigir os erros do seu passado? Bem, agora é sua chance. Apenas usando
ocomando ALTER, você pode aplicar a todas as lições que tem aprendido sobre as tabelas que criou há dias,
meses e até anos atrás. Melhor ainda, você pode fazer isso sem alterar seus dados. No momento que tiver
passado por aqui, você saberá o que o normal realmente significa, e estará apto a aplicar isso em todas as suas
tabelas, passadas ou presentes.

este é um novo capítulo 159


Use a Cabeça SQL

Nós precisamos fazer algumas mudanças


(,n·~ ~mtana de liver mai'
ah,'ltma\ altcraçôc' em 'ua
tilhda. ma~ ele nào quer
pt'l der nenhum dado.

Sim, você pode utilizar ALTER


TABLE para adicioná-la facilmente.
:'\a verdack, 11<>'• achamo' que de,·eria ~e arn,cal
a IY.ê-la, j:í qut• \ocê j;í deu uma olhada 110
com;mdo ALTER. Fa~·a o próximo exercício
p;u·a obter ~l'u código.

Olhe bem de perto para o comando ALTER TABLE que utilizamos para adicionar a
da chave primária no capítulo 4, e veja se consegue elaborar seu próprio código pari
adicionar uma coluna para número de telefone que possa comportar 10 dígitos.
que você não precisará utilizar todas as palavras-chave no seu novo comando.

ALTER TABLE meus contatos


ADD COLUMN id contato INT NOT NULL AUTO INCREMENT FIRST ,
ADD PRIMARY KEY ( id_conta to) ;

Escreva seu comando ALTER TABLE aqui:

Você pode ainda dizer ao software onde colocar a coluna telefone com a palavra-chave AFTER. Veja se consegue
pensar sobre onde colocar a palavra-chave para ADD (adicionar) a nova coluna logo após a coluna primeiro_nome.

Escreva seu novo comando ALTER TABLE aqui:

160 Cap1tulo 5
A LTER

~9m~seu láp1s-----------------------------------------------------
" Olhe bem de perto para o comando ALTER TABLE que utilizamos para adicionar a coluna
S9luçã.9 da chave primária no capítulo 4, e veja se consegue elaborar seu próprio código para
adicionar uma coluna para número de telefone que possa comportar 1O dígitos. Observe
que você não precisará utilizar todas as palavras-chave no seu novo comando.

~~RTABLE meus contatos


~DCOLUMN id contato INT NOT NULL AUTO INCREMENT FIRST ,

~D PRIMARY KEY (id_contato);


J
Elcreva seu comando A LTER TABLE aqui:

ioeepodeainda dizer ao software onde colocar a coluna telefone com a palavra-chave AFTER. Veja se consegue
pe~sarsobre onde colocar a palavra-chave para ADD (adicionar) a nova coluna logo após a coluna primeiro_nome.
una
ooeva seu novo comando ALTER TABLE aqui:

.................~~:._~~ t~l!~':-:.~ .~~'!.~....~~'!.f.~f~.s................................ .


/fbb COLvMAJ -htttl6itf! V/}Jt.C#/}Jt. (/())·
..........................................................................~......... ......... .

..............f!~~~~!'.:.~--:.~~~.~:-:it~~f!;, ...................... . .............. . .... ..


')~
/t pi.II.Vrt·cl.tvf! AF'íí/t. (4p;s) Sf!jlltill. 116
114-'lt Jl. Ctll/1,1. 31/f! 31/f!r 31/f! S!jl. Sl/1. it6VI.
C~IVIII., Í/1. Ct116CI. 1. c6t11,1. ff/f!l6 ,f! /6! 6 4p:S I.
CIJIVIII. f1'llllf!ll'6 _ 11t111lf!,

Você viu que pode utilizar as palavras-chave FIRST


f<;>t Dettás
(primeiro) e AFTER (após) sua_ coluna, mas pode
também utilizar BEFORE (antes) sua_ coluna e LAST (por das Cenas
último), e também SECOND (segundo), e THIRD (terceiro),
e você entendeu a idéia.

você está aqui • 161


Use a Cabeça SQL

,
imã de Geladelta - falav'tas-Cbav'e de SQL
Utilize os lmãs abaixo para alterar a posição da coluna telefone que foi
adicionada. Crie quantos comandos puder, depois rascunhe nas colunas após
ter executado o comando.

sobrenome primeJ.ro nome AL


ADD

ALTER TABLE meus contato s


ADD COLUMN telefon e VARCHAR(lO)

prime1ro nome ema1l telefone ADIJ

AL'l
ALTER TABLE meus contato s
ADI
ADD COLUMN telefon e VARCHAR(lO)

AL
telefone sobrenome pr1me1ro nome
ADI

ALTER TABLE meus contato s


ADD COLUMN telefon e VARCHAR(lO)
AL
prirne1.ro Pome ernall ADJ
sobrenome telefone

AL
ALTER TABLE meus contato s ADJ
ADD COLUMN telefon e VARCHAR(lO)

\
A'Jtcto'f( •s FIRST GobrenomiJ [ LAST J
t•'•Vf••s-cl.• ve u
11-,•1 tio co/IIIA'ftlo. AL'
[sEco~ [ AnER] BEFORE
r AD

tJse o fo,rl-o-~V:I"jll~• 3v•,rl-u


_/7 o [ FIFTa_]

V~tS •cl.•r 'ftC(SS.I"IO,

162 Capitulo 5
ALTER

Imã de Gelade1ta - falavtas-Chave de So_L


Utilize os ímãs abaixo para alterar a posição da coluna telefone que foi
adicionada. Crie quantos comandos puder, depois rascunhe nas colunas após
ter executado o comando.

ALTER TABLE meus conta tos


ADD COLUMN telefone VARCHAR(lO) I FIRST lO y-- FI/t.Sr(pr,.,t,.r~ ctJIIJc•
a ctJitma -httltJI7t! •,-1-ts tlt!
.C .ftJtlts u 1Jt1.fru ctJiti171.S•
1d contato sobrenome primeiro_ nome email

ALTER TABLE meus conta tos


ADD COLUMN telefone VARCHAR(lO)(~TJ o
ALTER TABLE meus conta tos
ADD COLUMN telefone VARCHAR(lO) [FIFTaJO

sobrenome primeiro_nome email telefone

ALTER TABLE meus conta tos


ADD COLUMN telefone VARCHAR(lO)[sEcoNDJ o Sf.CO/Jb Út!Jt117tl~ ctJitJc• •
i-
CIJit/17• .ftttftJift! t!~ St!Jt117ti1JJ
ALTER TABLE meus contatos ~ 1J ~ts~IJ I•~ $f.FO/t.f.
<•,-1-ts) <st v+rtr~:-IIJ ctJ~ •
ADD COLUMN telefone VARCHAR(lO) CIJit/17. S1Jbl't!171J~(!),

~[S-obr-en-om-~---.--1 _t----.----~-----, /
-'BE_FO_RE_I -;
te l efone primeiro nome email

ALTER TABLE meus_conta tos AFrf./t. ,.,.:s) sdrt171J~t! ciJttJ3vt • ctJitl17•


ADD COLUMN telefone VARCHAR ( 1 O) -htti1J17t!. St VIJc~ ·hvust ~~~ :~1. ciJI7-hl7tiiJ •
~ palavr• rHI/t.b tlt! -hrta ltt.fiJ • ~t!S~· CIJts•.
Q!:rER] Gobreno~ ~ J

sobrenome primeiro nome email

você esta aqui .,_ 163


Use a Cabeça SQL

Alterações de tabelas Reconst


(~ _cot~l<llld~> ALTER penniu:_qu<.· ahn<.· tudo na ~ua tabela ~em prt·ci~;11 '\) IIO'i l Olllt'l;•

r~ lll'ltll 'lus dado~. ~~a~ nudado, ~e altcrm o~ tipo~ de dado~ ck ullla hc. lt q liC (>ll'
c-oluna para outro tipo, e~tar<Í Sl' an i'cmlclo a perder sem. claclm.

~ J.t. colll
Alteraçõe s Dataville I.'S ,.~,. so•
Wrk....
NOSSOS SERVIÇOS PARA TABELAS EXISTENTES:

CHANGE (rnwlar) o nome tos tipm ck dados dl· uma colunaj;, t'\Ístcllll' •
MODIFY (modificar) os tipos de dados e a posição de uma coluna
existente •

ADD (adicionar) uma coluna a sua tabela- você


escolhe os tipos de dados

DROP (eliminar) uma coluna da sua tabela •


\ amos uttll/.t
• Perda de dados pode ocorrer, não oferecemos garantia. ohma st•ndo

SERVIÇOS ADICIONAIS

Reorganize suas colunas


(somente disponível ao usar ADD) .

·~ P~DERDO Renom~
'tX( CEREBRO A tAthtl.t tl'm
Ulll.l IJ, t,l d l·
Por que esta tabela poderia
Ulllu. u o AL
precisar de alterações? pro jetus
ncmero empr· 1 r:,. jeto
pintar exterior da casa\ Murphy
2 remodelar a cozinha Valdez
3 instalação de piso de madeira Keller
4 fazer o telhado Jackson

164 Capttulo 5
A LTER

ção total de tabelas Bem-vindo


f\ U JIO\>il\ altl'l<I~'ÔC~ ('0111 lllll<l à Reconstrução Total de Tabelas! Nas
r rtl'' ele altcra~·õcs m<~ÍOll'\. próximas páginas iremos pegar uma tabela toda
desarrumada e transformá-la em uma tabela que
todo banco de dados teria orgulho em tê-la.
f.s-1-t ,';~~ 'IIIS .ll} 11 svliclt,.h
SIIJI't ti Jtlt ts-1-c Ctllti'IC Jtvt
Ctl,_hl',

projetus

empr.- ; · "l1eto
_-:::~
' ' "'
1 pintor exterior do coso Murphy
2 remodelo r o cozinho Voldez
3 instoloção de piso de madeiro Keller
4 fozer o telhado Jockson

f.,3vc,./-11 11 'lll~t~t .te .fdtlc t tiS


N I"'
.tcs ct~ltl,«s '1«11 ts-ru ;ti,SJ tiS
.tctlt~s ,._ .fdtlc s'i11 v:lltlt~s t ,:s
JIIS.fcr:C.t\IIS Jt .t\C,;.;-ItiS,

owmando DESCRI SE par~t H'rilicar como t'\la tahda (''ta romtnrída. Ele nm mmua \l' h;í al~uma
a rhaH' primária l' quar' O\ tipo~ ele dado~ ~enclo Íll\l'l ido' l'lll cada coluna.

ltnomeando a tabela
mahnm' probbna' l'l11 sua \Ítua~·ào atual, mas graças ao ALTER, nó'> a faremos aclrquacla para conter
dr pmil'tO' para melhoria ele ntsas, necess{u·ias para uma casa l'l11 pa1iicular. ~o~so plll11l'IIO pa,,o '>tTá
' ER TABLE e dar p;ua a nm... a tabela um nome sÍI.,'lliliratÍ\'0.

ALTER TABLE projetus


RENAME TO lista_projetos;
---v----- '\.._
ll's.fcJ>l'~fflls '11 l'lt1Vt1 l'lll.t~t J"t
ts.f.• .t~IIS tl•'lt/6 p•r• ,IISSC .f.dtl•.

você esta aqui 11> 165


Use a Cabeça SQL

ós prec
Esta descrição vai ajudá-lo a entender como precisa alterar a tabela.
Encontre as colunas nesta expressão que descreva como iremos
utilizar nossa tabela, aí então preencha os nomes das colunas .

id_proj

Para tornar nossa tabela NORMAL, adicionaremos


também uma chave primária com um número de projeto
único para ele. Depois, precisaremos de colunas para
descrever cada melhoramento, a data de início, custo
estimado e o nome da companhia empreiteira contratada,
bem como seu número de telefone.

Reinstr

Esta descrição vai ajudá-lo a entender como precisa alterar a tabela.


Encontre as colunas nesta expressão que descreva como iremos
utilizar nossa tabela, aí então preencha os nomes das colunas .

Exerc.í cios
J tU IIU!'> 1\l' l\:<l
ln·c

j
data inicio

custo est

empresa fone I
empresa_nome

166 Capttulo 5
ALTER

,recisamos fazer alguns planejamentos


listayrojetos

numero descricaodoprojeto empreiteirodoprojeto


l pinto r exterior do coso Murphy
2 remodelar o cozinho Voldez
3 instala ção de piso de madeiro Keller
4 fazer o telhado Jockson

~ P~DERDO
lt' o> dado> para o·ês das nossas novas colunas já '-fXr' cEREBRO
.\o mrés de criarmos todas as novas colunas,
, - ~NA.Io1E (renomear) nossas colunas existentes. Qual coluna existente pode ser uma boa
nla1. que contêm dado~ válidos, nós não candidata a nossa chave primária?
· ~- U11erir os dados para as novas colunas,

ltinstrumental izando nossas coi unas


mo1um plano inicial c podemos ALTER (altera.. -) as colunas já na nossa
11Ur 1c encaixem com três dos nossos nm·os nomes de coluna~:

l>t numero é a nos~a chave primária: idyroj


~ escricaodoproj e to é uma descrição de cada projeto de
mdhornmento da casa: descricaoyroj

~ ~preiteirodoproj e to é o nome da empresa contJ·atada ou


empresa_nome para abreviar.

dmacom as o·ês colunas custo_est, empresa_fone e


HlCio a 1crem adicionadas.

listayr~

numero descricaodoprojeto emprelteirodoproJeto

s-1-· \(
r~. t/a
v
listayrojetos

id proj descricao_proj empresa nome

você está aqui • 167


Use a Cabeça SQL

Mudanças estruturais
'-w.., <kcidimo~ utilit.ar coluna~ t' \1\lcnte~ p;u-a trê~ de no!>\a\ coluna\
nt•rc\\{uia.... . \lém de !>implc..,mt'lllc alterar nomes, de\'críamm dar uma
olhada de perto nos tipo!> dt· dado!> que cada uma dc!>sil\ coluna' annat.cna.

,\qui e\tá a clc~('rição que olh;uno' anteriormente.

Fole Ed ot Wondow Help BadTableDesogn

> DESCRIBE projetus


+----------------------+-------------+------+-----+---------+-------+
IField Type INull Key DefaultI Extra I I I I

+----------------------+-------------+------+----- +---------+-------+
numero int(ll) YES NULL
I descricaodoprojeto I varchar(SO) I YES I NULL
I empreiteirodoprojeto I varchar(lO) I YES 1 NULL
+----------------------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

Hascalação
cerebral

Olhe para cada uma das colunas TYPE e decida se os tipos de dados atuais estão
adequados para os dados que iremos inserir nesta tabela.

ALTER e CHANGE
Par<~ o no\\O próximo pa..,..,o, altcrarcmo.., a coluna numt:ro para tt'l
um no\o nome, i d _pro j c defini-la wmo AUTO_ INCREMENT.
Dt·poi.., in.:mm torná-la no..,..,a chaH· primária. 1\m~cc complicado, nnl\
de i<llo não é. Na verdade, ,·ocê liu-:'1 tudo isso em um só comando:

bts-1-• vt~ ts-l-4..~s 11 -!-l"!t~4 ,110


CftAJ&í COt_uA-tAlj: 311t
t •~s 4/~r•,J~ ~ "~"'t t fo,;,J• ts-1-• ..~s t~-1-r'lt}•"J~ •
~s 1-r;~s Jt J•J~s li• c~111, 4 ..u-.. -1-dti•J "'u lt"'~"'~stJ
.~,.,-~,."'t~ c~,l.tcll/4 '~"'~ j:
,:s Jt"'~s ti"' "~v~ "41"'t
1
" "'tr~.
11
p•r• ti•. '"~~..f"'~ t ~ "~v~ "~"'t prtt,cl.ti/4 ,.,.. v4141'fS
) 3t1t 3t1trt-..ss 3t1t Jo -1-rpo 411-l-o_,;,crtlllt,f!
li ,oss• coltl'14 +t,t.•... / v41orts Alu(_(_
ALTER TABLE lista_projetos ~ ~ ·
CHANGE COLUMN numero id_proj INT NOT NULL AUTO
ADD PRIMARY KEY ( 'id_proj ' ) ;

~ A-3tlt ts-1-:. ,.,.~


S,~... ~(_
3tlt Jt}
f41'4 tl$.1' colt/,4 4
40 ,osso
CO"'
o ,ovo "o"'( til_fi'~ co"'o 4 ci.4V(
,,.,..,.,.,....
I

168 Cap itulo 5


ALTER

Rascunhe como a tabela ficará depois de você ter executado o comando acima.


00
........

re duas colunas com apenas um comando SQL


tr.lfuào uma, m;u, duas colunas com apenas um comando. Nós alteraremos os nomes da:, colunas ch amada~ de
aoprojeto c emprei teirodoproj e to, c ao mt•smo te mpo i remo~ alterar os tipo~ de dado~. Tudo
\ as linha.~ CHANGE COLUMN em apt·nas um <:omando ALTER TABLE c colocar uma
SI!Un> tàl.er é incluir amh;L

I
is.fl.lf\4S l.tlll\tl1+•11tl4 4 111111\tN
tltscrlcl.4..J>I'~ ~ 4 tlt c•nc.ftru p•r• 311t f4SSI.If\4S
114V4 11411\t t/1. C41tl111.. .ftr tlucrt{;u 11\l.t"s l411,u.

ALTER TABLE lista_yrojetos !


f&H.GE COLUMN descricaodoprojeto descricao_yroj VARCHAR{lOO) ,
plNGE empreiteirodoprojeto empresa_nome VARCHAR(30);
T'
() 411+1'4 l!éllf\t 1.11.f,'j4 t/1. C4flllll.
t )'
: t"'frtt.fti'rtJtl4fl'"jff4J &llt •• .p•r,• t"'frts•_11411\t t •&til
ts.ftl. Sttl 11é1V4 .ft'p4 tlt tll.ti4S,
.f."'j:"' str~ «1-hr•tl4 ...

Se você alterar o tipo de dados para algo novo, poderá perder seus dados.

Se os tipos de dados que você está alterando não forem compatíveis com os tipos de dados
Veja Isto! antigos, seu comando não será considerado, e seu Sistema SQL irá dizer que tem um erro no
seu comando.

Mas a pior notícia é se elas são de tipos compatíveis, seus dados poderão ficar truncados.

Por exemplo: ir de varchar (1 O) para char(1) seus dados serão alterados de 'Bonzo' para apenas 'B'

Amesma regra se aplica aos tipos numéricos. Você pode alterar de um tipo para outro, mas seus dados serão
convertidos para o novo tipo, e poderá perder parte de seus dados!

você está aqui ~ 169


Use a Cabeça SQL

Quero alterar o tipo de dados de uma coluna, por


exemplo, para armazenar tais caracteres, mas quero que o
nome continue o mesmo. Posso repetir o nome da coluna, certo?
Desta forma:
ALTER TABLE mtnhaTabela
o CHANGE COLUMN minhaColuna minhaColura
TIPODEDADOS ;

Com certeza isso funcionaria, mas há um jeito


mais simples.
Você pode utili1.m· a palavra-chan· MODIFY. Ela altera somente
os tipos de dado~ de uma coluna L' <ki:\a o nome inahcrado.
Por exemplo, :.uponha que prcci:.<.' <k uma roluua mai~ longa
p;u·a armucnar os dados da coluna dt:~CI icao_proj. Vorê quer
que seja VARCJIAR (120). Aqui cMá o qut• prcci~a t;v.cr.

ALTER TABLE lista_projetos


MODIFY COLUMN descricao_proj VARCHAR (120) ;
tJ..,O...tJ. /
'\
s.f.. " COIC/..,. 6C/t () ,ovo -h; o J.t J.•J.os. "\
t ""'os "'olilf:,c,..,Jo.
Í clero 3C/t voct ctrir"lic~
"10VO .j-,f6 J.t J.•J.IlS 11i.6 VI
StC/S J.cJ.t>S clf.l7'fllSf

não ex'i:Jtem •
fetguntas Id'i9tél.s

f : E se eu quiser alterar a ordem das colunas? Posso f :Mas isso não vai set' um problema se as colunas estão éll!11él2lNII
simplesmente utilizar: ALTER TABLE MODI FY COLUMN em uma ordem errada?
descricao_proj AFTER nome_empresa;
R..:Não, porque. felizmente. nas suas consultas SELECT, vod~
R..: Você não pode, na verdade, alterar a ordem das colunas especificar a ordem em que suas colunas serão exibidas noreS!l
depo1s de cnadas. O melhor que pode fazer é adicionar uma coluna da consulta. Nllo importa a ordem que os dados sejam ami<IL<=''o:.o;•
na pos1ção que desejar e eliminar a outra, mas irá perder todos os no seu disco, já que você pode utilizar:
dados da coluna antiga.
SELECT co~una3 , co~unal FROM
ou:
SELEI~ und , c luna3 FROM
ou em qualquer ordem que desejar

170 Capttulo 5
A LTER

Hei! Estou no telefone


com meu agente. Vá indo listayrojetos
em frente e adicione
aquelas colunas restantes, id_proj descricao_proj nome_empresa
você pode não é?
1
2
3

Precisamos de qualquer forma adicionar mais três colunas:


telefone, data de início e custo estimado.
Escreva um comando ALTER TABLE simples abaixo,
certificando-se de prestar atenção nos tipos de dados. Daí ,
complete a tabela abaixo.

listayrojetos

você está aqui 11> 171


Use a Cabeça SQL

listayrojetos
Hei! Estou no telefone
com meu agente. Vá indo
id_proi descricoo_pro i nome_empresa
em frente e adicione
1
Exercícios o aquelas colunas restantes,
você pode não é? 2
o
3

Precisamos de qualquer forma adicionar mais três colunas:


t elefone, data de início e custo estimado.
Escreva um comando ALTER TABLE simples abaixo,
certificando-se de prestar atenção nos tipos de dados. Daí,
complete a tabela abaixo.
u.. VA~CIIA~ tlt /()
cc~.,s ptr~~
<ttlié . , lllt 1/0(t
At-r!~ rA~L! -l-dttc 1 r~t-/-., '"~" c"Jtj., "• ~..

_,?> Abb C()t_u~AJ tlto!prts•- l"ltf! V/1-JtCIJ/1-Jt.(/ ~Lt..in.-st tl.os


0)J
II.S11l
f.s-1-c ...,s ctl.id'o"""tl."
170V•s C4fii17CSJ t,.j:;,., ~ Abb C()t_u~AJ tlch ,.,,.c,..., bAr! cclto!fos bf.C? AJ:s Jt!
- J
ts-1-c ..<JS t~-1-ill~c"tl." " ~ ts-1-• c.,/v"•l'•r• Jllf 1
C41f0t..,J., Abb. ~ Abb C()t_u~AJ c11s-l-" _ts-1- b!CI~AU7J2J~ ,t5..tro ;,.hiro -h~
ccr•chrts t d 1.•
listayrojetos 2 CUC$ t/.tcllfOI.•I'J,

Rápido I largue esta coluna!


Paa tudo!
\< ahamo' d1. de~cobrir que no,-.m prqjeto-. foram colocado' l'lll l''IK'l a.
Comt·qiK·ntemente, podemo.. di minar a coluna da ta_ in i cio. :'\ào há r;vào
1.'111 In tmw t·olnna de::.nt·ce~';u ia t•nco,tacla c ocupaJlC!o e~paço no banco de
chu lo~.

L nma boa prática ele prol{ntmaçfto In apcna~ a:, coluwt' qm· pttTi-.a na tabela.
)t 11.1o l''ll' l'l ulili1.ando uma coluna. dnninc-a. Com ALTER. 'orl' pode
lanlnwnte adicioná-la de \olta. ca'o prcri-.t• dela no futuro.
(Juanto ma i-. rol unas tenha. ma1-. o wu SI,It•ma SQI. tt·m C(lll' 11 ah;tlh;u. c mai'
t·,p;l~·o 'l'll h;mco' de dado' ';i o <x·upar. Lnquanto pode não JX'l n·ht·l j,to com
uma pt·quuJa tabela. quando ela Cll''cei, ,·ocê \'Crá rc,ultado' m;u, knto,, c o
p1 on·"adm ele 1>Cll computador lt'l a que trabalhar tão duro quanto.

172 Capttulo 5
ALTER

Pra falar a verdade, vai em frente e escreva seu comando SQL para eliminar a
coluna data_inicio. Ainda não lhe mostramos a sintaxe para fazê -la ainda, mas
faça uma tentativa.

~c;
••• ~Âp<mteseu 1á..t:>1s - - - - - - - - - - - - - - - - - - - - - - - - .
Pra falar a verdade, vai em frente e escreva seu comando SQL para eliminar a
SSt>S S9lu'(â9 coluna data_inicio. Ainda não lhe mostramos a sintaxe para fazê-la ainda, mas
~~~,..,,.,_s faça uma tentativa.

~~~"
,~.••;.: 7
~,-.f"s •+f

Depois de ter eliminado uma coluna, tudo o que


estava armazenado será removido também!

Veja Isto! Use o comando DROP COLUMN cautelosamente.


Primeiro deve utilizar o comando SELECT a partir
daquela coluna que pretende eliminar para ter certeza
absoluta que é isso que quer! É melhor ter dados extras na sua tabela
do que depois faltar dados vitais na sua tabela.

voe,$ está aaui • 173


Use a Cabeça SQL

É simples. Pegue esta tabela patéttca de ·antes" com dados de carros usados
e use o ALTER naquela fantástica , brilhosa tabela de "depois". Parte da
dificuldade é não perturbar quaisquer dos dados na tabela, mas trabalhar ao
redor deles. Você está apto ao desafio?
Pontos de bônus se conseguir fazer tudo isso com apenas um comando ALTER.

usado
c. . r ' . t:' d . ' · IE ...,
pro to 1998 Porsche Boxter 17992.540
NULL 2000 Jaguar XJ 15995
vermelho 2002 Codilloc Escolode 40215.9

tabela carro
-l.Or r ....... . co~

1 RNKLK66N33G213481 Porsche Boxter prato 1998 17992.54


2 SAEDA44B175B04113 Jaguar XJ NULL 2000 15995.00
3 3GYEK63NT2G280668 Codillac Escalada vermelho 2002 40215.90

174 Capitulo 5
ALTER

E s~s Pegue esta tabela patética de "antes" com dados de carros usados e use o
naquela fantástica. brilhosa tabela de "depois". Parte da dificuldade é não perturbar
uerdos dados na tabela, mas trabalhar ao redor deles. Você está apto ao desafio?
os de bônus se conseguir fazer tudo isso com apenas um comando ALTER.

t !br: • u te mod
1998 Porsche Boxter 17992.540

NULL 2000 Jaguar XJ 15995

~ho 2002 Cadillac Escalade 40215.9

tabe la c a rro
r< de>lc co n
· ,t;cic. n- •

RNKLK66N33G213481 Porsche Boxter prato 1998 17992.54

Jaguar XJ N ULL 2000 15995.00


SAEDA448175B04113
Codilloc Escolode vermelho 2002 40215 90
3GYEK63NT2G280668

ALTER TABLE usado


RENAME TO tabela_carro,
ALTER TABLE tabela_carro
ADD COLUMN carro_id INT NOT NULL AUTO INCREMENT FIRST,
ADD PRIMARY KEY (carro_id),
Vo~~ct prtclsc rt,o~~lflltCr c co/11,c cl.clfllclic
ALTER TABLE tabela_carro lflllllf pCI'C lfi\Oift/6 c,./-ts 1ft lfi\OVtl' CS
ADD COLUMN CHAST '/ARCHAR(16) SECOND , / co/1/,cscortc,o~~pcrclltpotslltlc.
CHANGE COLUMN modelo 'IARCHAR(20), ~ ... ,
MODIFY COLUMN cor AFTER modelo K__ __ K,ctj•llt vt llcr pcrc c SI/C coii/,C
' o -hpo llt llcllos.
rt,olflltcllc pcrc lfllolit/o
MODIFY COLUMN ano SIXTH, ~.tC----- ~ ~.._ I '

CHANGE COLUMN ~afordec usto ~afor DECIMAL(7,2); 'OCtpolltrtc TCifllltlfll-hr co/occlio c,o
AFrf.lllfl lolitlo o11 c,0 8f.FOilf. vclo~~r.

voce está aqut "' 175


Use a Cabeça SQL

nã9 exhiem •
fet~untas Idi9tas

f Anteriormente você disse que eu não conseguiria reordenar f· E se eu criei uma chave primária acidentalmente, e entãomw;r
minhas colunas com MODIFY. Mas as ferramentas de meu Sistema de idéia e pretender utilizar uma outra coluna? Há algum jeito 1t
SQL me permitem reordenã-las. Como ele está fazendo isso? remover a designação da chave primária sem alterar os dadoi ~
inseridos?
I\: Seu Ststema está fazendo uma porção de comandos por detrás das
cortmas. Ele está coptando os valores da coluna que você gostaria de I\:Há stm. e é bem stmples: lU, ·~·..,·
mover. salvando em uma tabela temporária, eliminando a coluna com t.s..A,,r Jl/CS'
o mesmo nome daquela de origem, alterando sua tabela e criando uma ALTER TABLE sua tabela DROP PRIMARY KEY; ~•.sp•"•
nova coluna com o mesmo nome, tal como a antiga no lugar onde você t~srs~•,.
gostana que ela estivesse, copiando todos os valores da tabela temporária f: E quanto ao AUTO_INCREMENT? l.c.t~ Jt,.,..,:
para sua nova coluna e delatando a tabela temporária.
I\: Você pode adicioná-lo a uma coluna que não tem este atriW.O i
Geralmente é melhor apenas manter a posição da coluna do jeito que seguinte forma:
está no caso delas já conterem dados inseridos e você não utilizar o
Sistema para ele fazer todos os passos por você. SELECT (selecionar) ALTER TABLE sua tabela CHANGE sua chave
suas colunas na ordem que desejar. sua_chave INT (11 ) NOT NULL AUTO INCREMEN

r.o único momento em que éfácil alterara ordem da coluna é quando estou
criando uma nova coluna?
E você pode remover assim:

ALTER TABLE sua_tabela CHANGE sua chave


I\:Correto. A melhor opção é pensar sobre a ordem no momento que sua_chave INT (ll) NOT NULL ;
você tntciar o proJeto da sua tabela
É importante manter em mente que você pode ter somente um ca::::
AUTO_INCREMENT por tabela e ele deve ser do tipo INTEGERe
pode conter dados do tipo NULL
Um olh
\ \t:/( ... , (,,

andul.1t

· Use ,..H r N::;L quando quiser alterar o nome e os tipos de • Você pode alterar a ordem das suas colunas usa""
dados de uma coluna. FIRST, LAST , BEFORE nome_coluna, AFTER o -
• Use MODI FY quando desejar alterar apenas o tipo de coluna , SECOND , THIRD , FOURT H ,et~
dados. • Com alguns sistemas SQL você pode alterar a order
• DROP COLUMN tem apenas esta função: eliminar a coluna das colunas, apenas quando as insere na tabela.
selecionada da tabela.
• Use RENAME para alterar o nome da sua tabela.

ALTER TABLE pode ajudâ·lo a alterar seu projeto de tabela


,\o uúJi/_.-u· .\LTERT.\Bl.I:-:junto wm SELH.T t ' l ' PD.\TE. podemos pegar htesd
coluna.'> de dado... c~tranha ... c nà<}-atômica'> t ' n.·tina-la ... a coluna.'> atômiGIS precisa'
l:: tudo uma questào dt" combinar commtdm SQL que nx·r já aprendeu. nas
fonmL'> correta-..
depois
\';uuo~dar uma olhada no comando nn:xn: T .\BU·. p<utt a tabda meu~_ do esta
contatos de C reg. doada
cidade

176 Capitulo 5
ALTER

CREATE TABLE meus contato s


(
~o mudar
1 jeito
jados ali
de
r id contato INT NOT NULL AUTO_INCREMENTf
sobreno me VARCHAR (30) defaul t NULL,
primeir o_nome VARCHAR (20) defaul t NULLf
email VARCHAR(SO) defaul t NULLf
sexo CHAR(l) defaul t NULL
anivers ario DATE defaul t NULLf
profiss ao VARCHAR(SO) defaul t NULLf
ributo, da local VARCHAR (50) defaul t NULL <!-<:"--- - ts-1--u t,t~•-1-rt~ ct~lv~tcs
f

estado_ civil VARCHAR(20) defaul t NULL ~,.-- ~tit~sit~ ..vi-l-ll•-1-~;cu


interes ses VARCHAR(lOO) defaul t NULLf ç-- (flltltric .. vs•r•;vlfs
EN ~vs-hs /(i-1-t~s p(lt~
procura VARCHAR ( 1 OO) de f a ul t NULL < -- l}t_rf.Jt ri}6L.f.. f

PRIMARY KEY {id_con tato)


)

campo
ER e não I• ol~ar de perto para a coluna não-atômica "local"
Gl~ qm r ,,ll>t:r ap~na'> o l''Lado ou c·idadc dt· ah,'ltl'lll, ~ntào a coluna l c a 1 é um.1
a a 'ri (h\1clida t'lll dua'> roluna,. \ 'amo' \t'l romo o' dado' na' rolun;t' l''>Lào:

1sando
nome

o rdem

)
( '''''""'"" '"
Jatlos tlc c61111fC
4tal tlc -1-dtlc
~t~tvs_e~,lf-l-c-1-t~s .

• Estes dados estão consisten temente Muscula~ão


~.
tonnatados. Primeiro vem o nome cczrczbral
a cidade, seguido de uma vírgula e
..,is a abreviação de duas letras Por que nós queremos separar a cidade do estado?
• estado. Devido à consistên cia O que acha que faremos depois?
a dados, poderemos separar as
cidades dos estados.

você está aqui 1> 177 j


Use a Cabeça SQL

Procure por padrões Para se


Cada coluna "local" na tabela meus contatos segue os mc~mo~ padrôcs: o111e da cidade,
~cguida de uma vírgula c então a abre,1ação de dua:. let.ras do c:,tado, ou l lnidacle Fcderati,·a (UF).
O fato <k ela ~e r comi!.tente e :,cguir um padrão nos <ymhu·á a di,1di-la para que fique m<Ú:. alômica.

Podemo:. pega.r tudo aquilo que está antes da vírgula e E podemos pegar os doi~ últimm caractere~ da colw1
n>l<>nlr em uma coluna contendo nomes das cidades . e colocá-los em uma nm·a coluna chamada estadc.

Nome da Cidade
r ...i ,:s prect"sc;6s tle ""'4 lv,1';6 3fJt! t'r:
Precls•lfi6S tle ""'• lv115'i6
pe5cr 6S li6t"s vl-h.,6s c•rcc-hres.
3"e 116S ft!"t"'l-1-c ft!5cr -l-vtl6
c~s tl• Vtr5vlc ..•

Escreva um comando ALTER TABLE que adiciona


as colunas cidade e estado para meus_contatos.

~\Z">~-tlltv "l'•ts~ rv'Ytn70v (j(j-fl


r(05">~-t/fp~-f/11 ~I'•I'P (V'Ytn7Qv (j(j-fl
Sf1f•f"9:J-Sti~WI J79-f/..J.. ~J..J.-7-f/

Algumas funções de texto muito úteis


Loc<lii;.;mlo:, doi~ padrôc~ muito importante~. Agora precisamos agarrar a abreviação do estado c adicioná-la em
uma nova colum1 estado. Pn::ci~amos também de llido que es1eja ;mies da vírgula p;u·a uma coluna cidade.
Depoi~ de criarmos nossa.\ duas colunas, agora como extTair os valores que precisávamos:

SELECT (selecionar) nossos dois últimos caracteres


l f~c RIGHT Oe LEFT () para selecionar uma quanlidade e~pedfica de caracteres de uma coluna.

SELECT RIGHT(local, 2) FROM meus contatos;


/'
C61f\ece tf6 14#16 Jirel:l-6 lic
,\ ~
f.s+• e • C6IV11• 4 is+c t • 3"•,-hil•tlt Je c•nc-hres • sertlfl
c61fJ,. (v6ct f6tle v-h1l}cr ser v-1-itl}•J•. seleciiJ,4II6s li6 lctl6 tllret"-1-6 lic c61v,••
LJ..F"f•r• es3verJcJ Jc
lfles"'• "'•11e,;.4.>.

178 Capitulo 5
ALTER

ulecionar tudo à frente da vírgula


7RING _INDEX O para pcg;tr pm·tc da coluna, ou
Funç-õe::> m:ting petm!tem
! 1 101lla.ndo irá ~ncontr;u tudo que t•stin·r à f r ente cil- seleci onm· pmte d9 texto
de texto e~pecHica. l :nt;.to, podc:nto~ colocar nm...a \ írh'ltla
"BSTRING_IN DEX 0 irá \t·kriouar tudo que l'..,ll\n à de umq_ coluné.t.

f f 1) FROM meus contatos ;

r
1t311t uh
~~ fs.f~ t • p•rh ctJ'T!IIS4. A311t tit~ / por311t
A}IJV4"'t,ffJ 1J I t'S/4 f1'1JCIIf'4..,tio ft'/4 prf,.ti"f'4 VII"JII/4,
4 Vlf'JII/4
..,tJ,.t' li4 ctJIII..,4,
ptl• 31141 IJ
;olu11a lo< .LI
f1'4Jr•"'• ts.f:
a do.
procllf'4..,titJ,

SQL possui uma infinidade de funções que permitem que você manipule valores de texto nas
suas tabelas. Linhas de texto são armazenadas nas colunas de texto, tipicamente dados do
tipo VARCH AR OU CHAR.
Aqui está uma lista das funções mais comuns e úteis. Tente cada uma delas por conta própria
digitando seus comandos SELECT .

St'BSTRING (sua_linha_de_ texto , posicao_de_inicio , tamanho) fornece parte da sua linha


.lexto mciando pela letra na pos.:ção_de_inicio. r amanho é o quanto do texto você quer selecionado.

SELECT SUBSTRING ( ' San Antonio , TX ', 5 , 3) i

:JPPER (sua_linha_de_texto) e LOWER (sua_linh a_de_tex to) muda tudo na sua string para
c.: xa altaou baixa, respectivamente.

SELECT UPPER( ' uSa ' );

SELECT LOWER( ' spaGHEtti ' ) ;

REVERSE (sua_linha_ de_ texto) faz justamente o que diz, ela reverte a ordem de letras na sua linha de

SELECT REVER SE ( ' SpaGHEt t i ' ) i

LTRIM (sua linha de texto) e RTRIM (sua linha de texto) retornam sua string espaços
-
u as removidos de anteS{à esquerda) ou depois (à direita) d a string.-
SELECT LTRIM ( ' comida cachorro ' ) ;

SELSC'I' RTRIM( ' comida_gata ' ) i

LENGBT (sua_linha_de_ t exto) retornam uma conta de quantos caracteres existem na sua linha de texto.

SELECT LENGTH ( ' San Antonio , TX ') i


lt :-)ijl)
~orno
st:tlnhs.- linha
IMPORTANTE: funções String não alteram os dados inseridos na sua tabela, elas
-==--
simplesmente retornam as strings alteradas como um resultado de sua consulta.

você esta aqui ,. 179


Use a Cabeça SQL

QUAl É O MEQ PROPÓSITO ?

E,t;uuo' tentando pq.;;u "' inl(mnaçô~·, contida, n;t no-.~a cohlllil lo<·al e tran-.ll.·n-fa, p;u.t duil' nm ;h
coluna-.. cidade e l''tado.
. \qw l''t;io O'> pa,..,o-. qu~· prt-ri,aremm '>L'.I{\111 para l;ver i,to. Con!lune rada pa~ ... o lll'<'l''''u io rom a
palana-chavc ou a!>t palmra'>-<'ha\'C~ que pr~·çi..,.Jmo' p;u·a conch tit aquda c lapa e111 patticnlar.

SUBSTRING_INDEX{) SELECT

1. Dê uma olhada nos dados de uma coluna em


particular para tentar encontrar um padrão.
LEFT
ADD COLUMN

2. Adicione novas colunas vazias para sua tabela.

ADJUST

RIGHT
3. Pegue parte dos dados de uma coluna de texto.

ALTER TABLE
4. Coloque os dados que pegamos no passo 3 em
DELETE uma das colunas vazias que criamos.

INSERT
UPDATE
- - Resposta na proxiu

Utili
o
o

Com que o que nós sabemos até agora, teríamos que


utilizar o comando UPDATE, em um registro de cada vez,
com o SELECT para selecionar os dados corretos.
\ la'> com SQL, podt·mo'> comlllllill rom;uHIO'>. \'qa na JliO\IIlla p;í~na como
r o locar o<, ';LIoi L''> na' 11o~..,a~ 11m a' rol una,.

180 Capitulo 5
ALTER

---- • QUAL É O M PROPÓSITO?


+

[,taJnos tentando pegar as informaçôes contidas na nossa coluna local c 11-ansfcJi-las para dua~ noYa~
rohmas, cidade e estado .
.\qui t:\tào os passos que precisaremos seguir p<mt fúer i:.to. Combine cada passo necessário com a
pala\Ta-cha,·c ou as palavras-chaYe que precisamos p<u-<t concluir aquela etapa em pruticulm·.

SUBSTRING_INDEX ()
~SELECT

1. D uma olhada nos dados de uma coluna em


par icular para tentar encontrar um padrão.
LEFT

2. dicione novas colunas vazias para sua tabela.

ADJUST
RIGHT
~egue parte dos dados de uma coluna de texto.

ALTER TABLE
4. Coloque os dados que pegamos no passo 3 em
DELETE uma das colunas vazias que criamos.

UPDATE
r INSERT

~ilize uma coluna atual para preencher uma nova coluna


da ,mla\l do comando l1PDATE? Podemos utilizá-lo para definir cada registTo na nossa tabela para
· ,mu ralor. O comando abaixo mostra a sintaxe utilizada para altera r o valor d e cad a reg istr o
•Uil coluna. Em rez de um novo valor, você pode inserir um outro valor ou outro nome de coluna.

UPDATE nome tabela CcJc rt5t'Siro t<t\ I!OSSC .fdt/c ts.f:


tltf,;,tiioJ tl<t\ Jt ccJ• Vt1p•r• tsff vcltJr,
SET nome coluna = novovalor ;

voce esta aqui~ 181


Use a Cabeça SQL

\ .uuo... <li
Para imcrir dadm para 110!-.sa-, coluna~ cidade e estado, podemo~ utilizar a função de ~tJing prillll'll a
RIGHT () de111ro do ('Omando {IPDATE. A função String pega o~ dois últimos c;u·actcres da a.nrig-.t primeira
coluna local c o' coloca em um;1 nova coluna.
IJ11.10. d
\l'/., l'IICO
qut• todo
UPDATE meus contatos lll"llhtllll I

SET estado- RIGHT(local, 2);

1
A-3'11• es-1-1 « "'"V« c"'""'•
fltl"« ..,.,sS4S i!lci!los

Ele vai funcionar sem uma cláusula


WHERE, vire a página para ver agora.

Como funciona nosso combo UPDATE e SET?


Seu Si-,tema SQL i111crpreta o cmmllldo para cada linha da tabela e por ,·ez; depoi~
ele voha ao início até que toda~ a~ ahreúações de estado~ e~tej;un divididas para a
110\'<t coluna e~tado.

meus contatos
id_c.:ontato local cidade estado ~
~------~----------------+------------r----------~ ~
Chester, NJ ~&"'' u·f«I CJ~t\t V(I'SII
2 Koty, TX Sl""fll/ic«J« Jt 114SSI'
3 Son Moteo, CA

UPDATE meus contatos


SET estado = RIGHT (local , 2);

182 Capitulo 5
ALTER

como ai(C" in~u·uçào <ulterior nesta tabela de exemplo. :-Ja


mqut a tabela é analisada, ele leva a coluna local para a .N9s p9dem9s utiliz.al·
e u;thalha ~obre da.
~unções sttlngs em
a rorTcr sobre a tabela inteira nm·amentc por uma segunda
as~im sucessiv;uncnle, alé
()(,J na 'egunda linha, atua nela, c c9nJunt9 c9m SELECl,
~'lHh rcl\:rentcs ao e~tado sejam divididos c não h;\ia mais
,tro ljllt' ~e ajuste ao COJmmdo. VfDJ\TE e DELETE.
-->? UPDATE meus_contatos p(34 (j prlll\(i"N r(j'"'s.fN , . ct~ltlllt lt~cal t
t~S ~wrrtJvra. SET estado= RIGHT('Cheste