Location via proxy:
[ UP ]
[Report a bug]
[Manage cookies]
No cookies
No scripts
No ads
No referrer
Show this form
Open navigation menu
Close suggestions
Search
Search
en
Change Language
Upload
Sign in
Sign in
Download free for days
0 ratings
0% found this document useful (0 votes)
434 views
SQL - Structured Query Language-201411041674-T2664EAD0
SQL - Structured Query Language-201411041674-T2664EAD0
Uploaded by
pauloimmanuel
Copyright
© © All Rights Reserved
Available Formats
Download as PDF or read online on Scribd
Download now
Download
Save SQL - Structured Query Language-201411041674-T2664... For Later
Download
Save
Save SQL - Structured Query Language-201411041674-T2664... For Later
0%
0% found this document useful, undefined
0%
, undefined
Embed
Share
Print
Report
0 ratings
0% found this document useful (0 votes)
434 views
SQL - Structured Query Language-201411041674-T2664EAD0
SQL - Structured Query Language-201411041674-T2664EAD0
Uploaded by
pauloimmanuel
Copyright
© © All Rights Reserved
Available Formats
Download as PDF or read online on Scribd
Download now
Download
Save SQL - Structured Query Language-201411041674-T2664... For Later
Carousel Previous
Carousel Next
Save
Save SQL - Structured Query Language-201411041674-T2664... For Later
0%
0% found this document useful, undefined
0%
, undefined
Embed
Share
Print
Report
Download now
Download
You are on page 1
/ 84
Search
Fullscreen
Estacio Y Disciplina: DESENVOLVIMENTO DE SOFTWARE Sql - Structured Query Language 6a. Edicgao/2007 Damas, Luis Capitulos Luis Damas a - Ordenasaio Ememcce ty an - Juntando Varias Tabelas - Funges de AgregacSo - Agrupando a Informagao LTC a LTC http://www. |tceditora.com.br ISBN 9788521615583Parte IT SQL & 8 2 a e 3 oe ; ¢ :. ny 4 Ri Ee 2 ae # ve ~ IZIGSILT » STOZ"PO'T = PETOOUEELSLOVE - ODEISA = FLITPOTTTOT:®INO,NEW = SAGNYNYAI OLNIVEY TANYA OMNYd:OUNIy = TZIESILT = STOZ PO'PT = PETOOUSELSLOFE = OReISA WAdod = SOpeALesey SO39UIG - ATEOSVbh4:COO = EBSSTSTZSBBLG « 217 IUBUAdOD ~ SopEniesey SoYOUIC ~ ATSOSVP4PH:C1OO ~ ERSSTOTTSBBLE ~ TU WBLAdOD - Sopenissey SO"EIG4 DIS » 17:5 04.20: to 4.08 5 - COMANDO SELECT (SELEGGES SIMPLES) SUMARIO * Apmsengin docomando SELECT + Seegoe simples Projecto *Resingio + Casula WHERE *Conligces + Operators Ipicose wlacionas * Frcedencia dou pease.» Operadoes BETWEEN, IN 1S 1 Sckgies lizard zines — operador IKE 5.1 INTRODUgAO A linguagem SOL (Seructured Query Language) é uma linguagem declarativa, 20 contrécio das, Linguagens tradicionais, que si0 do tipo procedimental. Permite ao usudtio espressar aquilo que pretende sem ter que entrar em grandes detalhes sobre a localizagio fisica dos eomponentes, ete. Ao utilizarem a linguagem SQL, os usuarios apenas indicam aguilo que pretendem sem dizer cexatamente de que forma o computador tera que operar para obter os resultados solicitados. Por ‘exemplo, 20 indicar que se pretende apresentar o resultado de uma pesquisa de forma ordenada, apenas iremos adicionar ao comando de selesdo a eldusula ORDER BY, no indicando qual 0 algoritmo de ordenacio que computador devers utilizar, Embora as linguagens procedimentais sejam mais répidas ao serem exccutadas, as linguagens ddeclarativas sio mais flexiveis, pois referenciam cs seus elementos através de um nome compre censivel endo através de uma posigdo Fisica em disco ou memécia, A linguagem SOL. é consttutda por wés sublinguagens: + DML ~ Data Maniplation Language (SELECT, INSERT, UPDATE, DELETE, ete.) * DDL ~ Data Definition Language (CREATE, ALTER, DROP, te.) + DCL ~ Data Control Language (GRANT, REVOKE, ete.)- A linguagem SQL. 6 orientada para o processamento de conjuntos (sei-based language), algo {que nose verifica com as linguagens mais tradicionais. Por exemplo, a linguagem COBOL era < coientada para 0 processamento de arquivos. Copyright LTC & A consulta a qualquer banco de dados relacional ¢ sempre realizada utilizando o comando 3 SELECT que é, sem sombra de dtividas, 0 comando mais utilizado e importante da linguagem. Z sal- Structured Query Language Ireltos Reservado:3» Copyrl 2015 » 17:59:21 = 0918 - Direltos Reservado: 24.04.21 FAP AAG 90141 1041674 » Estacio - 3407573900184 = ight LTC ~ 9789521615583 ~ CO! 6 > Copy IES + Matriculs: é g 2 & a na:PAULO EMANUEL ARAIJO FERNAND! 1615583 ~ ¢ 9852: 24.04.2015 = 17:59:21 » Al Ireltos Reservados - Copyright LTC - 9: taclo = 4075739000184 = TA_DO PROFESSOR 132. cartrocinco Por isso, vamos dedicar os préiximos seis capftulos ao estucio do comando SELECT em suas diversas perspectivas. 2 COMANDO SELECT ‘A sintaxe do comand SELECT é a seguinte: SELECT Capo, , Campo,» ++. Campo, 1 * FROM Tabela,, ... , Tabelay [MERE Condigio] [nour sy...) [anvime . [ORDER BY...) Como leitor jd deve estarhabituado aver, os colehetes, quando presentes na sintaxe de comandos, indicam que esse componente é facultative, isto é, pode cu nao ser utlizado. Assim, ume ver que as clfusulas toner [orour ay Crawan [onpa BY...) Bigiol 1 so opeionais, 0s tinicos componentes obrigatéeios do comando SELECT sie: SELECT Cao, , Campos) «+. 5 Campon s+ PROM Tabela,, ... , Tabelay Neste capitulo abordaremos 0 comarso SELECT nas suas utilizagdes mais simples, usando apenas os componeates do comando SELECT presentes no seguinte formato: RHERE Conaigt0 5.3 SELECIONANDO TODOS OS REGISTROS Analisemos a tabels Posial existente no nosso banco de daslos. Fsta & compesta por duas colunas, cnominadas Codigo e Localidade (sem acentos, cedilhas ou outra pontuaco) Se quiscrmos cbter toda ¢ informapio que existe na tabela, teremos de selecionar a informagio existente nas colunas Codigo e Localidade éa tabela Postal, ito é, pretendemos Selecionar 0 Codigo ¢ a Localidade da tabela Postal, o que tradvzido em inglés vem a ser © comando SQL pretendide, SELECT Codigo, Localidade PROM Postal Sal ~ Structured Query Language Damas, LulsCConanco SELECT (SeLepves SwrLes) 133 eltos Reservados ~ Copyrt: 10141 1041674 » Estaclo - 3407573900184 » 24.04.2015 » 17:59:21 = Assim, 0 formato minimo do comando SELECT exige que se indique quais so as colunas a serem selecionadas ¢ de que tabla cui tabelas faze parte ‘No exemplo anterior iefames selecionar as colunas que se seguem & eldusula SELECT (Codigo © Localidade), da tabela ou tabelas que vém a seguir & cléusula FROM, ‘A linguagem SQL pode ser eserita sem ter particular atengdo A digposigo do texto, Os seguintes Cconjuntos so anilogos: SELECT Cadgo, Localidade FROM Posts] ou SELECT Codigo, Localidade FROM Postal § cu BELECT cxdioo : Local idade rom Postal No entanto, as clausilas tero sempre que apatecer na ordem indicada na sintaxe do comando. ‘oltando novamente 20 nosso exemplo: SELECT Codigo , Localidade FROM Poste] 10 FERNANDES = Matriculs: ireltos Reservados ~ Copyright LTC - 9789521615583 ~ COD:F4F4A60916 - DI 3 94.04.2015 » 17:59:21 » Aluno:PAULO EMANUEL ARAI Como voce pode observar, o formato do comando é valida em todos of sistemas de geréneia de bpanco de dados estudados neste livro e, pela sua simplicidade, até se pode garamtir com quase 100 % de certeza que € um comando vilido em todas os SGBDR. F4F4A6091B » Depois de executado o comando anterior, 0 resultado cbtido seria: codigo | Lecatidade | I | 1000 | tasBon | | 1100 | nrepon | | 1200 | ursson | | asco | rzszoa | | 20co | sawtarsm | | 2300 | ToMaR I 7 | 30co | comma | | $000 | Porro I | 90co | ruscuan = | Sal ~ Structured Query Language Damas, Luls Direltos Reservatios - Copyright LTC - 9788521615583 - COD: Estaclo » 3407573900184 =Direltos Reservades - Copyright LTC ~ 9789521615583 - COD:F4F4A60918 ~ Direltos Reservados - Copyright LTC ~ 9788521615583 - COD:F4F4A60918 - Direltos Reservados - Copyrl; 9:21 » Aluno:PAULO EMANUEL ARAUJO FERNANDES - Matriculs:20141 1041674 ~ Estacio - 34075739000184 » 24.04. te 5 94.04.2015 = 1 Estaclo » 3407573900184 = 134 cartrocinco 5.4. SELECIONANDO TODAS AS COLUNAS Se pretendermos, como no exemplo anterior, selecionar todas as colunas de uma tabela, ento, para nfo termes que indicar cada uma das eolunas, nome de todas elas pode ser substituide pelo caractere astesisea * SELECT * FROM Postal Vejamos, entdo, que o resultado obtido é exatamente 0 mesmo. SELECT * FROM Postel | coasge | uosalsdade | | 3000 | uiseoa | | 2100 | urseck | | 2200 | urseca | | 2500 | uiseck | | 2000 | savranex | | 2200 | tome — | | 2000 | comera | | 4000 | ror | | 9000 | FuvcuaL | Se aplicarmes 0 mesmo comando i tabela Pessoa, obteremos 0 seguinte resultado: i Galario | Telefone | Cod postal [42 | antonio bias | a2] 7a000.00 | 369658 | 25004 | 8 | Célia Morais I 2 | 170000,00 | 123456 | 1200 | | 32 | Florinda sindes I 35 | 147000.00 | NULL I 4000 | | 27 | aecbel fepods | 28 | acce0.00 | mous | 3300 | | 49 | José anténio I 27 | 210000.00 | NULL I soo | | 1 | Soecimonto Auguste | 36 | 220000/00 | 250223 | 2300 | [a5 | paulo vieges | 32 | 9500000 | ois | 3500 | ‘A ordem em que as colunas sfo apresentadas é a erdemem que elas sio colocadas na léusula SELECT ou, no case de se colovar um asterisco, € a ordem em que foram criadas. Sal ~ Structured Query Language Damas, LulsDireltos Reservades - Copyright LTC ~ 9789521615583 - COD:F4F4A60918 ~ Direltos Reservados - Copyright LTC ~ 9788521615583 - COD:F4F4A60918 - Direltos Reservados - Copyrl; 9:21 » Aluno:PAULO EMANUEL ARAUIO FERNANDES - Matriculs:2 1 5 10141 1041674 » Estaclo - 3407573900184 = 24.04. 94.04.2015 = 1 Estaclo » 3407573900184 = CConanco SELECT (SeLepbes SwrLeS) 135 ‘Se por qualquer razo quisermos apresentar as colunas em uma ordem diferente, ent seremas cobrigados.a indicar a ordem desejada. salerio SELECT None, 14, Idade, Cod Poste], | sone | 14 | Tdade | Cod_postal | Telefone | Salario | | aneonio pias ja] a] 300 | 7e96sa | 7400.00 | | célia voraie js] 2] 3100 | 123458 | 170000.00 | | Floringa simses | 32 | 35 | 4000 | NULL | 147000.00 | | teabel copada [27] 30 | 3100 | NULL | 9600.00 | I vosé anzénio jas} art 3500 | nun | 210000.00 | | Nascimento Auguste | 14 | 35 | 2300 | 456129 | 220000.00 | | Paulo viegas bas] 3a] 3500 | Nous | 9500.00 | (0s dados (linhas) si apresentados a0 usustio sem qualquer tipo de ordenago. Em principio, 105 dados serio apresentados na ordem em que foram insetidos, mas isto pode no acontecer se atabela estiver indexada, #6 sinda possive!selecionar mais do que uma vez-a mesma coluna, SELECT Nowe, 1, None, Tade, 1a | Nome. | ta | one | sdade | za | | anténio Dine | 42 | anténic Dias | 43] 42] | célia worais | 5 | cétia worais [zl | Florinds simSae | 22 | Florinda ciné | 38 ]22] | reabel Espada | 37 | teabel Espada [zs farl | Joes Antenio | 49 | Joss Anténio [a7] ao] | Nescinento Augusto | 14 | Nascinento Augusto | 35 | 24 | | Paulo Viegas | 28 | Paulo Viegas 132] 25] ‘O nome das colunas repetidas é stribuido, automaticamente, pelo sistema de geréncit de banco de dados, ¢ 2 designago atribuida varia de sistema para sistema. 5.5 PRoJEGKO Nos exemplos anteriores, o nosso objetivo consistia em selecionar toda a informasio de uma determinada tabela, isto é, todas as linhes de todas as colunas da tabela, Sal ~ Structured Query Language Damas, Luls136 cartrocinco ‘No entanto, podemos estar interessados em obter apenas algumas das colunas da tabela. Bea operago & habitualmente denominada Projego. [Neste momento, ¢ com aquilo que jé foi apresentado anteciormente, o Ieitor ja saber como fazer Se pretendermos apresentar apenas algumas das colunas, s6 temos que especified-las na eléu- sula SELECT. Problema: Escrever o comando SQL que permite obter informaziio sobre a Idenificagdo, 0 Nome ¢0 Cédigo Postal de todas as pessoas existentes no banco de dados. Resolugio: Ora, todos os dados de que necessitaaes esto presentes na tabela Pessca, Por isso, basta indicar o nome exato das colunas que contém a informagio pretendida SELECT 1a, None, Cod Postal obtendo-se o seguinte resultado: | cod_poatal | 42 | Anténie Diae asco 5 | célia Nozais aco Flovinda Sindee 49 | Jona anténio asco ua 2300 Nascimento Augueto paulo Viegas 1 ja] I I Ist I I j 22] I ‘4000 | | 37 | teabel Espada I aco | jaa] I I jas] 1 I | 25] I I Sal » Structured Query Language Direltos Reservados - Copyright LTC - 9788521615583 - COD: F4F4A5091B ~ Direitos Reservados - Copyright LTC - 9788521615583 - COD:F4F4A6091B - Direltos Reservados ~ Copyrl: Estaclo » 3407573900184 = 24.04.2015 » 17:59:21 = Aluno:PAULO EMANUEL ARAUJJO FERNANDES = Matricula:20141 1041674 = Estacla » 3407573900184 » 24.04.2015 » 17:59:21 =015 » 17:59:21 = 0141 1041674 » Estacla » 3407573900184 » 24.04.21 ht LTC ~ 9788521615583 - COD:F4F4A60918 - Direltos Reservados ~ Copyrl; 10 FERNANDES = Matricula: Irettos Reservados ~ Copyr (04.2015 + 17:59:21 - Aluno:PAULO EMANUEL ARAU! reltos Reservados - Copyright LTC - 9788521615583 ~ COD:F4F4AS091B ~ = 3407573900184 = 2 Estacl CConanoo SELECT (SeLepves SLES) 137 5.6 RESTRICAO (CLAUSULA WHERE) ‘A operagiio de restripdo permite restringic 0 ntimero de linhas a serem apresentadas. Eequematicamente, pode ser representada da seguinte forma: a ——————" conde apenas apresentaremos algumas das linhes que contéxn a informagio pretendida, Para podermes restringir 0 conjunto dos registrosa serem apresentatlos, utilizaremos uma outta cléusula do comando SELECT ~a eldusula WHERE, seLect FROM WHERE Condo Para se sestringit 0 conjunto de segistros, é necessério acrescentar uma condig20 ao comando SELECT, [ora] Uns condisdo um crsopartiular de uma expressfo que devolve sempre um reul tado do tipo légieo (Booleano), sto é, Verdadeiro (TRUE) ou Falso (HALSE). Problema: Selecionar todos os individues da tabela Pessoa, Resolugio: A solucao deste problema pode ser obtida por: FROM Pessoa ‘ou, se pretendermos incluir uma condigio: (El Acces __) [0] 50 Server | [(G[_orade_)[]_ aso FROM Pessoa "Binborsalingnagem SQL utineintensamente condiges, os valet igcae TRUE ¢ FALSE nt eto Sefnios ma pripa linguogem, Apers © xevopakio SQLS fr oma que os aores items mney ete nove ipo de dodos Booleae). Per fsna.ni0€deearabar que apems 0 Area impineate cata carcrftis Sal » Structured Query Language Damas, Luls015 » 17:59:21 = 138. cartrocinco Ireltos Reservados ~ Copyri: 10 FERNANDES = Matriculs:20141 1041674 = Estaclo - 3407573900184 » 24.04. Como voc# pévle chservar, o comando anterior é valido apenas em Access. No entanto, se voce pretender especificar uma condiga0 ¢ ainda assim selecionar todos os regisios, pode fa7é-1o da seguinte forma: W_accoss _|[o| sa. server fo] _oracin | il_ mys _| seuact * FROK Pessoa owentho, pode opkar por colocar uma condigio que sea sempre verdadeira eque € vélidaeaceita ‘por todes os SGBD estudatles neste live. seuect * FROM Pesaoa WHERE 1-1 Problema, Tazer uma consulta 3 tabela Pessoa, da qual no resulte qualquer linha, Resolugio: Para obter-se um resultado vazio, preciso especificar uma condicéo que seja falsa para todos 08 registros, seLect * WHERE FALSE ‘ i i 8 : & ; 3 i | z Como os outros sistemas de geréneia de banco de dados, além do Access, no possuem anogio de TRUE ou FALSE, posie-se implementar a mesma caracierfstica colocando uma condigo que seja sempre Verdadcira ou sempre Falsa. Por exemplo: setact * FROM Pesca RAERE 2 <> 2d a 3 3 3 & g 2 z i g z = a 3 a cop: (Ou entio se pode opisr por usar constantes em vez de campos da tabela. seLact * Pesson NHERE Lesa, Se pretendermos, como é natural, fazer outro tipo de restrigdo que utilize expressées, teremos «de conhecer 0s operadores que 0 SQL disponibiliza. Itos Reservades = Copyright LTC - 9788521615583 - Estaclo » 3407573900184 = Sal ~ Structured Query Language Damas, Luls Dig 5 = Cops 4.04. ireltos Reservados a 3 3 8 90141 1041674 » Estacio - 3407573900184 = g g 8 5 6 > Copy IES + Matriculs: Reservado: FERNAND! F4F4A60916 - Direlt (21615583 - CC 885: 7 01 1015 - 17:59:21 » Aluno:PAULO EMAI 24 04.2 eltos Reservades ~ Copyright LTC - 9: aclo = 3407573900184 = CT (SeLepbes SwrLES) 139 5.7 OPERADORES RELACIONAIS (Os operaddovet relacionais permitem estabelecer relagées entre elementos. O resultado da apli- ccagiio de um destes operadores é sempre 0 valor logico TRUE ou FALSE. [Tera] D2 tines de um operadcerelaional esta sempre um valor lgico, Problem: Selecionar todas as Pessoas com 35 anos de Idade. BL_rccoss _|[G] sa server | [5|_oracte _|{_siysau._} seuect * WHERE Tdade = 25 [38 | None. | tdade | salario | Telefone | cod Peetal | | 5 | 147000.00 | NULL | wagcimenco augueco | 38 | 220000 I 4000 | 0 | aseizs | 2300 | Problema: Selecionas. Id, Nome e Saldrio de todas as Pessoas com Made pata votat. GL Aecess |B] st Server | [B]_orace _|[BJ_sysou_) SELECT 14, Nona, Salario muERE rade ae | fa | None | salario | | 42 | anténic Dine | 74000.00 | | 5 | celia worate | 170000.00 | | 22 | Plorinds cimdae | 147000.00 | | 37 | isabel Espada | 8600.00 | | 4 | Nascirents augueto | 220000.00 | | 25 | Faulo Viegas | 98000.00 | Sal ~ Structured Query Language Damas, Luls‘apy PASTA DO PROFESSOR 2015 » 17:59:21 = M40 cartrurocinco 4.04. Repare que, neste caso, nem sequer se visualiza a coluna Fade. No entanto, como faz parte da tabela indicada no comando SELECT, pode ser usada na clausula WHERE para fazerascleg0 dos registos. 0916 - Direltos Reservado: 3 3 = $ Problema: Selecionar a desctigdo de todas as Mensagens cujo Jd seja diferente de 20. 83 (GL Access | @] sat server | B]_orecie _}(BJ_mysox_] ah ge seiner Hennagen ae Nensagen go WHERE Ta Meg <> 20 ga Be | wennags i BY | conise’o de Yeadae | aa | Frotes inpresas | #8 | vendse extra | 28 | Deslocagses I B= | Refesqien | 8o | conbusesvess | ae | Teaneportes | 82 | teiezonenas | bs | cfereae I ge @ 7 33 5.8 OPERADORES LOGICOS £3 28 Os operadores Ggios fancionam sempre com operandosligicos 0b com expresses que 2 ad devolvam valores légicos. a2 Be Bs [orenavon | exenruo 293 Lavo | iz | a& Lnor | on O resultado da utilizagao de um operador légico € sempre um valor ligico. ao Nom] © operador NOT é um operador unésio. gs Peck. Setecoae ote, oflere 0 Solis eat ux fresay com Miedceae Rw 30 e 40 anos. 73 & Bs GL recess |G] sq. Server |@J_oracte _) [B_mysou_) ga 2 SaLECT 1a, Nome, Taade, Salario z FROK Fesooe NHERE [dade >= 30 AND [dade <= 40 Sal ~ Structured Query Language Damas, Luls Estaclo = 34075739000184 =Direltos Reservados - Copyright LTC - 9789521615583 - COD:F4F4A60916 - Direltos Reservados ~ Copyright LTC ~ 9788521615583 - COD:F4F4A60918 - Direlts Reservados ~ Copyrl; 04.2015 = 17:59:21 = Aluna:PAULO EMANUEL ARAUJO FERNANDE :20141 1041674 » Estaclo » 34075739000184 24.04.2015 » 17:59:21 = BS = Matricul Estaclo ~ 3407573900184 = CConanoo SELECT (GeLepves SwrLes) MI | 34 | Wome | 3dade | salario | | 22 | Flevinda sinses | 35 | 147000.00 | | a4 | Naecimenco auguaze | 28 | 220000.00 | | 25 | Paulo viegas | 32 | 95000.00 | Problema: Selecionar 0 Id, o Nome, a Idade e 0 Saldrio de todas as Pessoas que nio fazer ppatte da seleco anterior, isto é, euja Idade nfo est entre 30 40 anos. SELECT 14, Nome, Idade, salario WHERE Tdade < 20 OR tdade > 49 SELECT 14, Nome, Idade, Salario RON Pessoa BRE NOT [Idade >= 20 AND Idade <= 40) | 1d | Nome | Idade | salario | | 42 | ancénio pias | 43 | 7400.00 | |S | Célia noraie | 26 | 17000000 | | 37 | tsabel Espada | 26 | 6000.00 | | 49 | goed anténis | 47 | 210000,00 | Repare que no exemplo em que se utiliza o operador uniio NOT os parénteses so obrigatScios, ppois caso ndo sejam colocados o resultado obtido seri diferente do anterior: (i_Accoss |B 501 server | (B]_ ratte _){S]_sivsae_ SELECT 14, Noma, Idade, Salario FROM Pesaca WHERE NOT Idad2 > 30 AND idade <= 40 | ta | moma | tdade | salarso | | § | célia Morais | 26 | 170000.00 | | 37 | reabe2 Bepada | 20 | 8600.00 | | 49 | goes antanio | 17 | 210000.00 | Sal ~ Structured Query Language Damas, LulsCopyri 17:59:21 = 14.04.2015 ireltos Reservados - 90141 1041674 » Estacio - 3407573900184 = a 3 8 3 g b 5 > Copy Reservado: J30 FERNANDES = Matriculs: :FAF4A6091B - DI 2 g 2 z & 3 z 82 ia Ba ae 3 3 24.04.20 Ireltos Reservados - Copyright LTC - 9: clo = 3407573900184 = PASTA DO PROFESSOR M2 cartruocinco e que é equivalente a: SELECT Ia, Nome, Salario cM Pesca RHERE (WOE (Idade >= 30)) AND (14ade <= 90) ©, por conseguinte, ndo esti comreto, Se executarmos este mesmo comando em MYSQL o resultado € um conjunto vacio de clementos. 5.9 OUTROS OPERADORES (BETWEEN, IN, IS, LIKE) A linguagem SQL coloce & disposigio dos usuitios un conjunto adicional de operadores que visam aproximar, ainda mais, o SQL de lineuagem falada. Estes operadores simplificam de forma significativa a forma como as condigdes, existentes na cldusula WHERE, so escritas. Estes operailores tipos de expresses, como intervalos, conjuntos, etc. iam também a repetisio de componentes colocados na formagio de cextos 9.1 OPERADOR BETWEEN 0 operador BETWEEN pecnite specifica intervals de valores A cua sintaxe €aseguinte: sonct ~ NHERE valor [MOT] BETWEEN valori AND valor? Na realidade, as condigGes seguintes sio equivalentes: * valor >= valor! AND yalor <= valor? + (valor >= valor) AND (valor <= valor2) * valor BETWEEN valocl AND valor2. AAs seguintes condigées também sto equivalentes: + valor NOT BETWEEN valorl AND valor? NOY (valor BETWEEN valor! AND valor2) NOF (valor >= valor] AND valee <= valer2) NOT (valor >= valorl) OR NOT (valor <= valor2) valor < valor! OR valoe > valer2 Problema: Selecionar o Id, 0 Vome, a lade ¢ 0 Saldrio de tolas as Pessous com Idade entce 30 40 anes. Sal ~ Structured Query Language Damas, Luls(Conanoo SELECT (SeLepves SLES) 143 SELECT 19, None, Tdade, Salario RON Peaeoa WHERE Tdsde + 20 AND Tasde <- 40 SELECT 14, Noma, idade, Salario FRON Pessoa HERE Idsde BRTWERW 20 AND 40 (O resultado obcido € aquele que se esperava. | salario | | 22 | Plerinda sinses | 38 | 147000.00 | | 24 | wascimence auguaze | 28 | 229000.00 | | 28 | Paule Viegas | 22 | 9500.00 | Problema: Selecionar 0 Id, 0 Nome, a Idade ¢ 0 Saldrio de todas as Pessoas que nio fazer ppatte da selego anterior, isto €, euja Idade no est entre 30 € 40 anos. SELECT Td, Noma, Tdade, Salario HERE Tdade < 30 OR Tdade > 40 SELECT 14, Noma, dade, Salario FROM Poseos WHERE NOT [idade >= 20 AND Tdade <- 40) SELECT 1d, Nome, Idade, selario WHERE Idade MOT BETWEEN 20 AND 46 SELECT 13, Nome, idade, Selario FROM Pessoa WHBRE NOT [1dade BRIWEEY 30 AND 40) Sal » Structured Query Language Direltos Reservados ~ Copyright LTC - 9788521615583 ~ COD:F4F4A0916 ~ Direltos Reservados ~ Copyright LTC - 9788521615583 ~ COD:F4F4A6091B - Direltos Reservados - Copyrl Estaclo - 34075739000184 - 24.04.2015 - 17:59:21 - Aluno:PAULO EMANUEL ARAUJO FERNANDES » Matricula:201411041674 - Estaclo » 34075739000184 - 24.04.2015 - 17:59:21Direltos Reservados - Copyright LTC ~ 9788521615583 - COD:F4F4AS091B ~ Direltos Reservacios - Copyright LTC - 9788521615583 - COD:F4F4A60916 ~ Direltos Reservados ~ Copyrl: ‘1 + Aluno:PAULO EMANUEL ARAUJO FERNANDES » Matricula:201411041674 - Estaclo » 34075739000184 - 24.04.2015 - 17:59:21 Q a 8 a 3 3 3 8 5 3 g M4 cartrucocinco Usando qualquer dos comandos anteriores o resultado serd sempre o seguinte: | ta | wome | tdade | salario | | 42 | amcénio pine | 42 | 74000,00 | | 5 | céliaworais | 26 | 170000.00 | | 27 | teabel Bepada | 20 | #6000.00 | | 49 | voss antonio | 17 | 210000.00 | 5.9.2 OPERADOR IN 0 operator IN permite vevifiear se algo faz au no paste de wn conjunto de valores especifi- cado entre parénteses. A oua sintaxe & a seguini ROK WHERE valor [OF] TH (valor, valory, valor! ‘As seguintes condigies si0 equivalentes: valor = 1 oR valor = 2 OR valor = 3 valor IH (1,2,3) Problema: Selecionar a lista completa (todos os campos) de Codigos Postais de Lisboa Tomar. ROK Postal WHERE Local idade = ‘LISs0A* OR Localidade = *TOMAR* seLect * ROM Postal WHERE Localidade EN ['LISEOR", TOMAR) Sal » Structured Query Language Damas, LulsDireltos Reservados - Copyright LTC ~ 9789521615583 - COD:F4F4A6091B ~ Direltos Reservados - Copyright LTC ~ 9788521615583 - COD:F4F4A60918 - Direltos Reservados - Copyrl, 94.04.2015 = 17:59:21 » Aluno:PAULO EMANUEL ARAUJO FERNAND! :20141 1041674 » Estaclo » 34075739000184 24.04.2015 » 17:59:21 = BS = Matricul astaclo = 3407573900184 = CConanoo SELECT (SeLepbes SwLES) 145 | codige | tocalidade | | toc | trspoa | | 1200 | urepoa | | 100 | urseoR | | 1500 | urepoR | | 2300 | tomaR I Problem: Selecionar es Cédigos Posiais que niio pertencem a LISBOA nem a TOMAR, SELECT codigo, Localidade FROM Postal HERE Localidade <> ‘LISBOA’ AND Localidade <> ‘TONAR* SELECT codigo, Localidade FROM Posts] WHERE Locelidad= NOT I (*LISSOR*, “TOMAR-) | codigo | tocalsdade I | 2000 | sAWrAREM | | 3000 | comma | | coc | Porro I | 900 | ruscuan | Repare que 2 primeira solugdo obsiga a repetigdo do nome do campo em cada uma das expres- bes da clfusula WHERE, Utilizando os valores especiicos dos eddiges das localidades que esultaram do comanclo que sclecionou todos os eGdligos pertencentes & Lisboa ¢ Tomar presentes no nosso exemple, obte~ rfames um resultado semelhante, mas repare na quantidade de condigSes que se economiza na utilizagio do operador IN: SELECT Localidade, codigo FROM Postal WHERE Codigo NOT IN (1000,2100,1200,1500,2300) Sal ~ Structured Query Language Damas, Luls= Copyriy | 2015 » 17:59:21 = | 4.04. M6 cartrucocinco | Lecalidade | Codige Il | sawraren | 2000 | | comera | 3000 | | Poxro | 4009 | | runcu | 9000 | 5.9.3 OPERADOR IS (TRATAMENTO DE VALORES NULOS) Como j foi mencionado anteriormente, 0s Bancos de Datos Relacionais contém um valorespe- cial NULL que poe ser atributdo a qualquer tipo de dados, Norm] © valor NULL, quando presente em um campo, indica “auséncia de valor", 90141 1041674 » Estacio - 3407573900184 = Problema: Por que razio precisamos colocar o valor NULL. em tm cam Considere uum banco de dados de um professor, onde este atribui as notas aos alunos ao longo do ano. * Matricuts Como a nota do aluno é um miimero inteiro, por que razio no colocamos 0 (zero) quando nio sabemos a nota doakino? Quando o aluno comega as aulas, ele ndo tem qualquer nots associada, Se colocarios 0 (zero) na sua avaliagdo, isto indica quc cle obteve um 0 (zero) como avaliago dagucla disciplina. Nao se conseguiria por isso diferenciar um aluno que ndo fez prova de um outro que o fez ¢ que obteve nota 0 (270). Assim, 0 vale NULL permite-nos indicar se existe ou nio algum valor j4 disponfvel para um. \dcterminado campo, :F4F4A6091B - Direltos Reservados ~ Copyright LTC - 9789521615583 - COD:F4F4A6091B - Direltos Reservado: As comparagies de valores com NULL texfo de ser sealizadas utilizando 0 opecador S.A ulilizagdo de qualquer outro operador devolve sempre FALSE’. na:PAULO EMANUEL ARAIJO FERNAND! Bt A sinsinace a sain Re equine: Be seuect = ag — as viene cares 36 (808) moet Ry 7 Problema Sclecionar os Nomes © Telefoner de todas as Pessoas. 24 04.2 Tresor agus vensesde deve Sal ~ Structured Query Language Damas, Luls Ireltos Reservados - Copyright LTC - 9: taclo = 4075739000184 =CConanco SELECT (GeLepves SwrLes) 147 SELECT Nowe, Telefone O resultado deste comando SELECT contém valores nulos no campo Télefone. A forma come 0 resultado€ apresentado pode apacecer de diferentes mancitas, dependent do sistema de geréncia de banco de dados que ¢ utilizado, ‘Alguns sistemas apresentam NULL eserito: SELECT None, Telefone PRON Pessoa :20141 1041674 = Bstaclo = 3407573900184 » 24.04.2015 = 17:59:21 = | some. | terefone | | Anténio Biae | 7eocee | | célia soxaie jaaas | | Florina Sines | LL | | tecbel Eepeda = | wy | | ose aneenio jm | | Seeeimento Augusto | 456223. | | Paulo Viegas jm | (Outtes sistemas oplam por niio apresentar nada nas ocoméncias cle NULL. SELECT Nowe, Telefone FROM Poseoa F4F4A60916 ~ Direltos Reservados ~ Copyright LTC - 9788521615583 ~ COD:F4F4A60916 - Direltos Reservados ~ Copyri: | Anténio Dise | 799654 celia Morais | 1zsase Florinda singee | :59:21 » Aluno:PAULO EMANUEL ARALIIO FERNANDES - Matricul Nascimento Augusto | 456123 Paulo Viegse I i | I I I 1 | asabel eepada I I! | oe Anténio. I I I I i i 04.2015 » 13 ‘A forma como o valor NULL & representado pode ser diferente da apresentada para os sistemas analisados neste livco, mas o leitor nao ters qualquer dificuldade, pois o fato de ser apresentado ‘valor por extenso é apenas um efeito visual que o SGBD implementa para facilitar a leitura e aandlise dos resultados. Sal ~ Structured Query Language Damas, Luls )Ireltos Reservatios - Copyright LTC - 9788521615583 - COD: istaclo » 3407573900184 » 24PASTA DO PROFESSOR M8 cartrucocinco eltos Reservados ~ Copyri: I 0 fata deo SGBD no colocar qualquer valor para representar os valores NULL na visualizagio «dos resultados pode gerar alguma confusio, pois ndo se fica sahendo se 0 valor € NULL. ou se & constituido pela string vazia, ‘Uma outta representagio feita por alguns sistemas é a seguinte: | Nome | veregcne | | aAntenso Dias | 7e06sa | | Celis Morais | az.as6 | | Slorinda sindes | (NULL) | | Teabel Zepade | om | | José ancenio | can | | Naccsmente Augueto | 45623 | | paulo Viegas | own | Problema: Selecionar 0 Nome das Pessoas sem Tele Resolugio;, Para sebermos quais sio as pessoas sem tclefone, temos gue perguntar ao SUBD «gue pessoas tém o valor NULL colocado no campo Telefon. SELECT None FROM Pesaoa WHERE Tolofone Ee NULL | | Flexinda singe | sabe] Espada | Joes Anténio | I i I | Paulo Viegas F4F4A60916 ~ Direltos Reservados ~ Copyright LTC - 9789521615583 ~ COD:F4F4A60916 - DI Problema: Selecionar os Nomes ¢ Telefones das pessoas com Telefone SELECT Nowe, Telefone ROM Pessoa WERE Telefone 18 NOT NULL 1:59:21 » Aluno:PAULO EMANUEL ARALIIO FERNANDES - Matriculs:20141 1041674 ~ Estaclo - 3407573000184 - 24.04.2015 - 17:59:21 ~ E | Nome | Telefone | 94.04.2015 » 1 | Anténic Dias i | celia morais [azzase | | Nazcimeato Augusto | rescsa | 4se120 | Sal ~ Structured Query Language Damas, Luls jireltos Reservades ~ Copyright LTC - 9788521615583 ~ COD: staclo = 4075739000184 =‘opyrly 2015 » 17:59:21 E 4.04.2 0916 - Direltos Reservado: FAFSA 90141 1041674 » Estacio - 3407573900184 = » Matricula:2¢ ¢ Reservatios - Copyright LTC - 9789521615583 - 0 030 FERNAND! 1615583 - COD:F4F4A6O91B - 885: 1015 - 17:59:21 » Aluno:PAULO EMAI 24 04.2 eltos Reservades ~ Copyright LTC - 9: aclo = 3407573900184 = CT (SELepbes SwLES) 149 5.9.4 NULL ~ CONSIDERAGOES FINAIS A possibilidade que os SGBD tém de utilizar um valor que indique a prépria auséncia de valor € algo de enorine importéneia e que tem os seus pris € contras, De qualquer mancira, no final deste estudo é importante mencionar que: * Os bancos de dados relacionais possuem um indicador de inexisténcia de valoc NULL. + Ovalor NULL nao é zero, nema string vazia + A comparagio com NULL tem que set feita usando o operador IS, * A comparacdo com valores NULL, sem a utilizagio do operador IS, devolve sempee FALSE. + As caracterfsticas do valor NULL sio de tal forma importantes que C. I. Date, um guru de baneo de dades, dedica-the um capitulo completo (XVI) no seu livto A Guide to THE SQL_STANDARD*. A recomendagio que ele faz no final do capitulo & Avoid nulls 5S OPERADOR LIKE (COMPARAGAO DE STRINGS) O operador LIKE permite resolver alguns problemas naturais que existem quando se pretende ‘comparar sirings. ‘Uma siring € um conjunto de caracteres que funciona como um todo. As strings em SQL so Sempre colocadas entre aspas simples (‘Isto € uma siring’, ‘isto também”, “) ‘A comparagio de sirings com 03 operadores relacionais utiliza sempre, na comparagio, a tota- lidade da string. Problema: Selecionas es Cédigos Postais sssociados a LISBOA. seuecr * PRON Doo iaieRe Locelidade = “Lissca* | eadige | tocalidade | | xece | trson | | ace | exsnon | | 4200 | crspoR | | x00 | excon | Reigate. Viens “Entoce raed’ Sal ~ Structured Query Language Damas, LuisE = Copyrh c 2015 » 17:59:21 = 150 cartrocinco 4.04, 5 i 8 2 3 ag Atengao: Alguns sistemas de geréneia de banco de dados preenchem as sings com espagos ag até completarem o comprimento especifico do campo. Isto quer dizer que o resultado da, 38 pesquisa anterior seria vazio, pois em vez da siring ‘LISBOA’ o sistema ini considerar $6 “LISBOAODOIOIOICONONO’, sendo sempre falso o resultado da comparagdo realizada na cléu- Pa sula WHERE. Por sso é sempre importante levas em conta o tipo de dadas da campo ea forma ga como. SGBD opera sabre eles. °§ ‘A utilizagdo do operador LIKE permite fazer comparagées de partes da string. Para tal, wilizara- Bu se dois WildCards (caracteres curingas): ge (CL Access) (GL 500 server | ([_oracte_} [B]_myscu_ gs Sy | ea [x 3 Mais uma vez, ¢ infeliemente, © Access nio implementa os wildcards detinidos nos padrées. 2g Pov isco tenha atengio 20 usar ou peogramar aplicagbes que utilize o Access, pois se deve usa gg os seguintes wildcards: 83 8 Goes (0s server | (O] orate) (2T_nysa) se @3 33 [ sowrrcace a5 [ 26 Problema: Selecionar todas as Mensagens comegadas por “I”. Be (ol ieee )(G[ sat server | [BJ orecte _[E]_nysax_] g. suet * Be Prot Nensagen ag WHERE Mensagem LIKE ‘Tt! eR aS 3. Locos _|fo | 4. server JO] race _JjO]_nysan_] Be pa ssLECT + Es rac fanensen #z WHERE Mensogem LERE “7** 3 33 {0 Accs da Nico lca cs WidCard © (au coractee)e? (I cance) ga sg 3 Sql Structured Query Language Damas, LulsF4F4A60916 ~ Direltos Reservados - Copyright LTC ~ 9788521615583 - COD:F4F4A6091B - Direltos Reservados ~ Copyrl; C staclo = 3407573900184 - 24.04.2015 » 17:59:21 Aluno:PAULO EMANUEL ARAWIJO FERNANDES » Matricula:201411041674 - Estaclo » 3407573900184 = 24.04.2015 » 17:59:21 + E reltos Reservados ~ Copyright LTC - 9788521615583 - COD: CConanoo SELECT (SeLepves SLES) 151 | 90 | feteronenas | | 20 | Branaportes | Problema: Selecionas todas as Mensagens acabades em “as”. PRON Menzagen WHERE Mensagem LIER 'tas' FROM Mensagen WHERE Mensagem LIER ‘as! 30 | Fretes Empresa | 90 | Telefcnenae, I 200 | oferca I Problema: Selecionae todas as Mensagens que contenbam a palavea (string) Wendas” em ‘qualquer parte da designazio. FROM Mensagen WHERE. Mensagem LIKE 'kVendast* SELECT * FROM Moneagen WHERE Nensagem LIKE ‘*Vendas** 3d_Meg | Nensagen I 20 | conieedo de aERa | 40 | Nandag exer \ Sal » Structured Query Language Dares. lls182. cartrurocinco Problema: Selecionar todas as Mensagens que contenham a string “ro. seuect * ROM Nenaagen WHERE Meneagen LIKE ‘eet! seuecr * ROK Neneagen WHERE Mensagem LIKE "*te** 01411041674 » Estaclo - 3407573900184 = 24.04.2015 » 17:59:21- E td_Meg | Meneagen 20 | Frets Individuare 30 | Profs Bnprosas 80 | transports 90 | MBlefononas Problema: Selecionar todos os Nemes que contenham a siring “da”. SELECT Nome Peeeos WHERE None LIKE ‘dat’ SELECT Nome FROM Pesson WHERE Mone LIRR ‘#33! 04.2015 = 17:59:21 = Aluno:PAULO EMANUEL ARALIIO FERNANDES - Matricula:2 F4F4A60916 - Direltos Reservados ~ Copyright LTC - 9788521615583 ~ COD:F4F4A6091B - Direltos Reservados - Copyrl;_ 0 | Florina sites | | sabe? Espada | Problema: Sclecionar todos os Nontes que NAO contenham a string “da” Sal ~ Structured Query Language Dares. lls reltos Reservatios - Copyright LTC - 9788521615583 - COD: staclo = 3407573900184 =e (Conanco SELECT (SeLepves SwrLes) 153 SELECT None WUBRE Nove MOT LIKE 'tdst* SELECT None FROM Pessoa WHERE NOT [Nona LIKE ' #22") (Gl necess _ [9] sa server (o[_ orate] avs] SELECT None FROM Peseos BRE Nove MOT LIKE '*dax* SELECT None FRON Pessoa WUBRE NOT [Noma LIKE '¥do4*) None I i | Anténio Dias i | célia Norate I | | I I | ! oss Anténio staclo » 3407573900184 = 24.04.2015 = 17:59:21 = Aluno:PAULO EMANUEL ARALIIO FERNANDES - Matriculs:20141 1041674 » Estaclo 4075739000184 24.04.2015 » 17:59:21 = Nascimento auguato Paulo Viegae Problema: Selecionar todos os Nomes cujo segundo caractere € um SELECT None FROM Peseos BRE Nove LIKE SELECT None FROM Pessoa WHERE Nowe LIRR '25*' at | Nilscimento Augusto | Paulo viegae Sql - Structured Query Language Gacvens: Lids Ireltos Reservados - Copyright LTC - 9788521615583 - COD:F4F4AS091B - Direltos Reservatos - Copyright LTC - 9789521615583 - COD:F4F4A6091B - Direltos Reservados = Copyr D‘pyr; D E 17:59:21 » 1B ~ Direltos Reservado: 1609: 183 ~ COD:FAF4A\ a 615: C- 9799521 1201411041674 he LTC ‘opyrigt BS = Matrict Reservade rel -OD:F4F4A6091B - 1» Alu C = 9788521615583 ~ [2015 = 17:59:2: 3s > Copyright LTC 24.04. do a : 5 Reserva reltos PASTA DO OFESSOR 154 cartrmocinco Se por acaso se pretender pesquisar os préprics wildcards deniro de strings, deve-se preceder 0 wnildeard de um caractere que indicaré que o contexto especial destes caracteres seté climinado através da scguinte sintaxc: string (NOT) LIK2 tpadrio_de_pesquisa’ Problema: Selecionar todas as Mensagens que contenham 0 caractere “%. SL aca! Boece La) seus veneagen H Nensagen NHERE Wensagen LIKE "t@tk* ESCAPE ‘@ scr vensagen ROK Nensagen NHERE Mensagem LIKE ‘=t" ESCAPE“ Neste caso, pretende-se que 0 contesido do campo Mensagem seja constituido por: © % Qualquer conjunto de caracteres & esquerda * @% Seguido do curactere “% + % Seguido de qualquer conjunto de cacacteres 3 diveita, A instrugio comespondente em Access seta implementada da seguinte forma (levando em conta que o wildcard é 0 asterisco: Sikes iis SL SELECT Maneagen NM Neasagen RHERE Meneagem LEER '#(«]#* 5.9.6 WiLDcARDs — RESUMO Sql - Structured anne. tile Resucraoo TRUE 26 alma, 86, 200, aAe 2s, ate, ans, ac6, a. “wen EeOAPEe mat Ta ESCAPES Vaemeohepealn "rTea ESCAPE Te 7 Query LanguageCcomano 5 CT (Seuepbes Swrtes) 185 ‘Alguns sistemas permitem a utilizago de cutros WildCards especiais nas pesquises que repre- ssentam conjuntos de caracteres zz [avers | ouaiuer tino conecams cbiouoianenispora boue : [an _[ousiecrorceecierarme’ [avatar | B ‘String tormada unicamente pot dois caracteres. O primeira | Aa, a2, a. zi: | Sumeonute stusteorncnis ou mavens 3 gS sogminé um cactus a3 a Re "Sting comegada por'Al- © tercere caracieretord de estar | Almodovar, Ajpendi z creo cuzomrec tre Y(rrepad,depcc ote | Aim Ama, Abeta oparecer qualquer stig, (Omensde minine 8.) 7310 ‘sringoomepada por AIO weroaro caraceretera de esr | Amodovar Apancte, fenirace excise Tne F (m:n, pan. Dep pode ima ‘parecer qualquer ctrng. No ontnto,o time earactore roe pede ser numéice,(Dimenese minima 4.) “alin s0-97 5.10 PRECEDENCIA DOS OPERADORES ‘Tal comonas linguagens de programagio tradicionais, também na linguager SQL os operadores tm diferentes peecedténcias, iio &, se varios operadores aparecetem ei wna expressdo alguns deles sio executades antes de outs. A precedéncia diminui no sentido da seta, sso quer dizer que os operadores que estio mais cima sto executados prime'to. Por exemple, o seguinte comando: (BL_rccess _| [i] sce server | Gl _orocte_}(i]_mysiu_| Tn algun daemon se se '[Pabe] Query Lang3 3 é 2 E Fy 3 8 8 g é : § 3 5 8 z FAF4AS091B = reltos Reservados ~ Copyright LTC ~ 9788521615593 ~ COD: (04.2015 + 17:59:21 - Aluno:PAULO EMANUEL ARAUIO FERNANDES - Matricula: 015 » 17:59:21 = 0141 1041674 » Estacla » 3407573900184 » 24.04.21 a = 3407573900184 = 156 cartrocinco seLect * ROM Pessoa WHERE Idade <- 27 oR adade >= 30 AND elefone Te NULL Eequivalente a sauzct + FROK Pessoa WHERE Tdade <= 27 OR (Zdade >= 39 AD Telefone TS NULL) devido a diferente precedéncia dos operadores OR ¢ AND. Como a precedéncia do operador AND é maior que a do operador OR, o opecador I6gico AND € aplicado antes do operader OR. [36 | Nowe, | tdade | Salario | Telefone | cod Postal | | | célia Moraie | 26 | 170000.00 | 123456 | ao0 | | 32 | Florinda sites | 35 | 187000.00 | mune | s000 | [49 | Joss amténio | 17 | 210000.00 | mnt, | 1500 | [as | Paulo Viegas | 32 | 98000.00 | mums | soo | Provavelmente, oque se pretendia fazer era selecionat as pessoas que témm até27 anos ou 30 anos ou mais ¢ que nao tém telefone, Nesse caso, o comando teria que ser escrito com mais cuidado, isto é, colocando es parénteses para resolver o problema da precedéncia dos operadores: FROM Pesson WHERE (Tdade 2927 OR Tdada +930) AND Telafone TS NULL gue originaré um resultado diferente. | 38 | wove | dade | calario | Telefone | cod postal | [32 | Flovinda Sindee | 98 | 247000.00 | mut | 4000 | | 49 | gosé anténio I a7 | 210000.00 | NULL ! 1soo | | 36 | Panic viege | 52 | ps000.00 amet | 3500 | [Neste caso, os parSnteses (que t8m a maior precedéncia) foram utilizados para fazer as opera ges pela ordem pretendida, Sal » Structured Query Language Gaceue. iiD E: > Copyrl 2015 » 17:59:21 » 1B ~ Direltos Reservado: ~ 24.04, 50 = 34075739000184 tac 9788521815583 - COD:FAFAAt 201411041674 - copyright LT Matricula Reservades - ¢ 10 FERNAN 0918 ~ Dirett MANUEL ARAU! 4FAn right LTE FES Do 6 - ORDENAGAO ‘SUMARIO = Cifusuls ORDER BY + Ordena, por ums colum + Oxlensgdo por nas de uma coluns_ + Sesdo de expressbes = Ondenagio por posigio * Ondenogioe o valor NULL * DISTINCT e ALL 6.1 INTRODUGKO [Neste capitulo abordaremos a forma pela qual podemes solicitar a ordenagzo dos resultados Fomecidos por um comando SELECT. A ordenagio estd bascada no valor do eddigo ASCII de cada caractere, Assim, os digitos aparecern antes des caracteses alfabéticos ¢ as maitisculas aparecem antes das mintsculas. One OC ABC Be abe ce Alguns sistemas sio case sensitive!, outros nio, Este fato ir influenciara ordem pela qual serio ‘ordenatlos os valores. ‘A ondenago pode ser realizada através da eldusila ORDER BY no comando SELECT: Esta ccléusula, se existt, aparece sempre posicionada no final do comando SELECT, SELECT Campo, , Campo, , ... , Campo, , * FROM Tabla, , ... , Tabela, [WHERE Condig’o] [cRour BY...) (aveno [ORDER BY Camps [ASC|DBSC] . Campo (ASC|DESC], -1 Na cldusula ORDER BY, Campo representa onomede um Campo, uma Expressdo ou a Posi¢do pela qual se pretende ondenar o resultado do SELECT. ASC indica que a ordenasdo a ser apresentada serd ASCendente, e DESC indica que a orde- ago ser DESCendente "Case Sess 0 aiseam Fa dierensagtoente miniouls ¢ MATCSCULAS. Nese tipo esses, a ge “Amoe © “AMOR’ sie dicate, + Structured Query LanguageF4F4A60916 - Direltos Reservados ~ Copyright LTC - 9788521615583 ~ COD:F4F4A60916 - Direltos Reservados ~ Copyrl: D reltos Reservatios - Copyright LTC - 9788521615583 - COD: taclo » 3407573900184 = Es 015 » 17:59:21 = 101411041674 » Estacio - 3407573900184 » 24.04.21 10 FERNANDES = Matriculs: 94.04.2015 » 17:59:21 » Aluno:PAULO EMANUEL ARAL 158. cartrno sas 6.2 ORDENAGAO POR UMA COLUNA ‘A ordenagio por coluna faz-se especificando, na cldusula ORDER BY, qual a coluna pela qual, se pretende ordenar 0 resultado, Problema: Selecionar 1odas as pessoas, ervenando o resultado pela Idade, seLecT * FROM ORDER BY Idede \ jssarso | Teletone | cod_postal | | 49 | sose anténso fz1oc00.00 | mus | as00 | |S | célia Morass 170¢00.09 | 222456 | 3109 | | 37 | Isabel Espada e6000.00 | NULL I 2200 | | 28 | Paulo Viegse 9000.09 | NULL | 3500 | | 32 | Florinda sindes 147000,00 | NULL | 4000 | | 34 | Naseimente augusta fe20cea.00 | 45612 | 2209 | | 42 | Anténio Dies 74000.00 | 769034 = | asoo | Por default a ordenagio € Ascendente, ‘Assim, o comando anterior & equivalente a: ORDER BY Tdade ASC Problema: Selecionar o Nome ¢ 0 Saldrio de todas as Pessoas, ordenando © resultado pelo ‘Saldrio, de tal forma que os maiores salcios fiquem no topo da lista. Resoluglo: Teremos que fazer uma selegdo ordenada de registros em que a ordenago tem que ser feita descendentemente (DESC), de maneira que os maioces salétios aparegam no topo da lista. SELECT Nowe, Galaric ORDER BY Salaric DEEC Sal ~ Structured Query Language015 » 17:59:21 = Es onoenagho 159 Wome | Salario | José anténio 220000.00 170000.00 resbel Eepada 6000.00, antonio Dias I 1 i i I 1 I | célia Norate 1 I | Florinda sintes | 147000.00 | | Paulo viegas | 9009-00 | | | | I I i Problema: Resolver o mesmo problems, mas s6 para as pessoas que témn telefone. Resolugiio: A solugio ¢ praticamente a mesma, mas o comando SELECT teré que contera elu ‘sila WHERE para selecionar 05 registros a serem apresentados. Apenas o resultado a selegiio seri ordenadlo. SELECT Nene, Salario FROM Pessoa WHERE Talefone 18 NOT NULL ORDER BY calaric DESC 10141 1041674 » Estaclo - 3407573900184 = 24.04. 10 FERNANDES = Matricul | wone | salario | | mascinento Augusto | 220009.00 | | célia woraie | 370009100 | | anténio Dias | 74000.00 | 6.3 ORDENAGAO POR VARIAS COLUNAS DOD:F4F4AGO9IB - Direltos Reservades ~ Copyright LTC - 9788521615583 ~ COD:F4F4A60916 - Direltos Reservados ~ Copyrl: D Per veres o resultado do comando SELECT € tal que podem existir colunas com valores repe- tidos poe virias linhas. Assim, pode ser necessrio fazer a omfenago do resultado do comando recortendo a mais de uma coluna. Problema: Selecionas todo o contetido da tabela Comissao, ordenado por Id. seuect * RON Comissao oRDER BY Id 14.04.2015 » 17:59:21 Aluno:PAULO EMANUEL ARAUX eltos Reservados = Copyright LTC - 9788521615583 - taclo = 3407573900184 = Sal ~ Structured Query Language015 » 17:59:21 = Es 160 cartrno sas 10141 1041674 » Estaclo - 3407573900184 = 24.04. Como vooé pode observar, a coluna fd esté corretamente ordenada. No entanto, 0s valores nas otras colunas apacecem em qualquer ordem, uma vez que nio foi solictada a sua ordenagéo. ‘A odem em que aparecem os valores nas outras colunas pode, inclusive, depender da imple- 1mentagao ¢ ser, por isso, diferente de sistema para sistema Para se ordenar 0 resultado de um SELECT por mais de uma coluna basta indicar, na ¢léusula ORDER BY, o conjunto das colunas pela ordem em que se pretende ordenar 0 resultado. Caso se indique que se pretence ordenar o resultado de um SELECT por mais de uma ccoluna, 2 ordenacio éfeita pela primeira coluna para valoces iguais, éordenada pela segunda coluna, ¢ assim pot diante. Nova Problema: Selecionar todo o conteddo da tabela Comissao, ordenado por Ide Id Msg. DOD:F4F4A6O9IB - Direltos Reservades ~ Copyright LTC - 9788521615583 - COD:F4F4A60916 - Direltes Reservados ~ Copyrl; DI setact * ROK Conisszo ORDER DY Td, 14 Mog 14.04.2015 » 17:59:21 » Aluno:PAULO EMANUEL ARALIIO FERNANDES - Matriculs: tos Reservades ~ Capyright LTC - 9788521615583 ~ aclo = 3407573900184 = Sal ~ Structured Query LanguageBs 0141 1041674 » Estaclo - 3407573900184 » 24.04.2015 = 17:59:21 = laze [P20 | 20500 | Ie I} 60 | 2600 | Ife I] 70 | 400 | Nag [¥ 200 | 3750 | Iges |] 29 1 2300 | Was} 30 | 270 | Ino? ly 20 | $500 | ifez i] 20 | 24220 | \p7 a0 | 20 | [a7 § so | 120 | \q2 IP a1 20 | [Yaz 30 | 170 | | 49] 20 | 2200 | onoenagio 161 Problema: Sclecionar, éatabela Contissao, as linhas cujo 1d seja menor do que 40. Oresultado -deverd ser apresentado ordenado por Id e pela eoluna Valor de forma descendente, 9:21 = Aluno:PAULO EMANUEL ARAUIO FERNANDES = Matriculs:2 § 8 3 eltos Reservados - Copyright LTC ~ 9789521615583 ~ COD:F4F4A60916 - Direltos Reservados - Copyright LTC ~ 9788521615583 - COD:F4F4A60916 - Direltos Reservados - Copyrl; Di aclo » 3407573900184 = seuect + RON Comissao WHERE 13 < 40 ORDER BY 1d, Valor DESC | 18] 20 | 20500 | jaa | 200 | 3750 | jaa] 60 | 2600 | jaa] 70] 400] jas] 10 | 2800 | | 25] 30] 3270] ia71 30 | a4230 | j27 | a0] 500 | ia71 50] az0] a7] ao] 20] (© comando anterior é semelhante a: FROM Comiesas WHERE 14 < 40 ORDER BY Id AGC, Valor Dace ‘Sql - Structured Query Languageeltos Reservados ~ Copyrl: Dit 10141 1041674 » Estacio - 3407573900184 » 24.04.2015 = 17:59:21 = Es DOD:F4F4AGO9IB « Direltos Reservades ~ Copyright LTC - 9788521615583 - COD:F4F4A60916 - Di eltos Reservades ~ Capyright LTC - 9788521615583 ~ aclo = 4075739000184 = J30 FERNANDES = Matriculs: is >AULO EMANUEL ARAI = a 3 3 ——— ADO FESSOR 162 cartrno sas 6.4 SELEGAO DE EXPRESSOES (O comando SELECT permite, além da selesdo de colunas, a selego de expresses ou mesmo aaselesio de constantes. Problema: Selecionar 0 Neme e a Idade de todas as Pessoas. Selecione também a Made que indo ter dagui a um ano, O resultado deverd vir ondenado por Nort. SELECT Nowe, Idade, Tdadee2 FROM Peszos ORDER DY None | Nome | rade | co1er | | antonio Dias | 43 | ae | | caiia worase | a6 | a7] | Florinda sindes | 38 | 36 | | teaber eepada | a | 29 | | José anténso | oar] ae] | Nascimento Augusto | 35 | 36 | | Faulo Viegas | 32] 3a] Como vor8 pode reparar, o nome da coluna que resulta da expressio ¢ ColOZ. Este nome pode variar de sistema pora sistema e é atribuido automaticamente por este. # Access Expr © SQL Server —(Coluna sem nome visfvel) + Oracle Tade-+1 * MySQL =~ Tad +1 ‘Onome com que uma coluna ou expressii € representada no resultado de um comando SELECT pode ser alterado através da cldusula AS nove. nome depois de cada coluna ‘ou expresso cujo titulo se pretende alterar BL_Accoss _|[G 9. Server | [_oracie | [5]_mysqu_| Sql - Structured Query LanguageIreltos Reservados ~ Copyrl: Dit ES » Matricula:20141 1041674 = Estaclo = 3407573900184 » 24.04 eltos Reservados - Copyright LTC - 9788521615583 - COD:F4F4A60918 ~ Direltos Reservados - Copyright LTC - 9788521615583 - COD:F4F4A60916 - 94.04.2015 » 17:59:21 - Aluno:PAULO EMANUEL ARAUJO FERNAND! Es 21° 5 acl » 3407573900184 = ——— OnDENAGKo 163 SELECT Nowe, Idade AS Td FRON Pessoa ORDER BY None Agora, Idade+i AS Tdadg Mais 2 | Anténio Diae i a] aa] | celia dorass I 26 | 27 | | Flerinda cinsee | 35 | 36 | | Teabel Bepada I 28 | 23 | | Joes anténic: I a7 | 28 | | Nascimento zuguste | 35 | 35 | | Paulo Viogse I 32 | 33 | Experimente agora o seguinte comando ¢ observe o resultado. Gl_Accoss | [il sa server | [grade __}(@i]_mysou SELECT Nene, Inde AS Tasde_Agors, ‘Nova Idada! AS M33, Tdede+1 AS Idade Mais 1 FRON Pessoa ORDER BY None | tdade_agora anténic Dias 2 célia Norasa Plorinda sintes iaabel Espada Joe’ Anténio. Rascitento Augusto Paulo Viegas 6.5 ORDENAGAO PoR Posicio Problema: Sclecionar, na tabela Comissao, 0 campo Valor a reeeber, 0 montante do imposto (19 5) €0 valor guido para os individuos cujo Id seja igual a 14 ou 25. SELECT 14, Valor 2S Liquide, Valer#0.19 28 Imposto, Valor+alor0.39 AS Brute FRON Comissao WHERE T4 IN (24, 25) ORDER BY 1d ‘Sql - Structured Query LanguageEst 21° 5 Ireltos Reservados ~ Copyrl: Dir ES » Matricula:20141 1041674 = Estaclo = 3407573900184 » 24.04 a 3 3 a 8 F ge 5 5 E . 8 38 83 gE eg 33 as a gz BE 3 rg r3 g & a 8 z sltos Reservados ~ Copyright LTC ~ 9788521615593 ~ COD: aclo = 4075739000184 = lect Maeaiiall PASTA DO PROFESSOR 164 cartrnosas ‘Sal » Structured | 18 | tiguido | imposto | arate | | 14 | 10500 | 2995.00 | 12495.00 | [a4 | 3750 | 72.80 | 4462.50 | |u| 400 | 76.00 | 476-00 | [14 | 2600 | 494.60 | 3098.00 | [25 | 2500 | 475.00 | 2975.00 | [25 | 370 | 70.30 | 440.30 | Como se pode verifiear, o resultado aparece ordenado apenas por Jd. Problema: Como é que se podesia ondenar por alguma das outras colunas? Solugo 1: Thdicando na cliusula de ordenacdo a expressdo de ordenagae” SELECT 1a, Valor AS Liquide, Valor*0.19 As Inposto, Valor+aloro.19 aS Brute PRON Coniasae WHERE Td IN [24, 25) cRDER BY 13, Valore0.19 Solugiio 2; Indicandona cléusula de ordenagdo.0 ndimevo da pesigio, dentre as colunas aserem_ apresentadas, da coluna ou colunas pelas quais se erctende ordenar o resultado, SELECT 14, Valor AS Liquide, Valor#0.19 AS Inposto, Valor+Valoz*0,19 AS BrULo WHERE Td IN (24, 28) ORDER BY Ia, 3
Copyright LTC & 7 - JUNTANDO VARIAS TABELAS Sumario ‘= Ligngio enue tabelas_*Produo caresiono de tabolas * Cross Join. = Eyui Join * Natural Join * Inner Join * Outeroin “UNION * Self Join * INTERSECT. * MINUS 1 INTRODUGKO Neste capitulo abordatemos a ligagio entre tabelas, operagio normalmente conbecida como Join Torr] On (ligaeio) entre tabclas permite extra, através de umn nico SELECT, informa «ges contidas em diferentes tabelas. (© Modelo Relacional estabelece clararnente as regras para a divisio da inforrnagao.ntee tabelas, {de forma a evitar a duplicagio de infoemagao. Essa dispersio da informagio por diferentes tabelas facilmente manipulivel através da linguagem SQL, uma vez que a ligagdo entre tabelas seré cealizada através da ligago entre as Chaves Estrangeiras ¢ as respectivas Chaves Primérias de onde so origindvias. Como 0 leitor ja deve saber, uma Chave Estrangeira é um campo ou conjunto de campos cexistente em uma tabela que permite ligar os dados desta tabela a uma outta, onde este mesmo conjunto de campos existe como Chave Primiria ‘A jungio entre tabelas ¢ feita colocando-se na eldusula FROM o conjunto das tabelas que se pretende juntar SELECT campo, . Campo, « campo. «+ FROM Tabala,» .. , Tebolay QueryDamas, Luls Esta JUNTANDO VARS TABELAS 169 Analisemos 0 contetido das tabelas Pessoa e Postal. | ta | None | tdede | satario | Telefone | cod postal | | 42 | anténio Dias | 43 | 7400.00 | 7o9658 | 3500 | | 5 | Célia Morais | 26 | 170000.00 | 123466 | 3100 | | 32 | Florinda sintes | 35 | 147000.00 | mux, | 4000 | | 47 | asabet Espada | 28 | se000.00 | MUL | 3100 | | 49 | cosé antenio | 37 | 220000.00 | mun | 1500 | | 24 | Nascimento aagusto | 35 | 220000.00 | 456123 | 2300 | | 25 | Paulo viegse | 32] 9000.00 | mun | 3500 | ‘Tabela Pessoa :20141 1041674 » Estaclo » 34075739000184 24.04.2015 » 17:59:21 = | codigo | tocalidade | coc | Lisnon aoc | bISBOA 3200 | LIEBon i500 | LISBOA zooc | sANTAREH 2300 | TOMAR coe | commRA 4000 | FoRTO 9000 | =UNCHAL ‘Tabela Postal lo = 34075739000184 » 24.04.2015 = 17:59:21 » Aluna:PAULO EMANUEL ARAUJO FERNANDES - Matricul ‘Como se pode observar, na tabela Pessou existe apenas 0 cédigo postal (valor numécico). A localidade associada 20 e6digo nao esti presente. Para se obter a localidade, € necessvio juntar as duas tabelas e estabelecer a selagio entre os c&digos postais das pessoas ¢ a respectiva localidade que se encontra na tabela Postal. ‘Vames entio a isso... 7.2, PRODUTO CARTESIANO DE TABELAS Para juntar as duas tabelas bastard fazer: seuect + FROM Pessoa, Postel Itos Reservados - Copyright LTC ~ 9789521615583 - COD:F4F4A60916 - Direltos Reservas - Copyright LTC ~ 9788521615583 - COD:F4F4A6091B - Direltos Reservados - Copyrl; Dire Sol - Structured Query LanguageIto Reservados ~ Copyright LTC - 9788521615583 ~ COD:F4F4A60918 - Direltos Reservados ~ Copyright LTC - 9788521615583 - COD:F4F4A6091B - Direltos Reservados = Copyrli Dire clo - 34075739000184 - 24.04.2015 » 17:59:21 - Aluno:PAULO EMANUEL ARAIJIO FERNANDES » Matriculs:201411041674 - Estaclo - 34075739000184 ~ 24.04.2015 » 17:59:21 = Esta Damas, Luls 190 cartru.o sere 0 resultailo € um tanto ou quanto inesperado... | x3 | tome | tdade |... | cod postal | codigo | localidade | | Ansénio Dias [opel 3800 | 1000 | Lispoa | | célia worais Low lee | 1100 | 1000 | tIsB0R | | Plorinda singee =| 095 | 1s. | 4000 | 1000 | Liszoa | | teaver eepada | a8 | ve | aioo | 1000 | LIsBoA | | Joss anténic foarpeed 3500 | 1000 | Lisson | | Rascinento Augusto | 95 |... | 2300 | 1000 | urssoa | | Paulo Viegas Joa pict 1500 | i000 | Lisson | | Ansénio Dias [oben d 3500 | 200 | uresoa | | célsa Norass |oow pied 4200 | 1100 | Lissa | | Florinda singee | 25 | «.. | 4000 | aco | uzszoa | | teaber tepada | 28 | os. | taco | 1100 | uissoa | | oss anténio foarte d soo | 200 | Lszoa | | Rascinento Augusto | 35. |... | 2300 | 1100 | LISBOA | | Paulo Viegas foazpicd asoo | 1200 | Liskoa | | Anténio Dias Poa teed 3500 | 200 | urssoa | | célia worais Fooled tig | 1200 | Lisson | | Plorinda sintes | 035 | vs. | 4000 | 1200 | uresoa | | teabel eopada | 28 |. | taco | 1200 | urssoa | | Joss anténio Poa p lly i500 | 1200 | Lisson | | ascinenso Augusto | 35 |... | 2300 | 1200 | urssoa | | Paulo Viegas Pope d soo | 1200 | Liszoa | | anemic Dias foe pll asce | 3500 | trseos | | cSlsa Norais foe ply tao | 1800 | Lrszoa | | Plorinds singee | 95 | 2s. | 4000 | asco | uzcnoa | | teaber Bspada | a8 | vs | rig | 1500 | Lisson | | Joss anténio foarteed 3500 | 500 | Lisson | | Mascinenco Augusto | 35 |... | 2300 | 1500 | uszoa | | Paulo Viegas Poa peed 3500 | 1500 | LIssoA | | ancenio Dias footie d soc | 2000 | SANTAREN | | cslsa Norass foe p ly 4200 | 2000 | SaNTAREM | | Florinda singee | 95 | 1. | 4000 | 2000 | sawzanex | | tsabet espada | 28 |. | aac0 | 2000 | sawzaRen | | S028 antéaio foary ly asoo | 2000 | sawzanex | | mascimenco auguato | 35 | ... | 2300 | 2000 | SANTAREM | clan | pay tee | nee [ane I Obtém-se um resultado bastante inesperado e que consiste no produto cartesiane des dois conjuntos de elementos. [ror] OPeolato Catsiano ene a tbelas Pessoa e Posi assoca a ela na da abela Pessoa 0 conjunto das linhas da tabela Postal. O niimero total de registros que resulta do comando SELECT anterior igual a63.A tabela Pessoa contém 7 registros ea tabela Postal 9 registros. Assim, como cada registro de Pessoa é ligado a0 conjunto des registtos da tabela Postal, o resultado final consiste em 7*9 = 63 registro. Sol - Structured Query LanguageDamas, Luls yr Dire > Copy Bo PROFES & 2015 » 17:59:21 Esta 4.04, uvtanoo VARiNS TABLAS TL Tagine qual seria 0 resultado se 2s tabelas contivesseam milhares de registro 0918 » Direltos Reservados (© mesmo resultado seria obtido se a ordem das tabelas fosse trocada. Apenes a ordem em que as colunas iriam aparecer seria diferente. [Tera] © Produit Crtesiso cate tel tmbém&ceeido por CROSS JOIN A proptsito,o Ietor nunca devers esquecer que 0 computador nio € propriamente um peimor de inteligéncia’, eo sistema que gerencia o banco de dados também no. Por isso, ndo se pode «esperar que uma méquina consiga interpretarasidéias que temo armnazenadas em alguns milhes de nousSnies © que, por vezes, ni so tio elaras devido a isso. Repate que ne abela Pessoa existe um conjunte dé campos numésivos (ld, idade, Salario, Cod_ Postal). Nenhuma das colunas tem o mesmonome (Codigo) dacoluna existente natabela Postal. Por isso, ndo poder‘amos esperar um comportamento muito melhor por parte do stems. 9788521815583 - COD:FAFAA\ 0141 1041674 » Estacla » 3407573900184 = No entanto, pretende-se obterinformagSes existentes nas duas tabslas, mas que estejam rela- cionadas de algum modo. As tabelas Pessoa ¢ Postal estio relacionadas através dos campos Cod_Posta tabela Pessoa) ¢ Codigo (tabela Postad). = Copyright LTC ‘Oproblema é que para cada linha da abela Pessoa s6 nos imeressa visualiza © registro associado que cexistona tabela Postale que tem 0 eédige igual, isto é, em que o valor de Cod Postal ~ Codigo. ‘Assim, o que se terd que fazer € exatamente escrever este mesmo pensamento, mas recorrendo a0 comando SELECT: seuect + FROM Pessoa, Posts) HRRE Cod Postal = Codigo FERNANDES » Matricula: ltos Reservados JBL ARAU! 43 | 74900.09 | 789654 a¢ | 17900000 | 123456 Pl 35 | 347909.00 | succe 37 | Teabel Bopat 20 | 96000200 | Re i 3509 1 i i 49 | Jose anzéalo | 27 | 2x0000.00 | wc, i i 2300 COD:FAF4ASO9IB ~ DI nda Simoes 100 | LrsBoa, 1509 | urssoR 2300 | TOMAR 500 | L188 ‘1 » Aluno:PAULO EMANI 1615583 14 | Nascimento Augusto | 35 | 220000.00 | as6i28 25 | paulo Viegas 32 | 95009.90 | wz cobtendo-se assim o resultado pretendido, 1015 » 17:59: run weiamento de que pare. me era que uma aplicag desemolvis por ma Sofare-towse muito faesa cemParngs demcenen ma de 2¢ hee: para foer uma detenninads tage, eno gta mal do que S segs de CPU [Dinoee pole cmchir que signi exe ot bela diva exer mated 2 rocesnmenta ce miquia utd pe fcr 0 predito caecino relive jung das wis tel. (Nota a Batagem nunca chego a er coach, pore 9 sage procenioerssempe ein fim de 24 hore) * Alnda bem, sno ae gantifnin diniealgam, 24.04 739000184 = tos Reservadios - Copyright LTC ~ 97885: clo » 3407: Sal - Structured Query Lanauaceireltos Reservados ~ Copyright LTC - 9788521615583 ~ COD:F4F4A60916 - Direltos Reservados ~ Copyr: Dire F4F4A6091B - DI 24.04.2015 ~ 17:59:21 » Aluno:PAULO EMANUEL ARAUX cop: tos Reservadios - Copyright LTC ~ 9789521615583 - clo » 3407573900184 = 015 » 17:59:21 = Esta 24.04.21 90141 1041674 » Estacio - 3407573900184 = 10 FERNANDES = Matricul Damas, Luls 192. cartrno sere A jungdo de duas ou mais tabelas ¢ feita através das chaves estrangeiras, na cléusula WHERE. Caso milo se faca a jungio, o resullado € 0 Procuto Cartesiano das duas tabelas. ‘Ao observar 0 comando anterior seuect « Pessoa, Postal NHERE Cod_Postal = codigo. verifica-se que tolas as colunas,pertencentes @ ambas as tabelas, serdo apresentadas no rest tado do comando. Como a ligago entre as tabclas érealizada atrevés da igualdade entre duas colunas, este tipo particular de join chama-se Equi-Join, Estamos diante de um *qud-Jom” quando todas as colunas das tabelas sao apresen- tadas ea ligagdo entre as tabelas éfeita através de uma igualdade, dando origem assim a duas colunas de conteddos exatamente iguais, one | Yaade | Salaria | Tolefone | [oxi festar | Cadign|| tocaticade | Datéaio Dias | 43] 74000.00 | 7a9csa | as00 | 500]| tssca | oblia Morais | a8 | ar0000.00 | azsass | i200 | 100]| Lisson | Florinda simas | 45 | 147000.09 | WEL | 8000 | 000]| rom | Inapel Zepada | 28 | 6000.00 | WEE | aa00 | 1200]| rrseca | Joe8 Antéaio | 47 | ax0000.00 | wu aso | 1500]| uxescn | Nascinenco Augusto | 35 | 220000100 | asea23 | 2300 | 2300]| row | Paulo Viegas 132] 95000,00 | mu soo | 1500]| urssca | © contesdo das colunas Cod Postal e Codigo é exatamente igual devido & condigdo de jungio colocada no SELECT. cod_Postal = codigo [No entanio, ndo faz muito sentido que na junio das tabelas se obtenham duas colunas com a mesma informago. Poe isso, quando se far a jungdo de tabelas é comum selecionar as colunas sem que exista repetigdo de dados, de modo a representa de forms mais natural a idéia que temos de june. A esta juneo chams-se Natural Join, Um “Nanural Join” existe quando todas 2s colunas envolvidas na ligagio entre as tabelas sdo apresentadas sem repetigio de eolunas. Nova aemplo de Rquioin Gl_Accoss (Gl sx server |G] orate _) (B_ mys) SELECT Peasoa.t, Postal.+ FROK Pessoa, Postal WHERE Codigo = Cod_Postal Sal - Structured Query LanauaceEsta tos Reservades ~ Copyright LTC - 9789521615583 ~ COD:F4F4A6091B - Direltos Reservados ~ Copyright LTC - 9789521615583 ~ COD:F4F4A6091B - Direltos Reservados - Copyrl;_ Dire clo = 34075739000184 = 24.04.2015 = 17:59:21 » Aluna:PAULO EMANUEL ARAUJO FERNANDES » Matriculs:20141 1041674 - Estacio » 34075739000184 » 24.04.2015 17:59:21 = JUNTANDO VARS TABELAS 173 T za | now | taace | Seterio | tetefere | Cod posted | Codigo | Lecalicace | | 42 | Anténio Dine | 43 | 74oco.c0 | 289684 | asco | 2600 | Lisson | |S | cétia merase | 26 | a700c0-00 | azzase | 3ico | 200 | tienen | | 32 | Florinds sintes | 35 | aa7coc.oc | mmx || ©4000 | 4000 | Forma | | 37 | asckea topada = | 26 | e6coo.00 | mu | zico | 7200 | niss0n | | 49 | sone ancente | 47 | 10000100 | mut, | asco | 1500 | t38H0R | | 36 | Nascimento augusto | 36 | 220000.00 | 486123 | 7300 | 2300 | soMaR | | 25 | pacle Viegse | 33 | s80c0.00 | mu | asco | 2600 | Lisson | Exemplo de Natural Join: SELECT Pessoa.*, Postal tocalidade FROK Pessoa, Postal WHERE Codigo = Cod_Postal ou SELECT Pessoa.*, Localidade FRON Pessoa, Postal WHERE Codigo = Cod_Postal | £a | none | taade | Selario | Telefone | cod_postal | Localidade | | 42 | anténio Diss | 43 | 74000.00 | i aseo | urssca | | 5 | catia worais | 26 | 270000:00 | i 1100 | LIseoR | | 92 | Florinda sinSes | 35 | 147000.00 | i 4000 | Foro | | 37 | taper sspaca | 28 | €000.00 | I anoo | Lisson | | 49 | José ancénic | 37 | 21¢000-00 | i 3500 | uiseon | | 24 | Nascimento Augusto | 35 | 220000.00 | 456129 | 2300 | Tor | | 25 | Pauto Viegas | 32 | 5000.00 | uu | 1500 | LIseOR | De qualquer forma, esses dois tipos de ligagio entre tabelas fazem parte de um tipo de ligagio ‘mais geral denominada Inner Join. 7.3 INNER JOIN (© Inmer Join comesponde a uma outra designago para o tipo de Join habitual em que se juntam dduas ou mais tabelas, ligando-as através da Chave Primvdria de uma ¢ da Chave Esirangeira da outa. [Em um Inner Join, apenas so apcesentados os registaos em que exista ligagio entre astabelas. Sol - Structured Query LanauaceEsta 194 castro sere Bxeraplo de Inner Join: SELECT Nome, cod_postal, Localidade FROK Pessoa, Postal WHERE Cod_Fostal = codigo 0141 1041674 » Estacio - 34075739000184 = 24.04.2015 » 17:5 | tome | ced_postal | lscatidade | | antonto Dia | 1500 | utseoR | | Célia Morais | anoc | itse0n | | Florinda simes | 000 | PoRro | | Teabsl Bepada | atoo | Lisbon | | vosé Anténio | soo | utseon | | Nascinanto Augusto | 2300 | TOMAR | | Paulo Viegas I i500 | utspoa | Embora existam diversos tipos de ligagdo entre Tabelas Joins), este € o tipo mais comum € mais uilizado. Problema: Selecionar o Nome e o Endereco completo (Enderego, Codigo ¢ Localidade) de todos os indiviuos. SELECT Nome, Cod_postal, Localidade FROK Pessoa , Postal RHERE Cod_Postal = Codigo 9:21 = Aluno:PAULO EMANUEL ARAUIO FERNANDES = Matriculs:2 | one | cod_postal | Localidada | | antonio Dias I soo | LIseoa | | célia Morais I ano0 | ursn0a | | Florinaa simee | 4000 | PoRTo I | teabel Bopada I anoo | uxsc0a | | vous anténio i 1soo | Lisson | | maecinento augueto | 2300 | TOMAR I | Paulo viegae I asco | urseoa | [ror] Noexemnlo anterior. intern colocarocampo Cod Pasta Codigo no comando SELECT. £ a 5 8 3 i a a ; i - 8 g 5 8 5 . 3 i 2 i 3 3 2 i : 8 8 é 8 & g z & : 3 = 3 é 8 8 a 3 3 8 8 B k 3 ot - tee aie ie aie eetos Reservados ~ Copyright LTC - 9789521615593 - COD:F4F4A6031B - F4F4A6091B - DI 94.04.2015 » 17:59:21 » Aluno:PAULO EMANUEL ARAL X 8 % i 8 8 & § : 8 Ireltos Reservados ~ Copyrl: Direl 10141 1041674 » Estaclo - 3407573900184 = 24.04. 015 = 17:5: 10 FERNANDES = Matriculs: 3 3 & & g 3s Juntanoo VARiNSTaBELAS 175 Problemix: Selecionar,unicamente, as localidades das pessoas que ndo tém telefone. Resolugio: Lovalidadcs aprescntadas com repetigacs. SELECT Lecalidade FRON Pessoa, Postal WHERE Cod Foetal = Codigo AND Telefone TS NULL | wocalidade | PORTO LISBOA, i I i | urspoa, Resolugiie: Localidades apresentadas sem repetighes. SELECT DISTINeT Localidade FROM Pessoa, Postal WHERE Cod Foetal - Codigo AND Telefone 1S NULL | tocaladade | | uszoa | | Porto: I ‘Seos campos de selegio.ou junio de dua tabelas tiverem omesmo nome, entio para climinar quaisquer ambigtiddades cada um dos campos deve ser precedido do Nome da Tabela, seguido de um Ponto, Nora Problema: Selecionar todas as Comissdes e 0 seu benelicisnio (Ud e Nome). Resolugio: Para obicrmos os valores teremos que juniar as tabeles Pessou ¢ Comtissao. SELECT Peesoa.Ta, None, Valor DRE Pegeoa.ta - Contooac.ta ul , Sec ibaDamas, Luls Esta 196 cartrno sere 0141 1041674 » Estaclo - 3407573900184 » 24.04.2015 = 17:59:21 = | 2a | mone | vaier | | 14 | mazeimento Augusto | 10500 | | 25 | Paulo Viegas | 2800 | | 14 | Nascimento Augusto | 3750 | | 14 | Nascimento Augueto | 400 | | 37 | reabel sepada | 20 | | 37 | Teabol Eepada | 14230 | | 37 | isabel pepada | s500 | | 14 | Nascimento Augusto | 2600 | | 25 | Paulo Viegas | ato | | 42 | ancénio Dias | 20} | 37 | zeabel zepada | 320 | | 42 | antonio pias | 370 | | 43 | coe anténio | 2300 | Problema: Selecionar 0 Nome ¢ 0 Valor das Comissdes, oréenando o resultado por Nome, colo- cando os maiores valores de comissio no topo do resultado de cada individuo. SELECT Nome, Valor FROM Pesson, Conisao MHERE Pesgoa.t4 - Comiseas.14 ORDER BY NOME, VALOR DESC > 4075739000184 ~ 24.04.2015 - 17:59:21 - Aluna:PAULO EMANUEL ARAUJO FERNANDES - Matriculs:2 I | Antonio pias | 270 | | anténde Diae | 20] | teabel Espada | 34230 | | teabel Bepada | 5500 | | teabel tepada | 220 | | teape Bspada | 20 | | vosé anténico | 2300 | | nascinento augueto | 10500 | | mascinento Augueto | 3750 | | mascimento Augusto | 2600 | | Nascimento auguets | 400 | | Paulo Viegas | 2500 | | Panis Viegas | 370 | Problema: Selecionar todas as Comissdes, 0 seu beneficiirio ¢ a descrigdo da operago A que estao relacionadas. O resultado deve ser ordenado por Nome. “05 Reservades ~ Copyright LTC - 9788521615583 ~ COD:F4F4A60916 - Direltos Reservados ~ Copyright LTC - 9788521615583 ~ COD:F4F4A60916 - Direltos Reservados ~ Copyrl: DirelEsta 21° 5 ireltos Reservados - Copyrl; Direl ES » Matricula:20141 1041674 = Estaclo = 3407573900184 » 24.04 a 3 3 a 8 F ge 5 5 E . 8 38 83 gE eg 33 as a a2 BE 3 rg r3 g & a 8 z 0s Reservados - Copyright LTC ~ 9788521615583 - COD: + 3407573900184 - Damas, Luls PASTA PROFESSOR Do Juvtanoo VARS TABLAS 177 Resolugdo: Neste caso, necessitaremes das tabelas: * Pessoa onde cbteremos oNome + Comissio — onde obteremos 0 Valor da Comissio + Mensagem — onde cbtecemos a desctigio des cSdigos das comissdes. SELECT Nome, Mensagen, valor FROM Peseca, Comieeac, Meneagon WHERE Pasaca.td = Conigsa.34 AND Conieess.t4 Meg = Meneagen.74 Meg ORDER BY None \ | vaio | | anvénio Dias | wretes erpresas | | | Rnvénio Dias | Fretes Tnasvidaaie | 20 | | tsabel Espada —|Deslocastes | az0 | | Xeabel Repada | Vandae Bera | 20 | | Xeabel Bepada | Fxeten Bupresns | 34220 | | Taabel kepada | comsasio de Ventas | 5500 | | José Anténio | Fretee Indsvidanie | 2300 | | Nascinento Augusto | Combuativeis | “400 | | Nascimento Augusto | Comisedo de Vendas | 10500 | | Nascinento Auguste | Refeictes | 2600 | | Nascirants Auguste | ofertas | 3780 | | Paulo Viegas | coniseio de vendas | 2500 | | Paula Viegas | fretes erpresas | 370 | [ere] Asie tereciransn tare RRLECT Aapetecbeirde pelvarne =i condigdes de jungio. © Nome dc uma tabela pode ser reducido ou alterado cm um SELECT através da utilizagdo de um Alias, que deve ser colocado a frente da designagiio real da tabela © que passaré a ser uma outa forma de identifica a Tabela. NOTA Problema: Adicione § seleco anterior a coluna com 0 ID da Pessoa. SELECT P-3d, Nome, Nensagen, Valor FROM Paseca P, Comsesas C, Meneagen M WHBRE P.1d = ¢.1d AND e.ta_Neg » M.1d_Mag ORDER BY None:21 = Bstad 5 4.04.2 0141 1041674 = Estacla » 3407573900184 » 2. Ireltos Reservados - Copyright LTC ~ 9788521615583 - COD:F4F4A6001B - Direltos Reservados - Copyrl; Direl .04.2015 - 17:59:21 - Aluno:PAULO EMANUEL ARAUJIO FERNANDES » Matriculs: 05 Reservados ~ Copyright LTC - 9788521615583 ~ COD:F4F4A60916 ~ = 3407573900184 = ee ee Damas, Luls PASTA DO PROFESSOR 198 cartrnosere Observe que, apartir do momento em: que se coloca umn Alias no comando SELECT, os campos da tabela podem ser refereaciados como: + Nome_da_Tabela.Campo © Alias.Campo * Campo (se nao houver ambigiidade entre os nemes dos campos) em qualquer das cliusulas cin que podem ser cotocados. ‘impertanterecslta que,em alguns sistemas, assim queé definido um alias deia-se de poder referenciar campo usando omome da abel. Embora de uso ainda pouco comum, € possivel, em alguns sistemas, escrever 0 comand SELECT Nome, Cod_Postal, ROK Pessoa, Fostal MHERE Cod Postal = Codigo: em um formato em que se especifigue a natureza do Join (INNER): SELECT Nome, Cod_postal ROK Pesaca ZHMBR JOIN Postel ‘OW Fessca.cod_Fostal = Postal.codiao 7.4 OUTER JOIN Bate tipo particular de Jungdo permite estender 0 conjunto de registros que & obtito através do Inner Join. Problema: Selecionar o Cédigo Postal ¢ Nomes de todas as Pessoas, Resolugio: Através de Inner Join. SELECT None, Cod postal, Codigo, Leealidade FROM Postal IMMER JOIN Pessoa (OW Posts). Codigo = Passoa.Cod postal ou através da jungio tradicionalee ee a ee Damas, Luls Bstac 015 » 17:59:21 = Juntanoo VARINSTABELAS 179 Ireltos Reservados - Copyrl: Direlt J3O FERNANDES - Matricula:20141 1041674 » Estaclo - 3407573900184 = 24.04. SELECT Nowe, Cod postal, Codigo, Localidade FROM Postal, Pasesa BRE Codigo = Cod_postal | Nome | Cod_postal | codigo | Lecalidade | | Anténio Dias 1 aco | 3800 | rzs80n | | célia Norais I aico | 2200 | LISBOA | | Florinda eines | acco | Goo | reer | teabel Espada I aico | 1200 | LISBOA | | Joes antenio | 3500 | 3600 | Lisson | | ascinento Augusto | z3co | 2300 | aan | Panto Viegas | 3500 | 3500 | Lishoa | No Join tradicional, a jungdo entre as tabelas TI ¢ T2 é sempre realizada apenas para os valores eT! que tenham um valor comrespondente em T2. © papel do Outer Join & estende este conceito, permitindo que totalidade des linhas de uma tabela seja obtida, ainda que nio exista o valor corespondente na outra tabela a que esta esti ligada pela jungao. Repare que na execugio do comando anterior sio apresentados apenas os eéigos postais que esto associados ds pessoas existentes no banco de dados. Os outros e&eigos postais, que ni tém pessoas associadas, néo sio apresentados, Através de um Outer Join é possivel obter, por exemplo, a lista de todos es e6digos postais & rrespectivas pessoas, mesmo que para aqueles cSdigos no exista qualquer pessoa associada, g 3 & g 2 z i g = = a 8 8 3 3 | tome | cod_postsi | codigo | Locslidade | I I | ao00 | Liseoa | | célia Morais I anoo | 3300 | rxsp0q | | tsabe1 Bspada I aaoo | 1200 | Lisson | I I | 3200 | Erszon | | ancento pias i asoo | 1800 | LIssoa | | Joss anténis i asco | 1500 | tispoa | | Paulo Viegas I asco | 1800 | Lissoa | i I | 2000 | sawraRsw | | Mascinento Augusto | 2300 | 2300 | TONAR i I I | 2000 | coNBRA | | Florinds cinées | 4000 | 4000 | FoRTO I a i I | g000 | FuNcHaL | SELECT Nene, Cod postal, Codigo, Lecalidade FRON Postal’ LRET JOIN Pessoa a 3 i 5 8 3 g 5 g 8 3 z i é 2 a 3 3 $ OW Foetal. Codigo = Peesoa.cod postal z Como se pode cbservar, todas as linhas da tabela Postal sdo apresentadas. os Reservades ~ Copyright LTC - 9788521615583 - COD: lo = 4075739000184 =a ee a 2% Damas, Luls PASTA D 2015 » 17:59:21 = 4.04. 180. cartru.o sere Para cada uma delas, se existr o valor correspondente na colina Cod_Posial na tabela Pessoa, sio mestrados ¢s dados, senio as entradas pertencentes & tabela Pessca sto preenchidas com NULL. 0 Outer Join pode ser realizado & esquerda ou & direita, isto é, quando se faz a ligagdo entre das tabelas serd mostrado, respectivamente, odo o contetido da tabela da esquerda ea respectiva ligago 8 tabela da direita, ou sera mostrado todo o contetido da tabela da diteitae a respectiva ligago a tabela da esquerda )D:F4F4AGO9IB - Direltos Reservados ~ Copyrl: Cada fabricante utilizou uma estratégia distinta pare implementago do Outer Join. 3 3 5 a 3 z ‘Normalmente é utilizado um operador gue & colocado’ esquerds ou direita dosinal de igual para a realizagao do Outer Join. Vamos entao observar as implementagdes dos virios fabricantes. 7.4.1 OUTER Jol IMPLEMENTAGRO EM ACCESS & SQL SERVER & MYSQL. Bm Access, SQL Server ¢ MySQL 0 Outer Join & implementado através das palavras reservadas LEFT JOIN c RIGHT JOIN. Quando 0 Outer Join & realizado 2 esquerda, sio considerados todos os registros da tabela da esquerda e apenas os registros correspondentes na tabela da dineit. (L_Access _} (sa. server |] _oracie_) [E|_mysau_) 10 FERNANDES = Matricul ireltos Reservados ~ Copyright LTC - 9788! 3 SELECT None, Cod_postal, Codigo, Localidade 2 FROM Postal ‘URPT JOIN Posscs 2 ad of Fostal.codigo = Fessoa.cod_postel ag a2 Bs : : . . ‘ 3 | Kone | cad postal | codigo | Lacalidade | zo + ie | sun \ wot | 1000 | ussox | Eg | celia Morate = | —=sn00. | a800 | tapeen | a3 isabel Hepada | ti00 | i1c0 | utsson | Be ! 88 | sone i No | 4200 | uiszon | as | Raténio Dias | xsoo | asco | ursson | B. | Sons anténio i xs00 | asco | urson | Ba | Paulo Viegas i 1500 | asco | urssox | Se | xu, i NuuL | 2000 | SANTAREM | aR | Nascinents Augueto | 2300 | 2300 | Town | gs i seu, | ROLL | 3060 | compen | Ra | Florinds sinsee | 4ooe | 4000 | roo | a2 | soa i wot | 9000 | Funcran | a 5a Ea Quando o Outer Join é realizado 3 diveita, so considerados todos os registros da tabla EL da dircita apenas os registros correspondenies na tabela da esqucaa, 83 88 ee 85 é BgBstac 015 » 17:59:21 = 24.04.21 1615583 ~ COD:F4F4A60918 - Direltes Reservados ~ Copyrl; 90141 1041674 » Estacio - 3407573900184 = 10 FERNANDES = Matricul ireltos Reservados ~ Copyright LTC - 9788! a 3 3 3 3 & g 2 z i g z = a 3 3 os Reservades ~ Copyright LTC - 9788521615583 ~ = 34075739000184 » 2 ee, ee eee. Damas, Luls Juntanoo VARINSTABELAS 181 GN Comissao.1d = Pessoa.td Antonio Dias Anténio Dias 170 calia Worais NULL Plovinda singes wut Teabel espada 20 Teabel Espada 14220 Teabel Espada 5500 I I i I I | I Teabel Bepada | 320 i I I i | i i José Antonio Nascimento Auguato | 10500 Nascimento Augueto | 3750 Nascimento Auguato | 400 Nascimento Augusto | 2600 Paulo Viegae 2500 Paulo Viagae 270 (O Access obsiga a colocagio do Nome da tabela junto a cada Campo (formato Tabele, Campo) que seja colocado na condigao do Outer Join. Em SQL Servera indicagiio do rome da tabela 66 & necesséria se existir ambigtiidade entre os eampot. NOTA 7.4.2 OUTER JOIN: IMPLEMENTAGRO EM ORACLE ‘A implementagdo do Outer Join em Oracle € realizada através do operadoc (+). Este operador é indieado em seguida &coluna que se pretende preencher com NULL, caso nio cexistam os valores associados & colina da outra tabela. [eye | rere tos ov alors econ ds [rmente) | teers adoro vaores da couna ca eequera Exemplo de execugio em Oracle (SQL*Plus) OL Access —)(e[ sa server fil srade _)[O]_nivem ) SGl> SELECT None, Cod postal, Codigo, Localidade FRON Poste], Pessoa weinRE Cod_poscal (+4) = codsgora es Damas, Luls Estacl 182 cartru.o sere cOD_POSTAL —GODIGO._LOCALTADE 1000 LISBOA Célia Morais aoe an00Lisnoa iesbel Eapada aac 3200 LisBoa 3200 LisBoa Anténio Dine asco 3500 Lispoa José Antonio soo 3500 LisHoa Paulo Viegas as00 3500 LicBoa Nagesmanto Augusto 2200 2200 TONAR 2000 COINBRA Florinda Sinéea acoc 4000. FoRTO 9000 FUNCHAL :20141 1041674 » Estaclo » 34075739000184 24.04.2015 » 17:59:21 = Exemplo: (G[ Access —)(6] Sax sever GI oracte —) [vst] SOL» SELECT Nome, Cod postal, Codigo, Lecalidade RON Postal, Fessoe WHERE Codigo - Cod_postal (4); NOME, COD_POSTAL —CODIGO LOCAL IDADE 0 = 3407573900184 » 24.04.2015 » 17:59:21 - Aluno:PAULO EMANUEL ARAUIIO FERNANDES = Matricul ooo LISBOA cSlia Moraie 1200 ©1200 LISBOA Isabel Expada 1ise 1200 LISBOA 3200. LIszoa Anténio Dias 1500 1500 LISBOA José Antanio 1saq «1800 LISBOA Paulo Vieges 1s0c 1500 LISBOA Naeeiments Augueto 23002300 TOMAR 3000 COINERA Plorinda Sindee 4000 40coPoRTO 9000 FUNCHAL 12 Linhae selecionadae, Relativamente & utiizagio do operador (+), a Oracle indicou as seguintes regras ¢ resrighes: + Ooperador( +) s6 pode aparecer na ctiusula WHERE, Nao pode ser colocado no SELECT, apenas pode ser aplicado a wma colina de una Tabela ou View. * Sealigagéo entre astabelas A eB é realizada através de multiplas condig&es, ooperador (+) em de ser utilizado em todas as condigées. * O operadar (+) s6 pode ser aplicado a uma coluna. Nao pode ser aplicado a expressoes, embora uma expresso possa conter uma coluna marcada com o operador (+). + Uma condigdo que consenka o operador (+ )udo pode ser combinada com outra coudlicdo uatilicando 0 operador dgico OR. 25 Reservadios - Copyright LTC ~ 9789521615583 - COD:F4F4A60916 - Direltos Reservades ~ Copyright LTC - 9788521615583 - COD:F4F4A60916 - Direltos Reservados ~ Copyrl; Direlt0 Se eee eres were ff Damas, Luls Zo basta po @ PROFESSOR 5 3 ovens * Uma condic¢iio néo pode wilizar 0 qperador IN para conparar uma coluna marcada com 9 operador (+) com uma outra expresso. * Uma condigao ndo pode comparar una colwna marca como operador (+) com wna subconsulta (SubQuery)- 7.5 UNION ‘Uma unio nio & propriamente uma ligagéo entre tabelas, A.UNION permite juntar 0 contetide de dois ou mais comandos SELECT, Problems Juntaro Cédigo ¢ a Descrigio associados is Mensagens aos Cédigos Posais. 0141 1041674 » Estacla » 3407573900184 = F4F4A60916 ~ Direltos Reservados - Copyright LTC ~ 9788521615583 - COD:F4F4A6091B ~ Direltos Reservados ~ Copyrl; 2 SELECT 15 Neg, Mensagen FROM Mensagen z voxtom = : SELECT Codigo, Localidade FROM Postal Z | 3d meg | Nensage \ é | 20 | conisstio de Verdss | © | 29 | Freres inaivsauase | 8 | 90 | Pretes Enproane | 3 | 40 | Vendas extra | 3 | 80 | Destocags \ a | 6 | xeteictes | g 79 | conbustswei 2 ! ! | < | 80 | Transportes | z | 90 | teiafenenas \ g | 300 | oferta I 3 | 2000 | brssoa ! te | 3400 | xrepon ! 3 | 1200 | LrsBoa | € | 3800 | LrsBoa | = | 2000 | SANTAREM | “ | 2300 | towar | a | 3000 | commana \ B | 4900 | FoR I £ | 9900 | Fowcant i 3 Em uma UNION, o niimero de campos a serem selecionados em cadaurn dos comandos SELECT tem de ser igual. O nome dos campos nio ¢ relevante, mas o tipo de datos que pode ser agru- ppado varia de sistema para sistema. Em uma LINION, o nome das colunas apresentado no resultado€ o nome das colunas selecionadas na primeira instrugdo SELECT. »5 Reservados ~ Copyright LTC ~ 9788521615593 ~ COD: 0 = 3407573900184 = 24.04.Sk ‘oq - Structured Query Language E zi Damas, Luls BQ pasta vo 3g PROFESSOR R ge 8 g 184 cartru.o sere ga Cala comando SELECT pote conter a sua prdpria cléusula WHERE, No entanto, 96 poderé existir uma tinica clSusula ORDER BY no ltimo SELECT, sendo ordenagio aplicada a todo o resultado, Problema: Juntar as tabelas Postal (Locais contendo a string AR) e Mensagem (Id_Msg ‘menoe ou igual a 50). Ordenar o resultado pela coluna das deserigdes. Loess _ |G sar. sowver | (| _oracio_} i]_mysra_| SELECT 14_Nsg, Mensagen FROM Nensagen WHERE 14 Meg <- 50 ‘owrox SELECT Coaigo, Localidade PRON Postal WHERE Localidade LIKE '¥aR®! ORDER RY Mensagem (Access (0 an Server | (O]oracie (1 nwa) SELECT Td_Neg, Mensagen FROM Nensagen WHERE ta Mag <- 50 SEIRCT Codigo, Localidade FROM Poatal HERE Localidade LIKE '*aRe! ORDER BY Mensagem :21 » Aluno:PAULO EMANUEL ARAUJO FERNANDES » Matricula:201411041674 - Estaclo - 3407573900184 - | Ta.Meg | Nensagom i | 10 | Comissas de Vendas | | 80 | Deslocagtes | | 30 | Fretes empresas | | 20 | Pretee tndividuase | | 2000 | sawzarex I | 2300 | TOMAR | | 40 | Vendas extra I Como facilmente pode ser verificado, o nome das colunas é © que resulta do primeiro SELECT colocado na UNION. seLacr ra) . Moneagen RCN Nensagen ‘As restrigdes presentes em cada uma das cléusulas WHERE sio aplicadas ao respective SELECT. 5 a & z A ordenacio, apesarde s6 ser colocada no titimo SELECT, aplicada 3 totalidade da(s) colunais), endo apenas a0 conjunto resultante do thkimo SELECT. 15 Reservados ~ Copyright LTC - 9788521615583 ~ COD:F4F4A60916 ~ Direltos Reservados ~ Copyright LTC - 9788521615583 - COD:F4F4A6091B - n = 3407573900184 =is Reservades ~ Copyright LTC - 9788521615583 - COD:F4F4A60916 - Direltos Reservades ~ Copyright LTC - 9788521615583 ~ COD:F4F4A60916 - Direltos Reservados ~ Copyrl: Direlt 9 = 3407573900184 » 24.04.2015 = 17:59:21 Aluno:PAULO EMANUEL ARAUIO FERNANDES = Matricul: g :20141 1041674 » Estaclo » 34075739000184 24.04.2015 » 17:59:21 = ‘Sq - Structured Query Language Damas, Luls JUNTANDO VARS TABELAS 185 Problema: Adicionar ao exercicio anterior 0 contexide das campos Id e Nome existentes na tabela Pessoa, (Gliaecnss —) Gian. secwer,| corte) Lyon) SELECT Td_Nog, Mensagen FROM Mensagen WHERE Ta Keg <= 50 unrom SELECT Codigo, Localidade FROM Postal WHERE Locelidade LIKE ‘4ant' SELECT 14, Noma FROM Paseca ORDER BY 2 1a eg Nensagen I 42 | Anténio Dias 10 | Comieedo de vendae 5 | Célia Worais 50 | Declocagéee 32 | Florinda simes 20 | Fretee Enproese 20 | Fretes Individuais 27 | 49 | vosé Antonio 2g | Nascimento Augusto 25 | Paulo Viegas 2000 | SANTAREN 2300 | TOMAR 40 | Vendas extra i I i i I I I Tesbel Espada I I I I i i I ‘Truque: Se vocé pretender juntay, através de uma UNION, tabelas que no possuam o conjunto de campos necessitio, voce pode resolver este problema adicionando a constante NULL & sclesio. Problema: Unir 0 contetdo da tabela Posial a0 contetide da tabela Pessoa. (BL Aecess | Gi sat Server |(S] voce) GJ ysae SELECT 14, Idade, None, Telefons FROM Pessoa unrom SELECT C-dgo, MULL, Locelidade, MULL FROM Poste!‘Sql - Structured Query Language Damas, Luls Bstack PASTA DO PROFESSOR 186 cartru.o sere 3 2 a : 8 3 i 8 5 2 3 i z | 24 | Sade | None | Telefene | | 42 | 4 | antonio Dine | 7avesa | | 5] 26 | célia Morais | aasss6 | | 32 | 35 | Florinaa simes | uu | 5 | 37 | 29 | tenbel Eepada =| mua | 439| 27 | José antento ju | | 24 | 95 | Nasoinanto asgueto | 456329 | | 25 | 32 | Pauio viegas jam | [2000 | 9 | LrsBon ja | [2100 | 9 | uzss0n ju | | 3200 | 9 | xresoa jm | [2500 | | uzs08 ju | | 2000 | | sawrawen ju | [2900 | 9 | soma ja | | 3000 | 9 | coumarn jum | | 4000 | 9 | Porto ja | | e000 | | Fuwcane ju | Por defi, uma UNION remove sempre linhas duplicadas. SELECT Ta FROM Peeeoa SELECT 1d FROM Coniseas 39:21 = Aluna:PAULO EMANUEL ARAUJO FERNANDES - Matriculs:201411041674 - Estacio » 34075739000184 - 24.04.2015 » 17: ‘Mas a unio das duas consulias apresenta o resultado sem repetighes, = Reservades - Copyright LTC - 9788521615583 - COD:F4F4A6091B - Direltos Reservatos - Copyright LTC - 9789521615583 - COD: 8 a 4 3 3 8 B 3JUNTANDO VARS TABELAS 187 ‘Se, em vez de UNION, utilizarmos o operador UNION ALL, as duplicatas néo serio 5 3 5 8 ge & 7 & & & a8 3 Bas : 4 5 al a ee 5 BBo ff abe Bo ox ao ae oS BeOS RISA = TZIGSILT - STOZ"PO'T = PETOOUEE LELOFE - OPERA = PLOTPOTEPTOTHEIND}NEW = SACNWNUAY OLIVE TENNYWA OT¥d:OUNly = TZIGSILT = STOT'PO'bz = PBTODUGELSLOPE = | aq1eu1q ivAded - Sopeniesey S03/@N10 - ATEOSVesPsOD ~ EASSTSTTSBBLE ~ O17 IUSUAdOD ~ SopENueseH S03]0U1C - ATEOS¥bdPs!GOD - EASSTSTTSABLE ~ 917 IBUAdCD - sopeniesey =: g . 24.04.21 90141 1041674 » Estacio - 3407573900184 = yright LTC ~ 9788521615583 - COD:F4F4A60918 - Direltos Reservados - Copyrl; Direlte F4F4A6091B - Direltos Reservados ~ Copy 200: 24.04.2015 » 17:59:21 » Aluno:PAULO EMANUEL ARAU3O FERNANDES - Matriculs: s Reservatios - Copyright LTC - 9788521615583 - 3407573900184 » 2. ‘Sql - Structured Query Language Damas, Luls TA_DO OFESSOR 188. cartru.o sere 7.6 SELF JOIN O Self Join € mais uma variante do Inner Join no qual se comparam duas colunas da mesma tabela. Exemplo: SELECT pl.Codigo, p2.Localidade ROM Postal pi, Postal p2 WHERE pi.Codigo = p2.codigo xp. p2-Localidade <> '21SB0R" | coaige | nocalidade | | 2000 | sawzanen | | 2300 | tome | | 2000 | comera | | #000 | por | | 9000 | ruvcumn | ‘Quando se coloca duas ou mais vezes a mesma tabela em um SELECT, deve-se obti- atoriamente utilizarum Alias para evitar a inevitavel ambigiiidade que vai cxistir em todas as referencias aos campos dessa tabela, Bete tipo de Join & tilizado quando uma tabela estérelacionada com ela prépria Exemplo: Se cada empregadotiver um chefe associado, existe uma Relagdo Recursiva, poiso Ti do seu chefe iré aparecer na tabela associado a cada registro. Mas no podemos esquecer que cada chefe também é empregado na mesma empresa. 7.7 INTERSECT 0 operadoe INTERSECT permite juntar o resultado de dois comandos SELECT, apresentando apenas as linhas que resultam de ambos os comandos.* Problema: Selecione todas as linhas da tabela Postal cujo Codigo seja menor ou igual a x0. 10 OperalorINTERSECT <5 €ssporado pelo Orck,Bstacle FAF4AGQ91B - Direltos Reservados - Copyrl; Direlto 3407573900184 » 24.04.2015 = 17:59:21 » Aluna:PAULO EMANUEL ARAUSO FERNANDES - Matricula:20141 1041674 = Estaclo - 3407573900184 » 24.04.2015 » 17:59:21 = 5 Reservades ~ Copyright LTC - 9788521615583 ~ COD:F4F4A6091B - Direltos Reservados ~ Copyright LTC - 9789521615583 ~ COD: ‘Sql - Structured Query Language Damas, Luls JUNTANDO VARS TABELAS 189. SELECT * FROW Postal NHERE Codigo <= 5000 | codigo | tecalidade 000 ace az00 as00 2000 2200 3000 Problema: Selecionar todas as linhas da tabela Postal cujo Codigo seja maior ou igual 2 3000, SELECT * FROM Postal NHERE Codigo >= 3000 | codigo | Locslidade | | eee | suncuan | Problem: Selecionar todas as linhas da tabela Postal que sesultem da intersegao entre as duas ‘lkimas consultas, SELECT * FROW Postal NHERE Codigo <= 5000 SELECT * FROM Postal WHERE Codigo > 2000 | 3000 | comma | | 4000 | voRro I‘Sql - Structured Query Language Damas, Luls Direlto Sg PROFESSOR ae 8 190 cwtnsos ag a 3 7.8 MINUS a3 © operadoe MENUS devolve osegisos qu estan doprincko SELECT que nioaparecem & no segundo f Problema: Sclecionar todas as linhas da tabcla Postal cujo Codigo seja menor ou igual 2 5000, ignocando todos os elementos eujo Codigo esteja entre 2000 e 3000. Se Se GLa 9788521815583 - COD:FAFAAt 7 SELECT * FROM Postel WHERE Codigo <- 5900 a MENUS Zz SELECT * FROM Postal WHERH Codigo BRTWEEN 2000 AND 3000 ps O trends incior Coqsimlenié 2 (GL_Access _) sat server. (@]_oracie__) [B]_mysau_} 7 ncn * 3 7.9 RESUMO DAS JUNCOES 5 d AA seguir é apresentado um quaidro com o resumo das possiveis jungdes. z a : : a z ere Exeneiodo ner Join que apreveria fede os rites de uma das hcl tabelas, mesmo que sobre estes nao exista qualquer igaea0. B Cs ae TWTeRSECT Bs as 83 {OO MINS wap pl Oke eservade:8 - FUNGOES DE AGREGAGAO SumARIO “MAX +MIN + COUNT =SUM AVG =Fungies de apremagioe NULL = Fungdes de azrezardo © DISTINCT 8.1 INTRODUCAO Neste capitulo estudaremes as Fungies de Agregagao disponibilizadas pela linguagera SQL. Betas fungdes, também conhecidas como Fiancdes Estaitsticas, tém por objetivo obter infor ago sobre conjunios de linhas especificados na cliusula WHERE ou sobre grupos de Tinhas indicados na elusula GROUP BY’. As fungies de agregagio sao: [ rowske [pescmigao poount | devoiveonimero delinnas, | Jinx | dewiveoteorvierés colina [un | Derove e enor valor da otra [sum | bevove a soma de fodoo oe vlreo ca colina [ava] devove a Mada (eraGo) de fodoe os valor ta coun 8.2 FUNGAo COUNT % ‘A fungiode agregagio COUNT devolve o niimeco de linhas que resultam de um SELECT. Pode ser utilizada de txés formas distintas: [oescricao Derive oncknera de ovorrnclas na coluna derentes de NULL (COUNT (DISTINCT Goluna) | Dercve oraznera de ocoWendas cor epelies) na couna,‘Sql ~ Structured Query Language Damas, Luls :21 + Estaclo PASTA DO PROFESSOR 5 192 cartrootro 4.04. Resolugiio: A contagem do niimero total de linhas de uma tabela é feita ut COUNT), SELECT comT(*) AS Total FROM Pesaos | totar | Problema: Qual é 0 mimero de pessoas ¢ quantas tém telefone? SELECT COUNT(®) AS Totl, COUNT(Tslefone) AS Tot FROK Pesos | totz | totz | J30 FERNANDES - Matricula:20141 1041674 = Estacio - 3407573900184 = F4F4A6091B - Direltos Reservados ~ Copyright LTC - 9788521615583 ~ COD:F4F4A6091B - Direltos Reservados - Copyrl Direlto SELECT COMMT (Mone) AE T2ti, COUWE(Telefone) A Tot? FROM Pesson | tots | toe2 | 15583 - COD: Problema: Quanias pessoas tém telefone? (Bl sccoss |B] sau sorver |(fB]_oracto_|(i]_mysa_| SELECT COUNT(Talafone) AS ‘Total, FROM Pesaca 14.04.2015 ~ 17:59:21 » Aluno:PAULO EMANUEL ARAU: Reservatios - Copyright LTC - 9788521 + 34075739000184 =Sql - Structured Query Language Damas, Luls 221» Estaclo 5 FungQES OE ASRECSAGAO 193 4.04. | coeaa | ‘A aplicago de ume ou mais fungdes de agregagdo devolve sempre uma sinica linha de resultado, Problema: Quantas pessoasnéo tém telefone? Resolugiio: A solugdo deste tipo de problema consiste sempre em usar COUNT), pois a ‘contagem de valores NULL no 6 realizada se usarmos COUNT Telefone). SELECT COUNT(*) AS Total, RON Peasos WHERE Telefone 18 NULL :20141 1041674 = Bstacio - 34075739000184 = SELECT COUNT(+) AS Quantae FROM Comiesac WHERE Valor > 1000 F4F4A6091B - Direltos Reservados ~ Copyright LTC - 9789521615583 ~ COD:F4F4A6091B - Direltos Reservados = Copyriy_ Direltos | ouantae | 14.04.2015 ~ 17:59:21 » Aluno:PAULO EMANUEL ARAUIO FERNANDES - Matriculs:2 seuect 1a FROM Comissac Reservades ~ Copyright LTC - 9788521615583 - COD: > 3407573900184 -Sql - Structured Query Language Damas, Luls 015 » 17:59:21 = Bstaclo 194 cartrunoorro 4.04. ireltos Reservados - Copyrly Direltes 90141 1041674 » Estacio - 3407573900184 = Como se pode obscrvar, ¢ coluna Jd aparece com os valores repetidos. Poe isso, para resolver 0 problema: Problema: Quantos sto 0s Md relacionados 2 tabela de comisstes? g Z g E z Z = & g g 3 2 g 2 g i g 2 =< a é g § g SRLECT COUNT|I4) AS Total conissae Com esta soligSo iremos obter o niimero de todos es Id, ineluindo as repetigbes, | toad | a 3 i z i 8 8 5 3 € j i 2 i 4 3 2 i aca climinae repetiedes, deve-se utilizar a elfusula DISTINCT dentro da contagem da coluna [nore] palsvra reserata DISTINCT, dento dos partnteses de uma Fungo de agregazio, cexecuta essa fungi ignorand repetigbes, Problema: Quantos sio os Id relacionados & tabela de comissies? SELECT COUNT (DISTINCT 14) AS Total FROK Conieeao Reservadies - Copyright LTC ~ 9789521615583 - COD: ~ 3407573900184 ~Sal » Structured Query Language Damas, Luls PASTA DO PROFESSOR 015 » 17:59:21 = Estaclo FungQES OE AsRECSAGKO 195 Obtemos, assim, o ntimero total de Md relacionados, sem as repetigées? | toad | 8.3 FUNGOES MIN E MAX ‘As fungDes de agregagiio MIN ¢ MAX permitem obter o menor 0 maior valor de uma deter sminada coluna, Problema: Qual éo valee do maior salétio pago nesta empresa? 10141 1041674 » Estaclo - 3407573900184 = 24.04. SELECT WAX |Salaric) A Big one FROM Pessoa 04.2015 - 17:59:21 - Aluno:PAULO EMANUEL ARALIIO FERNANDES - Matriculs:2 Problema: Qual é a ide do empregado mais novo? SEDECT MIN (Idade) AS Min_Idade FROM Poseos F4F4A6091B - Direltos Reservados ~ Copyright LTC - 9789521615583 ~ COD:F4F4A6091B - Direltos Reservados - Copyrl_ Direltos | xin_tdade 1 at | Problema: Quais so © menor ¢ © maior valor de comissio superior a 1000 ¢ inferior a 50002 GL Access —_|(B] sot server (G]_orece _) mys.) SO Assess implemeata en face Reservatios - Copyright LTC - 9788521615583 - COD: - 3407573900184F4F4A6091B - Direltos Reservados ~ Copyright LTC - 9789521615583 ~ COD:F4F4A60916 - Direltos Reservados - Copyri: Direltos 94.04.2015 » 17:59:21 » Aluno:PAULO EMANUEL ARAUIO FERNANDES - Matriculs:2 Reservatios - Copyright LTC - 9788521615583 - COD: - 3407573900184 ~ Sal » Structured Query Language Damas, Luls PASTA DO PROFESSOR 015 = 17:59:21 = Esta 196 cartrunoorro SELECT MIN(Valoz) AS Menor, MAK(Valor| AS Naior FROK Conteeae WHERE Valor > 1000 AND Valor < 5000 | menor | maior | | 2300 | 3780 | =] As fungdes Min © Max podem ser aplicadss a colunas que nio contenham valores rmuméricos, No caso de serem aplicadas a campos do tipo string, sio devolvidos os Menor ¢ Maior valores usando uma comparacio alfabética. Now Problema: Qual é 0 nome do primeiso individuo, considerando os nomes ordenados alfabeti- camente? SELECT MIM (None) AS Prineize 10141 1041674 » Estaclo - 3407573900184 = 24.04. | primeiro | | anzenie pias | Problema: Eo dltimo? SELECT WAX (Nome) AS Ultimo | Paulo viegae | 8.4 FuNcio SUM ‘A fungio SUM devolve a soma de uma determinada coluna. Problema: Qual €0 valor total das comissées pagar?F4F4A60916 ~ Direltos Reservados - Copyright LTC ~ 9788521615583 - COD:F4F4A60918 - Direltos Reservados - Copyrl; Direltos . 34075739000184 ~ 24.04.2015 - 17:59:21 - Aluno:PAULO EMANUEL ARAUJIO FERNANDES » Matricula:201411041674 Estaclo - 3407573900014 - 24.04.2015 - 17:59:21 - Estaclo Reservados - Copyright LTC ~ 9788521615583 - COD: Sal ~ Structured Query Language Damas, Luls FUNQOES DE ASRECEAGKO 197 SELECT SUM |Valor) AS Comissoes RON Comiesao | contseces | | s2ae0 | Problema: Qual é 0 valor total das comissées a pagar aos individuos que moram em algum. lugar de LISBOA? SELECT SUM|Valor) AS Comieeose_Licboa FROM Comissao C, Fessoa P, Postal WHERE C.Td = P.14 AND Codigs = cod Fostal AND Loralidads = ‘LTsaoa* | comtasces_uisboa | i 25230 | Problema: Qual € 0 valor total das comisses ¢ INA (19%) a pagar’? SELECT 6UK|Valor) AS Comissces, SUM(Valor*0.19) AS IVA RON Comissao SELECT SUK|Valor) AS Comissoes, SUM(Valor) * 0.29 AS IVA FROM Comiseac 8.5 FUNGAO AVG A fungi AVG devolve a média? dos valores de una determinada coluna. erageSal ~ Structured Query Language Damas, Luls 9015 = 17:59:21 Estaclo 4.04, 198. cartrunoorro ireltos Reservados - Copyrl;_Direltos Problema: Qual 2 média das idades das pessoas que taballram aqui? SELECT AVG(Idade) RS Media _Idades Pessoa | wedla_tdades | 1 20.0571 | ‘Ao obscrvar oresultado, ndo sei s¢ 0 ustaio estardinteressado em saber o resultado do comando com tantas casas decimais, Por isso, 0s SGBD fornecem normalmente outras funcSes que ppermitem, por exemplo, formatar os resultados do comando SELECT. Faas fungfes dependem de cada um dos sistemas, mas em Access posle-se formatar resultado utilizando a fungio Format, Problema: Resolva (em Access) o problema anterior, mostrando apenas duas casas decimais, no resultado. GG Aecwes —)(G[ sat Server (O] orate} [Gs] :21 » Aluno:PAULO EMANUEL ARAUJO FERNANDES » Matricula:201411041674 - Estaclo - 3407573900184 - SELECT Format (AVG(Idade) ,*¢.00") AS Nedia_1dades ROK Pesaca | Media tdades | 1 30.86 | Problema: Qual 60 sald jo médio das pessoas com mais de 30 anoe? saiect ava(selario) WHERE Tdade > 20 5 a & z | avo(salaric) | | 124000. 000000 | Reservados ~ Copyright LTC - 9788521615583 - COD:F4F4A60916 ~ Direltos Reservados ~ Copyright LTC - 9788521615583 - COD:F4F4A6091B - , 3407573900184 -8 3 Sql ~ Structured Query Language ER Damas, Luts BA pasta_vo 8g PROFESSOR Bh ee 3 FUNgOES DE AsnEsAcho 199 Problem: Selecionar a comissio média do I 14. SELECT AVG (Valor) FROM Comissao WHERE Ta = 14 | ave(vatoz) | | 4332,5000 | 3 ‘ j 3 8 a i 5 g = 3 As funges MIN, MAX, COUNT\...) ¢ COUNT|*) podem ser uilizadas com qualquer NOTA tipo de dados, enquanto as fungdes SUM e AVG podem apenas ser aplicedas a campos numéricos.. Morr] Se existiro valor NULL na coluna em que a fungio de agregacao é aplicada, este € ignorado pela fungio. ‘Além destas fungSes, a maioria dos Sistemas de Geréncia de Banco de Dados disponibiliza ‘outras fungBes que atuam sobre cade um dos elementos, individualmente, (no sendo por isso de agregagdo) e que sio de particular importancia. 10 FERNANDES = Matricul Anteriormente foi apresentada a fungo Format, mas existem muitas outras (ABS, SIN, COS, ete), ‘ i i 8 : & ; 3 i | z Para obter mais informagSes sobre as fungdes que o seu sistema disponibiliza, voce dover consultar © Manual de ReferSacia do mesmo. 14.04.2015 » 17:59:21 Aluno:PAULO EMANUEL ARAUX Reservadis - Copyright LTC - 9788521615583 - COD:F4F4A6091B - Di , 3407573900184 =Sal ~ Structured Query Language Damas, Luls 1s Reservados 24.04.2015 0918 - Direlto: 9 - AGRUPANDO A INFORMAGAO 3 183 COD:FAFAA: SUMARIO + Clauwula GROUP BY + Cliusula HAVING * WHERE vi HAVING *Agnpamentos ¢ovalor NULL # Ondenaca0 615: 1 INTRODUGAO. Bete capitulo estd intimamente relacicnado com @ conteido do capitulo anterior. Copyright LTC - 979521 Como vimes, as fungdes de agregago so uma fervamenta muito dil quando usadas para obter informagio resumida sobre o resultado de um comando SELECT. No entanto, estas fung6es podem ser particularmente iiteis no tratamento de informagées de forma agrupada, no como um todo, tal como anteriormente, mas em grupos menores. Pensemos entio no seguinte problema: Problema Mositar 0 Valor das Comissdes existentes no banca de dados. Resolugio: If fécil, & barato, ... .s6 no dé milhdes... ie BL Acs] (l_srace —) GL_ wu] 82 ser 14, vator .2 Conleene Bo orcas bY 23 fa 24.04.20 jeservades ~ Copyright LTC « 97885216 3407573900184 »Sal ~ Structured Query Language Damas, Luls 015 » 17:59:21 = Estacio - |ASRUPANDO AINTORMAGKO 201 u rf u 25 a7 a a i I i I i ! 37 | 20 I I i i I | I I I I I i I | a7 i | I I I 201411041674 » Estaclo » 34075739000184 » 24.04.. I I I I | i 370 | I I I I I i i [Neste exemplo, obtivemos a totalidade das linhas contidas na tabela Contissao. No entanto, para cobtermos totais estamos, por enquanto, um pouco limitados, pois o comando SELECT SUN Valor) AS Tots] FROM Comiesao devolve unicamente 0 total global de toda a tabela | total | | a2400 | Maso nosso objetivo consste em obter o valor da soma da comissées de cada Id, endo a soma de todas elas. Ba que entra etixula GROUP BY, que vames estudarem seguida. F4F4A6091B - Direltos Reservados ~ Copyright LTC - 9788521615583 ~ COD:F4F4A60916 - Direltos Reservados - Copyrl:_ Direltos ‘As eléusulas GROUP BY e HAVING fazem parte do comando SELECT e aparecem na seguinte cordem: SELECT canpoe FROM Tabelas [WHERE Condigio] [nour By...) teavime -.") [ORDER BY 2.) Z i g 2 3 5 i 8 g 3 & g 2 z i g z = a 8 8 3 3 sendo as titimas cliusutas de que nos falta falar para ficarmos conhecendo a totalidade do comando SELECT: SURI nto sm trp. Reservados ~ Copyright LTC - 9788521615583 - COD: 3407573900184 =3 Sql Structured Query Language 28 dames, Lus ae 4.04. 202 cartrovo Nove 9.2 CLAUSULA GROUP BY A cléusula GROUP BY, como ji foi mencionado antes, esta intimamente ligada as fungGes de agregacio, pois nesso intecesse & agrupar as informagées, obtendo em seguida valores estatis- ticos sobte o8 grupos formats. A cléusula GROUP BY divide o resultado de um SELECT em um grupoderesultados que serio processados pelas fungées de agregacio, [Reva] S# um comando SELHCT contiver a cliuula GROUP BY, enti todas as colunas selecionadas (no SELECT) tem que estar presentes na cliusula GROUP BY. Caracterfsticas da utlizacZo da eldusula GROUP BY 90141 1041674 » Estacio - 3407573900184 = * A cléusula GROUP BY ¢ utilizada para agrupar as informagées. * Os registros sio processados em grupos de caracteristicas semelhantes. * As funges de Agregagio (Count, Max, Min, ete.) podem ser utilizadas para obter infor. _magio sobre cada um dos grupos. * Matricuts Problema: Mosirar, para cada fd, 0 valor total das comissdes. Resolugfio: © que se pretende écbtero valor da soma das comissées agrupadas por Id, Poctanto, 6 56 eserever isco em inglés. SELECT 14, suM{Valor) AS Total FROM Comiaszo: oRoUP by 13 :F4F4A6091B - Direltos Reservados ~ Copyright LTC - 9789521615583 - COD:F4F4A6091B - Direltos Reservado: na:PAULO EMANUEL ARAIJO FERNAND! x4 | 27280 | 8 2s | 2970 | 3< a7 | aso | Ba 49 | 2300 | an an Repare que a0 coniraio do capitulo anterior, em que da utilizagdo de fungées de agregagio Ey resultava sempre uma tiiea linha, através da cldusula GROUP BY resulta um valoc de agre- 3 gagio para cada um dos grupos. 24 04.2 Problema: Fazer uma pequena vatiago no exerefeio anterior, mosirando o Neme em ver do 14, Reservados ~ Copyright LTC « 9: 3407573900184 =Bs ‘Sql - Structured Query Language 23 Damas, Luls ag BQ pasta vo 3g PROFESSOR gh 3° ii 8 Aenuranco ANrORBAGKO 208 Resolugio: Neste caso, necessitamos da tabela das Comissdes e da tabela das Pessoar. Nesta “lkima, iremos obier 0 Nome de cada uma das pessoas envolvidas. SELECT Newe, SUM(Valor) AS ‘Total FROM Pessoa P, Comiseao WHERE P.td = C.1d GROUP BY None 10141 1041674 » Estaclo - 3407573900184 = 24.04. | Nome | total | | Anténio Dias | 30 | | Tsabe1 Bapada | 19870 | | goss Anténic | 2200 | | wascimenco augusta | 27250 | | paulo Viegae | 2970 | Problema: Mostrar 0 valor total (Salério + Comissdes) a ses ecebido por cada Pessoa. Resolugiio: Para reselver este exerci teremos que comar cada tum dos salitios como resul- tado da soma das respectivas comissdes. SELECT Nowe, GUM(Valer) + Galarie AS Total FROM Pessoa P, Comissao C WHERE P.Td = C.14 GROUP BY None, Salerio a 3 i 5 8 8 5 g € j i : i 4 3 2 i | None [total | | ancénto pias | 14190.00 | | teabel Bepada | 205879.00 | | gosé anténio | 222300.00 | | Nascimento auguets | 227250.00 | | Paulo Viegas | 97879.00 | 94.04.2015 » 17:59:21 » Aluno:PAULO EMANUEL ARAUIO FERNANDES - Matriculs:2 SELECT Nowe, SUM(Valer) + Salario AS Total ron «= vase GROUP BY Nona, Salaris 2eservades ~ Copyright LTC - 9788521615583 - COD: 3407573900184 =g 3 Sql Structured Query Language 23 Damas, Luls ad Bg 20 8g SOR R ge 3M commana ga Problema: Selecionar a maior comissdo de cada Md. (Bl Access (Si) sa server | [5] orace _(E]_mysau_ | SELECT Ia, MAX(Valor) AS Mator ROK Coniaeac GROUP BY 1d | ta | Mador | | 24 | 20500 | | 25 | 2500 | | 37 | 24200 | [42] 170 | | 49 | 2300 | Problema: Selecionar a quantidade de comissées de cada Md, SELECT 1a, COMMT(*) AS N Comissoce FROM Coniasa0 OROUP BY 13 :21 » Aluno:PAULO EMANUEL ARAUJO FERNANDES » Matricula:201411041674 - Estaclo - 3407573900184 - ou entlo: SELECT 14, couMP(valer) AS N_coniecose FROM Coniasao oncuP BY a | 1a | x coniseces | jaa | a) 135 | 2) 137 | a) [42 | 2 | 149 | a | [Rom] “ins de agregngdo COUNT(*), sulin em conunto com aclusula GROUP BY, devolve a quantidade de ocoreéacias (linhas) dentro de cada grupo. Problems: Mostrar o valor ¢ 2 quantidade das Comissdes sobre “Vendas" a serem recebidas por cada Pessoa, indicando também a Locafidade onde reside, 3 i Resolugio: Este ¢ um excmplo interessante, em que vamos utilizer a totalidade das tabelas cenvelvidas no exemplo. neservatlos - Copyright LTC ~ 9788521615583 - COD:F4F4A60918 ~ Direitos Reservades - Copyright LTC - 9788521615583 ~ COD:F4F4A60916 - DI 3407573900184 =Estaclo = ES = Matriculs:20141 1041674 = Estaclo - 3407573900184 » 24.04.2015 » 17:59:21 = 04.2015 = 17:59:21 = Aluna:PAULO EMANUEL ARAUJO FERNANDE reservadies - Copyright LTC ~ 9789521615583 - COD:F4F4A6091B - Direltos Reservados - Copyright LTC ~ 9788521615583 - COD:F4F4A6091B - Direltos Reservados - Copyrl; Direltos | 3407573900184 = Sal ~ Structured Query Language Damas, Luls ASRUPANDO AINTORMAGKO 205, + A tabela Pessoa € utilizada para obter 0 Nome: + A tabela Postal é uilizada para obtera localidade onde reside, * A tabela Comissao € utilizada para obter 0 célelo das comissBest + Atabela Mensagem éutilizada para pesquisar as Mensagens de Comissio que conteaham, string ‘Vendas’? SELECT Nowe, yocalidade, sUM(Valer) AS Total, COuME(+) AS Nun FROM Possoa’P, Coniasas C, Postal, Nenaagen M WHERE P.13 = card xo coa_pestal = Codigo. AND. M.1d Meg = C.Td Meg AND Mensagen LIKE *¢Vendast GROUP BY Nona, Lecalidade | some. | uocadidade | Total | mun | | eebel cepeda | urspoa | 5520 | 2 | | Naeetmento Augusto | TOMAR | 20500 | 2 | | Foulo viegse | uresoa | 2500 | 2 | Problema: Mostrar qual ovaloc total a pagac para cada wma das Comissées. O resuhado devers ser ordenado de forma descendente. BL_Accoss _|(@] so. server |B] oracte Jf] sivout SELECT Meneagom, CUM{Valoz) AS Total FROM Comissao C, Kensagen HERE M.Td Meg ~ C.1d Meg GROUP BY Nensagen ORDER BY SUM(Valor) DESC SELECT Mensagem, SUN(Valor) AS Total FROM Comigeao C, Kensagon M WHERE M.td_Nsg = C.1d Neg GROUP ay ORDER SY 2 DESC ‘Se wlio Asses noc egungs de abstr Wikcard & poSal ~ Structured Query Language Damas, Luls :21» Estaclo = PASTA DO PROFESSOR 5 206 cartrovo Nove conissae GROUP RY 3 E equivalente a: 3 a 8 | eeseagen | geval | g | Coniaaio de Venda | 18500 | g | Fretes Brpresas | 14770 | g | ofertas | 3750 | 7 | Refeigtes | 2600 | 8 | Fzetes individuaie | 2320 | 3 | Conbuativese | “400 | 3 | Destocagtes | 120 | . | Vendas Exes | 20] 8 3 Tau] Sum SELECT com a cléusula GROUP BY rio utilizar qualquer fungio de agrupa- z -mento, enti estamos diante de um SELECT DISTINCT. 3 3 § O-comando = @ seLEct ta 8 2 z 3 = & 8 SELECT Drstimer 14 FROK Conieeae F4F4A6091B - Direltos Reservados ~ Copyright LTC - 9789521615583 ~ COD:F4F4A6091B - Direltos Reservados = Copyriy_ Direltos | Repare que a inexisténcia de fungdes de agregagio nfo faz qualquer tipo de jungio de infor- ‘magio. Por outro lado, a clausula GROUP BY implica o.agrupamento da informagao, resultando uum tnico registro por cada grupo, sendo assim semelhante & utilizagdo da eldusula DISTINCT quando se seleciona apenas uma coluna, 94.04.2015 » 17:59:21 » Aluno:PAULO EMANUEL ARAL 9.3 CLAUSULA HAVING ‘A cléusula HAVING serve para fazer testrigSes 20 nivel dos grupos que sio processados. eservades ~ Copyright LTC - 978521615583 ~ COD: 34075739000184 =g 3 Sql Structured Query Language Ee Damas, Luls . > 015 » 17:59:21 = |ASRUPANDO AINTORMAGKO 207 Problema: Mostrar o valor total de cada comissfo agrupada por Id. SELECT 14, SUM(Valor) AS Total FROM Comissao 201411041674 » Estaclo » 34075739000184 » 24.04.. | ra | tora | | a4 | 27280 | | 28 | 2970 | | 37 | 39870 | jaz] 190 | | 49 | 2300 | Este é o caso cm que mostramos todos 03 grupos Noentanto, se pretendermos mostrar os grupos que apresentam una caracteritica em particular ‘do utiizamos 2 cléusula WHERE, pois esta destina-se a resrigio das linhas, Utilizase a ekiue sula HAVING, que atua unicamente sobre o resultado dos grupos. A cléusula HAVING atua sobre o resultado dos grupos. 10 FERNANDES = Matricul Problema: Resolver problema anterior selecionando apenas 08 Jd com comissées totais supe- ores a 1000. SELECT 13, suM(Valor] AS Total RON Comissac GROUP By 1d HAVING SUK(Valor) > 1000 8 4 3 : a 3 z a 8 3 g 5 3 3 5 ij s 5 a 3 3 3 & g 2 z i g = = a 8 3 3 | ra | toval | | 14 | a7250 | | 28 | 2870 | | 37 | 29970 | | 49 | 2300 | Problema: Selecionar o Nome de todas as Pessoas que tenham alguma Mensagem com Id superior a 35 eservatios - Copyright LTC - 9788521615583 - COD: 3407573900184 =Ireltos R Sal » Structured Query Language : Pede-se obter apenas 0 Nome fazendo Damas, Luls BY pasta vo 8g PROFESSOR a Gi s3 208 cartrnonove 3 rf SELECT None, MAXCI3_Nsg) ag pov 88 WHERE P.Td = Cr ee ee Bye zx HAVING MAK(Id Meg) > 35 gs ae . : . 85 I ex af vowel mma we Re is 300 | ge = (Bl Access (sau server | [BJ oracio —(E]_mysar SELECT Wome ROK Pesaoa P, Comiesao C WHERE P.1d = ¢.ra RVING YX (Td > * Matricuts 10 FERNAND! | Teabel Sepada it | Nasermenco Augusto | ireltos Reservados ~ Copyright LTC - 9788! [As colunas existentes ou referenciadas nas eléusulas GROUP BY ou HAVING nao 1@m que aparecer frente do SELECT. 9.4 WHERE vs. HAVING Poe vezes surge a divide sobre quando utilizar a cléusula WHERE ou a eléusula HAVING paca ‘esteingir o conjunto de registros a serem apresentados. a 3 3 2 2 g 2 3 & 3 2 2 aq 3 [sta dvida é simples de tira. Utilizase a cliusula WHERE sempre que se pretende restringit os registros a serem cconsiderados na selegdo. A cldusula HAVING secve para cestringir os grupos que foram formadot depois de aplicada a testrigaio da cliueula WHERE, OTA Se utilizar a cllusula WHERE em um SELECT contendo GROUP BY, o conjunto dos vegistios agrupados é apenas aquele que resulta da restrizio imposia pela clfusula WHERE. Problema: Saber qual o total das comissbes (agrupado por Jd), considerando apenas aquelas de valor superior a 1000. eservades ~ Copyright LTC - 9788521615583 ~ COD: 04. 4 3 8 =z= 2 Sal » Structured Query Language Damas, Luls 015 » 17:59:21 = Estaclo = 10141 1041674 » Estaclo - 3407573900184 = 24.04. 10 FERNANDES = Matriculs: JOD:F4F4A6091B - Direltos Reservados ~ Copyright LTC ~ 9788521615583 - COD:F4F4A6091B - Direltos Reservados Copyri 04.2015 - 17:59:21 - Aluno:PAULO EMANUEL ARAL eservatos ~ Copyright LTC - 9788521615583 - 3407573900184 = |ASRUPANDO AINTORMAGKO 209 Resolugio: Neste caso, 0 objetivo € restringiralgumas comissées de forma individual, ito é, nfo considerar todas aquelas em que Valor<=1000, Como se trata deumarestiga0 individual, deve ser colocada na cldusula WHERE. (Access | GI sax server] BI oracie —)(GT_myson_) SeLect 14, sum(vaior) FROM Comissao WHERE Valor > 1000 nour By 14 | 14 | sumvator) | ja] 26880 | | 25 | 2500 | jaz] 39730 | | 49 | 2300 | [ora] Sto = podem unr fngies de agregagio na civula WHERE, Utilizase a cldusula HAVING sempre que se pretende restringir 0 conjunto dos GRUPOS de REGISTROS a serem considecados. Problema: Saber qual o total das comissées (agrupadas por Id), considerando apenas aquelas. ‘cujo valor total seja supesier a 1000. Resolugio: Neste caso, 0 objetivo é restringiras grupos de comissbes cuja soma seja superior 1 1000. Assim, aproveitam-se Loos 0s possiveisregistros que possam fazer com ‘que a sua soma final sefa superior a 1000. SELECT 14, suM(Valor) FRON Comissao GROUP BY 14 mRVING SUK (Valor) > 1000 | 33 | sum(vetor) | ja] 37280 | [2s] 2870 | [37 | 29079 | |a9 | 2500 | Embora 0 conjunto dos id seja igual, note-se facilmente que 0 conjunto de registros conside- rados pelo SELECT é diferente doanterior, que nfo foi aplicada qualquer estrigdo individual a0 registros.Sal ~ Structured Query Language Damas, Luls Lf 8 staclo = 015 = 17:59:21 = 210 cartrovo Nove 24.04, [rom] ‘ellusula WHERE 6 pode er aplca a egistosinvduas,enguanto clus HAVING 6 pode ser aplicada a fungies de grupo. 9.5 AGRUPAMENTOS E 0 VALOR NULL. Uma questdo interessante consiste em saber o que acontece quando em uma tabela mandamos agcupar os dados da coluna e nessa coluna existe o valor NULL. Em um SELECT com a clausula GROUP BY, se existiem NULLs na coluna ou Nova ccolunas de agrupamento estes também so agrupados. Problems: Selecionar os wérios grupos de telefone. 0141 1041674 » Estacla » 3407573900184 = 3 seuect Teletone. courn(*) 5 Pessoe z GROUP BY Telefone 0 * 8 I 3 - 2 jm. | a] EB [120486 | at 8 | 4ser23 | 11 3 | 780884 | at ‘Neste exemplo, © valor NULL sparece quatro vezes na coluna denominada Tolefone da tabela Pessoa, 9.6 ORDENAGAO Quanto & ordenagio de grupos, devem-se seguir ae regras apresentadas anterioemente, isto &, pode-se fazer a ordenagio por colunas, expresses ou pela ordem da cohuna ou expressio sele- cionada. ‘Exemplo: Ordenago por uma coluna. SELECT 1a, coUNT (ra) FROM Conieeao oRGUP BY 7a ORDER BY Td 1015 » 17:59:21 ~ Aluno:PAULO EMANUEL ARAU! 24.0.2 eservados - Copyright LTC ~ 9788521615523 - COD:F4F4AS091B ~ Direltos Reservacis - Copyright LTC - 9788521615583 - COD:F4F4A60916 - Direltos Reservados ~ Copyrl: 3407573900184 =|ASRUPANDO RINFORMAGKO. 211 | ra | counr¢zay | ra | commn(ra) Exemplo: Ordenayao por uma Expressao ou fungao de agrega¢ao. (Bi_necoss —) GL sau server | Bj oracie —}(o[_nviae] Exemplo: Orienagio pela ordem de uma coluna ou expresso. iat bt 5 anee ihe & Boos ae glo = OPEIST = TZ:GS:LT = STOZPO'PT « PBTOOUSELSLOVE = ODENSE = PLOT POTTPTOT:EINO}NEW « SAGNVNYAS OLNWAY TANNYWZ OTNYa:OUNTY = TZ:ES:LT = STOZPO'PT = PBTODDSELSLOF: 4 S0{BuC iMAdeD - SOpEAIeSoY SOUDIIC - ATGOSVb=Ps:OO - LBSSTSTTSBRLG - 317 WBLAdOD - SopEALESeY SOREIIC ~ ATEOSWP4bd2OD - EBSSTSTZSABLE ~ 217 WBUAdeD - SopenseseDireltos R i Sql - Structured Query Language Damas, Luls
You might also like
The Subtle Art of Not Giving a F*ck: A Counterintuitive Approach to Living a Good Life
From Everand
The Subtle Art of Not Giving a F*ck: A Counterintuitive Approach to Living a Good Life
Mark Manson
4/5 (6125)
Principles: Life and Work
From Everand
Principles: Life and Work
Ray Dalio
4/5 (627)
The Gifts of Imperfection: Let Go of Who You Think You're Supposed to Be and Embrace Who You Are
From Everand
The Gifts of Imperfection: Let Go of Who You Think You're Supposed to Be and Embrace Who You Are
Brené Brown
4/5 (1148)
Never Split the Difference: Negotiating As If Your Life Depended On It
From Everand
Never Split the Difference: Negotiating As If Your Life Depended On It
Chris Voss
4.5/5 (932)
The Glass Castle: A Memoir
From Everand
The Glass Castle: A Memoir
Jeannette Walls
4/5 (8214)
Grit: The Power of Passion and Perseverance
From Everand
Grit: The Power of Passion and Perseverance
Angela Duckworth
4/5 (631)
Sing, Unburied, Sing: A Novel
From Everand
Sing, Unburied, Sing: A Novel
Jesmyn Ward
4/5 (1253)
The Perks of Being a Wallflower
From Everand
The Perks of Being a Wallflower
Stephen Chbosky
4/5 (8365)
Shoe Dog: A Memoir by the Creator of Nike
From Everand
Shoe Dog: A Memoir by the Creator of Nike
Phil Knight
4.5/5 (860)
Her Body and Other Parties: Stories
From Everand
Her Body and Other Parties: Stories
Carmen Maria Machado
4/5 (877)
Hidden Figures: The American Dream and the Untold Story of the Black Women Mathematicians Who Helped Win the Space Race
From Everand
Hidden Figures: The American Dream and the Untold Story of the Black Women Mathematicians Who Helped Win the Space Race
Margot Lee Shetterly
4/5 (954)
The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers
From Everand
The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers
Ben Horowitz
4.5/5 (361)
Steve Jobs
From Everand
Steve Jobs
Walter Isaacson
4/5 (2922)
Elon Musk: Tesla, SpaceX, and the Quest for a Fantastic Future
From Everand
Elon Musk: Tesla, SpaceX, and the Quest for a Fantastic Future
Ashlee Vance
4.5/5 (484)
The Emperor of All Maladies: A Biography of Cancer
From Everand
The Emperor of All Maladies: A Biography of Cancer
Siddhartha Mukherjee
4.5/5 (277)
Brooklyn: A Novel
From Everand
Brooklyn: A Novel
Colm Toibin
3.5/5 (2061)
A Man Called Ove: A Novel
From Everand
A Man Called Ove: A Novel
Fredrik Backman
4.5/5 (4972)
Angela's Ashes: A Memoir
From Everand
Angela's Ashes: A Memoir
Frank McCourt
4.5/5 (444)
The Art of Racing in the Rain: A Novel
From Everand
The Art of Racing in the Rain: A Novel
Garth Stein
4/5 (4281)
The Yellow House: A Memoir (2019 National Book Award Winner)
From Everand
The Yellow House: A Memoir (2019 National Book Award Winner)
Sarah M. Broom
4/5 (100)
The Little Book of Hygge: Danish Secrets to Happy Living
From Everand
The Little Book of Hygge: Danish Secrets to Happy Living
Meik Wiking
3.5/5 (447)
The World Is Flat 3.0: A Brief History of the Twenty-first Century
From Everand
The World Is Flat 3.0: A Brief History of the Twenty-first Century
Thomas L. Friedman
3.5/5 (2283)
Bad Feminist: Essays
From Everand
Bad Feminist: Essays
Roxane Gay
4/5 (1068)
Yes Please
From Everand
Yes Please
Amy Poehler
4/5 (1987)
Devil in the Grove: Thurgood Marshall, the Groveland Boys, and the Dawn of a New America
From Everand
Devil in the Grove: Thurgood Marshall, the Groveland Boys, and the Dawn of a New America
Gilbert King
4.5/5 (278)
The Outsider: A Novel
From Everand
The Outsider: A Novel
Stephen King
4/5 (1993)
The Woman in Cabin 10
From Everand
The Woman in Cabin 10
Ruth Ware
3.5/5 (2619)
A Tree Grows in Brooklyn
From Everand
A Tree Grows in Brooklyn
Betty Smith
4.5/5 (1936)
The Sympathizer: A Novel (Pulitzer Prize for Fiction)
From Everand
The Sympathizer: A Novel (Pulitzer Prize for Fiction)
Viet Thanh Nguyen
4.5/5 (125)
A Heartbreaking Work Of Staggering Genius: A Memoir Based on a True Story
From Everand
A Heartbreaking Work Of Staggering Genius: A Memoir Based on a True Story
Dave Eggers
3.5/5 (692)
Team of Rivals: The Political Genius of Abraham Lincoln
From Everand
Team of Rivals: The Political Genius of Abraham Lincoln
Doris Kearns Goodwin
4.5/5 (1912)
Wolf Hall: A Novel
From Everand
Wolf Hall: A Novel
Hilary Mantel
4/5 (4074)
On Fire: The (Burning) Case for a Green New Deal
From Everand
On Fire: The (Burning) Case for a Green New Deal
Naomi Klein
4/5 (75)
Fear: Trump in the White House
From Everand
Fear: Trump in the White House
Bob Woodward
3.5/5 (830)
Rise of ISIS: A Threat We Can't Ignore
From Everand
Rise of ISIS: A Threat We Can't Ignore
Jay Sekulow
3.5/5 (143)
Manhattan Beach: A Novel
From Everand
Manhattan Beach: A Novel
Jennifer Egan
3.5/5 (901)
John Adams
From Everand
John Adams
David McCullough
4.5/5 (2530)
The Light Between Oceans: A Novel
From Everand
The Light Between Oceans: A Novel
M L Stedman
4.5/5 (790)
The Unwinding: An Inner History of the New America
From Everand
The Unwinding: An Inner History of the New America
George Packer
4/5 (45)
Little Women
From Everand
Little Women
Louisa May Alcott
4/5 (105)
The Constant Gardener: A Novel
From Everand
The Constant Gardener: A Novel
John le Carré
3.5/5 (109)
Related titles
Click to expand Related Titles
Carousel Previous
Carousel Next
The Subtle Art of Not Giving a F*ck: A Counterintuitive Approach to Living a Good Life
From Everand
The Subtle Art of Not Giving a F*ck: A Counterintuitive Approach to Living a Good Life
Principles: Life and Work
From Everand
Principles: Life and Work
The Gifts of Imperfection: Let Go of Who You Think You're Supposed to Be and Embrace Who You Are
From Everand
The Gifts of Imperfection: Let Go of Who You Think You're Supposed to Be and Embrace Who You Are
Never Split the Difference: Negotiating As If Your Life Depended On It
From Everand
Never Split the Difference: Negotiating As If Your Life Depended On It
The Glass Castle: A Memoir
From Everand
The Glass Castle: A Memoir
Grit: The Power of Passion and Perseverance
From Everand
Grit: The Power of Passion and Perseverance
Sing, Unburied, Sing: A Novel
From Everand
Sing, Unburied, Sing: A Novel
The Perks of Being a Wallflower
From Everand
The Perks of Being a Wallflower
Shoe Dog: A Memoir by the Creator of Nike
From Everand
Shoe Dog: A Memoir by the Creator of Nike
Her Body and Other Parties: Stories
From Everand
Her Body and Other Parties: Stories
Hidden Figures: The American Dream and the Untold Story of the Black Women Mathematicians Who Helped Win the Space Race
From Everand
Hidden Figures: The American Dream and the Untold Story of the Black Women Mathematicians Who Helped Win the Space Race
The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers
From Everand
The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers
Steve Jobs
From Everand
Steve Jobs
Elon Musk: Tesla, SpaceX, and the Quest for a Fantastic Future
From Everand
Elon Musk: Tesla, SpaceX, and the Quest for a Fantastic Future
The Emperor of All Maladies: A Biography of Cancer
From Everand
The Emperor of All Maladies: A Biography of Cancer
Brooklyn: A Novel
From Everand
Brooklyn: A Novel
A Man Called Ove: A Novel
From Everand
A Man Called Ove: A Novel
Angela's Ashes: A Memoir
From Everand
Angela's Ashes: A Memoir
The Art of Racing in the Rain: A Novel
From Everand
The Art of Racing in the Rain: A Novel
The Yellow House: A Memoir (2019 National Book Award Winner)
From Everand
The Yellow House: A Memoir (2019 National Book Award Winner)
The Little Book of Hygge: Danish Secrets to Happy Living
From Everand
The Little Book of Hygge: Danish Secrets to Happy Living
The World Is Flat 3.0: A Brief History of the Twenty-first Century
From Everand
The World Is Flat 3.0: A Brief History of the Twenty-first Century
Bad Feminist: Essays
From Everand
Bad Feminist: Essays
Yes Please
From Everand
Yes Please
Devil in the Grove: Thurgood Marshall, the Groveland Boys, and the Dawn of a New America
From Everand
Devil in the Grove: Thurgood Marshall, the Groveland Boys, and the Dawn of a New America
The Outsider: A Novel
From Everand
The Outsider: A Novel
The Woman in Cabin 10
From Everand
The Woman in Cabin 10
A Tree Grows in Brooklyn
From Everand
A Tree Grows in Brooklyn
The Sympathizer: A Novel (Pulitzer Prize for Fiction)
From Everand
The Sympathizer: A Novel (Pulitzer Prize for Fiction)
A Heartbreaking Work Of Staggering Genius: A Memoir Based on a True Story
From Everand
A Heartbreaking Work Of Staggering Genius: A Memoir Based on a True Story
Team of Rivals: The Political Genius of Abraham Lincoln
From Everand
Team of Rivals: The Political Genius of Abraham Lincoln
Wolf Hall: A Novel
From Everand
Wolf Hall: A Novel
On Fire: The (Burning) Case for a Green New Deal
From Everand
On Fire: The (Burning) Case for a Green New Deal
Fear: Trump in the White House
From Everand
Fear: Trump in the White House
Rise of ISIS: A Threat We Can't Ignore
From Everand
Rise of ISIS: A Threat We Can't Ignore
Manhattan Beach: A Novel
From Everand
Manhattan Beach: A Novel
John Adams
From Everand
John Adams
The Light Between Oceans: A Novel
From Everand
The Light Between Oceans: A Novel
The Unwinding: An Inner History of the New America
From Everand
The Unwinding: An Inner History of the New America
Little Women
From Everand
Little Women
The Constant Gardener: A Novel
From Everand
The Constant Gardener: A Novel