34
Students to Business – 2011/1 Fase 2 Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Embed Size (px)

DESCRIPTION

Área de Banco de Dados Transact SQL : Consultando o Banco de Dados. Agenda. Listando dados com TOP n Usando funções agregadas Noções básicas sobre a cláusula GROUP BY Gerando valores agregados em conjuntos de resultados Usando as cláusulas COMPUTE e COMPUTE BY - PowerPoint PPT Presentation

Citation preview

Page 1: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Students to Business – 2011/1Fase 2

Área de Banco de DadosTransact SQL : Consultando o Banco de Dados

Page 2: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Agenda

• Listando dados com TOP n

• Usando funções agregadas

• Noções básicas sobre a cláusula GROUP BY

• Gerando valores agregados em conjuntosde resultados

• Usando as cláusulas COMPUTE e COMPUTE BY

• Hands On: Comandos de DML Avançados

• Laboratório: Consultando o ambiente AERO

Page 3: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Listando os primeiros n valores com TOP n

• Lista apenas os n primeiros registros de um conjunto de resultados

• Especifica o intervalo de valores na cláusula ORDER BY

• Retorna correspondências se WITH TIES for usada

USE northwindSELECT TOP 5 orderid, productid, quantity FROM [order details] ORDER BY quantity DESCGO

USE northwindSELECT TOP 5 orderid, productid, quantity FROM [order details] ORDER BY quantity DESCGO

USE northwindSELECT TOP 5 WITH TIES orderid, productid, quantity FROM [order details] ORDER BY quantity DESCGO

USE northwindSELECT TOP 5 WITH TIES orderid, productid, quantity FROM [order details] ORDER BY quantity DESCGO

Exemplo 1Exemplo 1

Exemplo 2Exemplo 2

Page 4: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Usando funções agregadas

Funções agregadasFunções agregadasFunções agregadasFunções agregadas DescriçãoDescriçãoDescriçãoDescrição

AVGAVG Média de valores em uma expressão numéricaMédia de valores em uma expressão numérica

COUNTCOUNT Número de valores em uma expressãoNúmero de valores em uma expressão

COUNT (*)COUNT (*) Número de registros selecionadosNúmero de registros selecionados

MAXMAX Maior valor da expressãoMaior valor da expressão

MINMIN Menor valor da expressãoMenor valor da expressão

SUMSUM Valores totais em uma expressão numéricaValores totais em uma expressão numérica

STDEVSTDEV Desvio padrão de todos os valoresDesvio padrão de todos os valores

STDEVPSTDEVP Desvio padrão da populaçãoDesvio padrão da população

VARVAR Variância estatística de todos os valoresVariância estatística de todos os valores

VARPVARP Variância estatística de todos os valores da população

Variância estatística de todos os valores da população

Page 5: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Usando funções agregadas com valores nulos

• A maioria das funções agregadas ignora valores nulos

• A função COUNT (*) conta todos os registros com valores nulos

USE northwindSELECT COUNT (*) FROM employeesGO

USE northwindSELECT COUNT (*) FROM employeesGO

USE northwindSELECT COUNT(reportsto) FROM employeesGO

USE northwindSELECT COUNT(reportsto) FROM employeesGO

Exemplo 1Exemplo 1

Exemplo 2Exemplo 2

Page 6: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Noções básicas sobre a cláusula GROUP BY

• Usando a cláusula GROUP BY

• Usando a cláusula GROUP BY com a cláusula HAVING

Page 7: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Usando a cláusula GROUP BY

USE northwindSELECT productid, orderid ,quantity FROM orderhistGO

USE northwindSELECT productid, orderid ,quantity FROM orderhistGO

USE northwindSELECT productid ,SUM(quantity) AS total_quantity FROM orderhist GROUP BY productidGO

USE northwindSELECT productid ,SUM(quantity) AS total_quantity FROM orderhist GROUP BY productidGO

productidproductidproductidproductid orderidorderidorderidorderid quantityquantityquantityquantity

11 11 55

11 11 1010

22 11 1010

22 22 2525

33 11 1515

33 22 3030

productidproductidproductidproductid total_quantitytotal_quantitytotal_quantitytotal_quantity

11 1515

22 3535

33 4545

productidproductidproductidproductid total_quantitytotal_quantitytotal_quantitytotal_quantity

22 3535

Apenas osregistros que satisfazem às condições da cláusula WHERE serão agrupados

USE northwindSELECT productid ,SUM(quantity) AS total_quantity FROM orderhist WHERE productid = 2 GROUP BY productidGO

USE northwindSELECT productid ,SUM(quantity) AS total_quantity FROM orderhist WHERE productid = 2 GROUP BY productidGO

Page 8: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Usando a cláusula GROUP BY com a cláusula HAVING

USE northwindSELECT productid, orderid ,quantity FROM orderhistGO

USE northwindSELECT productid, orderid ,quantity FROM orderhistGO

USE northwindSELECT productid, SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid HAVING SUM(quantity)>=30GO

USE northwindSELECT productid, SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid HAVING SUM(quantity)>=30GO

productidproductidproductidproductid total_quantitytotal_quantitytotal_quantitytotal_quantity

22 3535

33 4545

productidproductidproductidproductid orderidorderidorderidorderid quantityquantityquantityquantity

11 11 55

11 11 1010

22 11 1010

22 22 2525

33 11 1515

33 22 3030

Page 9: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Gerando valores agregados em conjuntos de resultados

• Usando a cláusula GROUP BY com o operador ROLLUP

• Usando a cláusula GROUP BY com o operador CUBE

• Usando a função GROUPING

Page 10: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Usando a cláusula GROUP BY com o operador ROLLUP

USE northwindSELECT productid, orderid, SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid, orderid WITH ROLLUP ORDER BY productid, orderidGO

USE northwindSELECT productid, orderid, SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid, orderid WITH ROLLUP ORDER BY productid, orderidGO

Descriçãoproductidproductidproductidproductid orderidorderidorderidorderid total_quantitytotal_quantitytotal_quantitytotal_quantity

NULLNULL NULLNULL 9595

11 NULLNULL 1515

11 11 55

11 22 1010

22 NULLNULL 3535

22 11 1010

22 22 2525

33 NULLNULL 4545

33 11 1515

33 22 3030

Total geralTotal geral

Resume apenas os registros de productid 1Resume apenas os registros de productid 1

Valores de detalhe de productid 1, orderid 1Valores de detalhe de productid 1, orderid 1

Valores de detalhe de productid 1, orderid 2Valores de detalhe de productid 1, orderid 2

Resume apenas os registros de productid 2Resume apenas os registros de productid 2

Valores de detalhe de productid 2, orderid 1Valores de detalhe de productid 2, orderid 1

Resume apenas os registros de productid 3Resume apenas os registros de productid 3

Valores de detalhe de productid 3, orderid 1Valores de detalhe de productid 3, orderid 1

Valores de detalhe de productid 3, orderid 2Valores de detalhe de productid 3, orderid 2

Page 11: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

USE northwindSELECT productid, orderid, SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid, orderid WITH CUBE ORDER BY productid, orderidGO

USE northwindSELECT productid, orderid, SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid, orderid WITH CUBE ORDER BY productid, orderidGO

Usando a cláusula GROUP BY com o operador CUBE

O operador CUBEproduz doisvalores deresumo a maisque o operador ROLLUP

Descriçãoproductidproductidproductidproductid orderidorderidorderidorderid total_quantitytotal_quantitytotal_quantitytotal_quantity

NULLNULL NULLNULL 9595

NULLNULL 11 3030

NULLNULL 22 6565

11 NULLNULL 1515

11 11 55

11 22 1010

22 NULLNULL 3535

22 11 1010

22 22 2525

33 NULLNULL 4545

33 11 1515

33 22 3030

Total geralTotal geral

Resume todos os registros de orderid 1Resume todos os registros de orderid 1

Resume todos os registros de orderid 2Resume todos os registros de orderid 2

Resume apenas os registros de productid 1Resume apenas os registros de productid 1

Valores de detalhe de productid 1, orderid 1Valores de detalhe de productid 1, orderid 1

Valores de detalhe de productid 1, orderid 2Valores de detalhe de productid 1, orderid 2

Resume apenas os registros de productid 2Resume apenas os registros de productid 2

Valores de detalhe de productid 2, orderid 1Valores de detalhe de productid 2, orderid 1

Valores de detalhe de productid 2, orderid 2Valores de detalhe de productid 2, orderid 2

Resume apenas os registros de productid 3Resume apenas os registros de productid 3

Valores de detalhe de productid 3, orderid 1Valores de detalhe de productid 3, orderid 1

Valores de detalhe de productid 3, orderid 2Valores de detalhe de productid 3, orderid 2

Page 12: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

1 representa os valores de resumona coluna anterior

0 representa os valores de detalhe na na coluna anterior

Usando a função GROUPING

USE northwindSELECT productid, GROUPING (productid) ,orderid, GROUPING (orderid) ,SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid, orderid WITH CUBE ORDER BY productid, orderidGO

USE northwindSELECT productid, GROUPING (productid) ,orderid, GROUPING (orderid) ,SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid, orderid WITH CUBE ORDER BY productid, orderidGO

productidproductidNULL

NULL

NULL

1

1

1

2

2

2

3

3

3

1

1

1

0

0

0

0

0

0

0

0

0

orderidorderidNULL

1

2

NULL

1

2

NULL

1

2

NULL

1

2

1

0

0

1

0

0

1

0

0

1

0

0

total_quantitytotal_quantity95

30

65

15

5

10

35

10

25

45

15

30

Page 13: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Usando as cláusulas COMPUTE e COMPUTE BY

COMPUTE BYCOMPUTEUSE northwindSELECT productid, orderid, quantity FROM orderhist ORDER BY productid, orderid COMPUTE SUM(quantity) BY productid COMPUTE SUM(quantity)GO

USE northwindSELECT productid, orderid, quantity FROM orderhist ORDER BY productid, orderid COMPUTE SUM(quantity) BY productid COMPUTE SUM(quantity)GO

USE northwindSELECT productid, orderid ,quantity FROM orderhist ORDER BY productid, orderid COMPUTE SUM(quantity)GO

USE northwindSELECT productid, orderid ,quantity FROM orderhist ORDER BY productid, orderid COMPUTE SUM(quantity)GO

productidproductidproductidproductid orderidorderidorderidorderid quantityquantityquantityquantity

11 11 55

11 22 1010

22 11 1010

22 22 2525

33 11 1515

33 22 3030

sumsum 9595

productidproductidproductidproductid orderidorderidorderidorderid quantityquantityquantityquantity

11 11 55

11 22 1010

sumsum 1515

22 11 1010

22 22 2525

sumsum 3535

33 11 1515

33 22 3030

sumsum 4545

sumsum 9595

Page 14: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Usando operadores lógicos

USE northwindSELECT productid, productname, supplierid, unitprice FROM products WHERE (productname LIKE 'T%' OR productid = 46) AND (unitprice > 16.00) GO

USE northwindSELECT productid, productname, supplierid, unitprice FROM products WHERE (productname LIKE 'T%' OR productid = 46) AND (unitprice > 16.00) GO

productidproductidproductidproductid productnameproductnameproductnameproductname supplieridsupplieridsupplieridsupplierid unitpriceunitpriceunitpriceunitprice

1414 TofuTofu 66 23.2523.25

2929 Thüringer RostbratwurstThüringer Rostbratwurst 1212 123.79123.79

6262 Tarte au sucreTarte au sucre 2929 49.349.3

Exemplo 1Exemplo 1

Page 15: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Recuperando um intervalo de valores

USE northwindSELECT productname, unitpriceFROM productsWHERE unitprice BETWEEN 10 AND 20GO

USE northwindSELECT productname, unitpriceFROM productsWHERE unitprice BETWEEN 10 AND 20GO

productnameproductnameproductnameproductname unitpriceunitpriceunitpriceunitprice

ChaiChai 1818

ChangChang 1919

Aniseed SyrupAniseed Syrup 1010

Genen ShouyuGenen Shouyu 15.515.5

PavlovaPavlova 17.4517.45

Sir Rodney’s SconesSir Rodney’s Scones 1010

…… ……

Exemplo 1Exemplo 1

Page 16: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

USE northwindSELECT companyname, countryFROM suppliersWHERE country IN ('Japan', 'Italy')

GO

USE northwindSELECT companyname, countryFROM suppliersWHERE country IN ('Japan', 'Italy')

GO

Usando uma lista de valores como critérios de pesquisa

companynamecompanynamecompanynamecompanyname countrycountrycountrycountry

Tokyo TradersTokyo Traders JapanJapan

Mayumi’sMayumi’s JapanJapan

Formaggi Fortini s.r.l.Formaggi Fortini s.r.l. ItalyItaly

Pasta Buttini s.r.l.Pasta Buttini s.r.l. ItalyItaly

Exemplo 1Exemplo 1

Page 17: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Recuperando valores Nulos

USE northwindSELECT companyname, faxFROM suppliersWHERE fax IS NULLGO

USE northwindSELECT companyname, faxFROM suppliersWHERE fax IS NULLGO

companynamecompanynamecompanynamecompanyname faxfaxfaxfax

Exotic LiquidsExotic Liquids NULLNULL

New Orleans Cajun DelightsNew Orleans Cajun Delights NULLNULL

Tokyo TradersTokyo Traders NULLNULL

Cooperativa de Quesos ‘Las Cabras’Cooperativa de Quesos ‘Las Cabras’ NULLNULL

…… ……

Page 18: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Formatando conjuntos de resultados

• Classificando dados

• Ocultando registros duplicados

• Alterando nomes de colunas

• Usando literais

Page 19: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Classificando dados

USE northwindSELECT productid, productname, categoryid, unitprice FROM products ORDER BY categoryid, unitprice DESCGO

USE northwindSELECT productid, productname, categoryid, unitprice FROM products ORDER BY categoryid, unitprice DESCGO

productidproductidproductidproductid productnameproductnameproductnameproductname categoryidcategoryidcategoryidcategoryid unitpriceunitpriceunitpriceunitprice

3838 Cote de BlayeCote de Blaye 11 263.5000263.5000

4343 Ipoh CoffeeIpoh Coffee 11 46.000046.0000

22 ChangChang 11 19.000019.0000

…… …… …… ……

6363 Vegie-spreadVegie-spread 22 43.900043.9000

88 Northwoods Cranberry SauceNorthwoods Cranberry Sauce 22 40.000040.0000

6161 Sirop d'érableSirop d'érable 22 28.500028.5000

…… …… …… ……

Exemplo 1Exemplo 1

Page 20: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Ocultando registros duplicados

USE northwindSELECT DISTINCT country FROM suppliers ORDER BY countryGO

USE northwindSELECT DISTINCT country FROM suppliers ORDER BY countryGO

countrycountrycountrycountry

AustraliaAustralia

BrazilBrazil

CanadaCanada

DenmarkDenmark

FinlandFinland

FranceFrance

GermanyGermany

ItalyItaly

JapanJapan

NetherlandsNetherlands

NorwayNorway

SingaporeSingapore

SpainSpain

SwedenSweden

UKUK

USAUSA

Exemplo 1Exemplo 1

Page 21: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Alterando nomes de colunas

USE northwindSELECT firstname AS First, lastname AS Last

,employeeid AS 'Employee ID:' FROM employeesGO

USE northwindSELECT firstname AS First, lastname AS Last

,employeeid AS 'Employee ID:' FROM employeesGO

FirstFirstFirstFirst LastLastLastLast Employee ID:Employee ID:Employee ID:Employee ID:

NancyNancy DavolioDavolio 11

AndrewAndrew FullerFuller 22

JanetJanet LeverlingLeverling 33

MargaretMargaret PeacockPeacock 44

StevenSteven BuchananBuchanan 55

MichaelMichael SuyamaSuyama 66

RobertRobert KingKing 77

LauraLaura CallahanCallahan 88

AnneAnne DodsworthDodsworth 99

Page 22: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Usando literais

USE northwindSELECT firstname, lastname,

'Identification number:', employeeidFROM employeesGO

USE northwindSELECT firstname, lastname,

'Identification number:', employeeidFROM employeesGO

firstnamefirstname firstnamefirstname lastnamelastname lastnamelastname employeeidemployeeid employeeidemployeeid

NancyNancy DavolioDavolio Identification Number: 1Identification Number: 1

AndrewAndrew FullerFuller

JanetJanet LeverlingLeverling

MargaretMargaret PeacockPeacock

StevenSteven BuchananBuchanan

MichaelMichael SuyamaSuyama

RobertRobert KingKing

LauraLaura CallahanCallahan

AnneAnne DodsworthDodsworth

Identification Number: 2Identification Number: 2

Identification Number: 3Identification Number: 3

Identification Number: 4Identification Number: 4

Identification Number: 5Identification Number: 5

Identification Number: 6Identification Number: 6

Identification Number: 7Identification Number: 7

Identification Number: 8Identification Number: 8

Identification Number: 9Identification Number: 9

Page 23: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Visão geral

• Usando aliases para nomes de tabelas

• Combinando dados de várias tabelas

• Combinando vários conjuntos de resultados

Page 24: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Usando aliases para nomes de tabelas

• Exemplo 1 (sem nome de alias)

• Exemplo 2 (com nome de alias)USE joindbSELECT buyer_name, s.buyer_id, qty FROM buyers AS b INNER JOIN sales AS s ON b.buyer_id = s.buyer_idGO

USE joindbSELECT buyer_name, s.buyer_id, qty FROM buyers AS b INNER JOIN sales AS s ON b.buyer_id = s.buyer_idGO

USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers INNER JOIN sales ON buyers.buyer_id = sales.buyer_idGO

USE joindb SELECT buyer_name, sales.buyer_id, qty FROM buyers INNER JOIN sales ON buyers.buyer_id = sales.buyer_idGO

Page 25: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Combinando dados de várias tabelas

• Introdução às associações

• Usando associações internas

• Usando associações externas

• Usando associações cruzadas

• Associando mais de duas tabelas

• Associando uma tabela a si mesma

Page 26: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Introdução às associações

• Selecionar colunas específicas a partir de várias tabelas– A palavra-chave JOIN especifica quais tabelas serão

associadas e como associá-las– A palavra-chave ON especifica as colunas que as

tabelas têm em comum

• Consultar duas ou mais tabelas para produzir um conjunto de resultados– Usar chaves primárias e externas como condições

de associação– Usar colunas comuns às tabelas especificadas para

associar tabelas

Page 27: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

USE joindbSELECT buyer_name, sales.buyer_id, qty FROM buyers INNER JOIN sales ON buyers.buyer_id = sales.buyer_idGO

USE joindbSELECT buyer_name, sales.buyer_id, qty FROM buyers INNER JOIN sales ON buyers.buyer_id = sales.buyer_idGO

buyer_namebuyer_namebuyer_namebuyer_name

Adam BarrAdam Barr

Sean ChaiSean Chai

Eva CoretsEva Corets

Erin O’MeliaErin O’Melia

buyer_idbuyer_idbuyer_idbuyer_id

11

22

33

44

sales

buyer_idbuyer_idbuyer_idbuyer_id prod_idprod_idprod_idprod_id qtyqtyqtyqty

11

11

44

33

22

33

11

55

1515

55

3737

1111

44 22 10031003

buyers

Resultado

buyer_namebuyer_namebuyer_namebuyer_name

Adam BarrAdam Barr

Adam BarrAdam Barr

Erin O’MeliaErin O’Melia

Eva CoretsEva Corets

buyer_idbuyer_idbuyer_idbuyer_id qtyqtyqtyqty

11

11

44

33

1515

55

3737

1111

Erin O’MeliaErin O’Melia 44 10031003

Exemplo 1Exemplo 1

Page 28: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

USE joindbSELECT buyer_name, sales.buyer_id, qty FROM buyers LEFT OUTER JOIN sales ON buyers.buyer_id = sales.buyer_idGO

USE joindbSELECT buyer_name, sales.buyer_id, qty FROM buyers LEFT OUTER JOIN sales ON buyers.buyer_id = sales.buyer_idGO

buyer_idbuyer_idbuyer_idbuyer_id prod_idprod_idprod_idprod_id qtyqtyqtyqty

11

11

44

33

22

33

11

55

1515

55

3737

1111

44 22 10031003

buyer_namebuyer_namebuyer_namebuyer_name

Adam BarrAdam Barr

Sean ChaiSean Chai

Eva CoretsEva Corets

Erin O’MeliaErin O’Melia

buyer_idbuyer_idbuyer_idbuyer_id

11

22

33

44

salesbuyers

Resultado

buyer_namebuyer_namebuyer_namebuyer_name

Adam BarrAdam Barr

Adam BarrAdam Barr

Erin O’MeliaErin O’Melia

Eva CoretsEva Corets

buyer_idbuyer_idbuyer_idbuyer_id qtyqtyqtyqty

11

11

44

33

1515

55

3737

1111

Erin O’MeliaErin O’Melia 44 10031003

Sean ChaiSean Chai NULLNULL NULLNULL

Exemplo 1Exemplo 1

Page 29: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Resultado

USE joindbSELECT buyer_name, qty FROM buyers CROSS JOIN salesGO

USE joindbSELECT buyer_name, qty FROM buyers CROSS JOIN salesGO

buyer_namebuyer_namebuyer_namebuyer_name

Adam BarrAdam Barr

Adam BarrAdam Barr

Adam BarrAdam Barr

Adam BarrAdam Barr

qtyqtyqtyqty

1515

55

3737

1111

Adam BarrAdam Barr 10031003

Sean ChaiSean Chai 1515

Sean ChaiSean Chai 55

Sean ChaiSean Chai 3737

Sean ChaiSean Chai 1111

Sean ChaiSean Chai 10031003

Eva CoretsEva Corets 1515

...... ......

sales

buyer_idbuyer_idbuyer_idbuyer_id prod_idprod_idprod_idprod_id qtyqtyqtyqty

11

11

44

33

22

33

11

55

1515

55

3737

1111

44 22 10031003

buyers

buyer_idbuyer_idbuyer_idbuyer_id

11

22

33

44

buyer_namebuyer_namebuyer_namebuyer_name

Adam BarrAdam Barr

Sean ChaiSean Chai

Eva CoretsEva Corets

Erin O’MeliaErin O’Melia

Exemplo 1Exemplo 1

Page 30: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

USE joindbSELECT buyer_name, prod_name, qty FROM buyers INNER JOIN sales ON buyers.buyer_id = sales.buyer_id INNER JOIN produce ON sales.prod_id = produce.prod_idGO

USE joindbSELECT buyer_name, prod_name, qty FROM buyers INNER JOIN sales ON buyers.buyer_id = sales.buyer_id INNER JOIN produce ON sales.prod_id = produce.prod_idGO

producebuyers sales

Resultado

Associando mais de duas tabelas

prod_idprod_idprod_idprod_id prod_nameprod_nameprod_nameprod_name

11

22

33

44

ApplesApples

PearsPears

OrangesOranges

BananasBananas

55 PeachesPeaches

buyer_idbuyer_idbuyer_idbuyer_id

11

22

33

44

buyer_namebuyer_namebuyer_namebuyer_name

Adam BarrAdam Barr

Sean ChaiSean Chai

Eva CoretsEva Corets

Erin O’MeliaErin O’Melia

buyer_idbuyer_idbuyer_idbuyer_id

11

11

33

44

prod_idprod_idprod_idprod_id

22

33

11

55

22 22

qtyqtyqtyqty

1515

55

3737

1111

10031003

Exemplo 1Exemplo 1

buyer_namebuyer_namebuyer_namebuyer_name

Erin O’MeliaErin O’Melia

Adam BarrAdam Barr

Erin O’MeliaErin O’Melia

Adam BarrAdam Barr

Eva CoretsEva Corets

prod_nameprod_nameprod_nameprod_name

ApplesApples

PearsPears

PearsPears

OrangesOranges

PeachesPeaches

qtyqtyqtyqty

3737

1515

10031003

55

1111

Page 31: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

USE joindbSELECT a.buyer_id AS buyer1, a.prod_id ,b.buyer_id AS buyer2 FROM sales AS a INNER JOIN sales AS b ON a.prod_id = b.prod_idWHERE a.buyer_id > b.buyer_idGO

USE joindbSELECT a.buyer_id AS buyer1, a.prod_id ,b.buyer_id AS buyer2 FROM sales AS a INNER JOIN sales AS b ON a.prod_id = b.prod_idWHERE a.buyer_id > b.buyer_idGO

Associando uma tabela a si mesma

sales b

buyer_idbuyer_idbuyer_idbuyer_id prod_idprod_idprod_idprod_id qtyqtyqtyqty

11

11

44

33

22

33

11

55

1515

55

3737

1111

44 22 10031003

sales a

buyer_idbuyer_idbuyer_idbuyer_id prod_idprod_idprod_idprod_id qtyqtyqtyqty

11

11

44

33

22

33

11

55

1515

55

3737

1111

44 22 10031003

Resultado

buyer1buyer1buyer1buyer1

44prod_idprod_idprod_idprod_id buyer2buyer2buyer2buyer2

22 11

Exemplo 3Exemplo 3

Page 32: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Combinando vários conjuntos de resultados

• Usar o operador UNION para criar um único conjuntode resultados de várias consultas

• As consultas precisam de:– Tipos de dados semelhantes– Número de colunas idêntico– Ordem de colunas idêntica na lista de seleções

USE northwindSELECT (firstname + ' ' + lastname) AS name ,city, postalcode FROM employeesUNIONSELECT companyname, city, postalcode FROM customersGO

USE northwindSELECT (firstname + ' ' + lastname) AS name ,city, postalcode FROM employeesUNIONSELECT companyname, city, postalcode FROM customersGO

Page 33: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Hands on: Comandos de seleção Avançados

• Acompanhe junto com o seu instrutor os comandos nos detalhes deste slide. Execute o código e verifique alguns dos principais comandos de seleção do SQL Server.

• Você acompanhará consultas básicas e avanças.

• Após, nos demais slides você encontrará detalhes sobre cada comando.

Page 34: Área de Banco de Dados Transact SQL : Consultando o Banco de Dados

Laboratório: Considerando a Base de Dados AERO, construa queries para responder as seguintes perguntas

1) O nome de todos os pilotos da varig.2) O nome de todos os pilotos, junto com seu salário e gratificação.3) O nome da cidade e país de destino do vôo RG230.4) A companhia dos vôos escalados para 1-Maio-2003.5) O código de todos os vôos, nome dos pilotos escalados para os mesmos, e respectivos tipos de avião e companhia.6) O código de todos os vôos que iniciam por RG ou VS, junto com a respectiva companhia.7) O código de todos os vôos para a Alemanha ou Itália, com as respectivas data e hora de saída.8) O nome de todos os aeroportos onde a varig opera.9) O salário do piloto mais bem pago da varig.10) O menor, maior, e média dos salários dos pilotos de companhias brasileiras.11) O número de aeroportos no Brasil.12) O número de diferentes vôos que a varig oferece para São Paulo.13) Para cada companhia, o menor, maior salário, bem como a média.14) Para cada cidade do Brasil, o número de aeroportos que possui.15) Para cada dia e hora, o número de vôos que partem pela manhã.16) As companhias que pagam como salário mais alto a seus pilotos menos que 2.000.17) As companhias brasileiras que possuem pelo menos 2 pilotos.18) As companhias que só usam um tipo de avião.19) O código dos pilotos cujos vôos escalados sempre tem a mesma destinação.20) O nome do país que é destino apenas de vôos para os quais sempre o mesmo piloto é escalado.21) O nome das companhias que voam de MD11.22) O nome das companhias que não voam de MD11.23) Nome dos pilotos que voam de MD11 ou de 737.24) Nome dos pilotos que voam de MD11 e de 737.25) Nome das companhias que empregam pelo menos dois pilotos.26) Nome dos pilotos que trabalham para companhias que empregam pelo menos dois pilotos.27) Nome dos pilotos que ganham menos que a média salarial.28) Selecione todas as companhia brasileiras onde a media salarial é maior que 3000.29) Selecione o piloto com maior salario da varig.30) Selecione o piloto com maior salario de cada companhia.