58
Bancos de Dados SQL Server 2012 SQL – Consultas

Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Embed Size (px)

Citation preview

Page 1: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Bancos de Dados

SQL Server 2012

SQL – Consultas

Page 2: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

SQL - Consultas

• Elementos Básicos do SQL• Agrupamento e Sumarização• Junção de dados de múltiplas tabelas• Subqueries

Page 3: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Elementos Básicos do SQL

• Selecionando dados com o comando SELECT• Filtrando Dados• Formatando os resultados (Result Sets)

Page 4: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Selecionando dados com o comando SELECT

• Usando o comando SELECT• Especificando as colunas a serem retornadas• Usando a cláusula WHERE para especificar as

linhas a serem retornadas

Page 5: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Usando o comando SELECT

• A “Select List” especifica as colunas• A cláusula WHERE especifica as linhas• A cláusula FROM especifica a tabela

Sintaxe ParcialSELECT [ALL | DISTINCT] <select_list> FROM {<table_source>} [,…n] WHERE <search_condition>

SELECT [ALL | DISTINCT] <select_list> FROM {<table_source>} [,…n] WHERE <search_condition>

Page 6: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Especificando as colunas a serem retornadas

employeeidemployeeid lastnamelastname firstnamefirstname titletitle

11 DavolioDavolio NancyNancy Sales RepresentativeSales Representative

22 FullerFuller AndrewAndrew Vice President, SalesVice President, Sales

33 LeverlingLeverling JanetJanet Sales RepresentativeSales Representative

44 PeacockPeacock MargaretMargaret Sales RepresentativeSales Representative

55 BuchananBuchanan StevenSteven Sales ManagerSales Manager

66 SuyamaSuyama MichaelMichael Sales RepresentativeSales Representative

77 KingKing RobertRobert Sales RepresentativeSales Representative

88 CallahanCallahan LauraLaura Inside Sales CoordinatorInside Sales Coordinator

99 DodsworthDodsworth AnneAnne Sales RepresentativeSales Representative

USE northwindSELECT employeeid, lastname, firstname, titleFROM employeesGO

USE northwindSELECT employeeid, lastname, firstname, titleFROM employeesGO

Page 7: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Usando a cláusula Where para especificar as linhas retornadas

employeeidemployeeid lastnamelastname firstnamefirstname titletitle

55 BuchananBuchanan StevenSteven Sales ManagerSales Manager

USE northwindSELECT employeeid, lastname, firstname, titleFROM employeesWHERE employeeid = 5GO

USE northwindSELECT employeeid, lastname, firstname, titleFROM employeesWHERE employeeid = 5GO

Page 8: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Filtragem

• Usando Operadores de Comparação• Comparando Strings• Usando Operadores Lógicos• Selecionando Faixas de Valores• Usando uma Lista de Valores como critério

para busca• Selecionando Valores Desconhecidos (Null)

Page 9: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Usando Operadores de Comparação

USE northwindSELECT lastname, cityFROM employeesWHERE country = 'USA‘

GO

USE northwindSELECT lastname, cityFROM employeesWHERE country = 'USA‘

GO

lastnamelastname citycity

DavolioDavolio SeattleSeattle

FullerFuller TacomaTacoma

LeverlingLeverling KirklandKirkland

PeacockPeacock RedmondRedmond

CallahanCallahan SeattleSeattle

Exemplo 1Exemplo 1

Page 10: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Comparando Strings

USE northwindSELECT companynameFROM customersWHERE companyname LIKE '%Restaurant%‘GO

USE northwindSELECT companynameFROM customersWHERE companyname LIKE '%Restaurant%‘GO

companynamecompanyname

GROSELLA-RestauranteGROSELLA-Restaurante

Lonesome Pine RestaurantLonesome Pine Restaurant

Tortuga RestauranteTortuga Restaurante

Page 11: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

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

productidproductid productnameproductname supplieridsupplierid unitpriceunitprice

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 12: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Selecionando uma Faixa de ValoresUSE northwindSELECT productname, unitpriceFROM productsWHERE unitprice BETWEEN 10 AND 20GO

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

productnameproductname unitpriceunitprice

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 13: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

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 para busca

companynamecompanyname countrycountry

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 14: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Buscando Valores DesconhecidosUSE northwindSELECT companyname, faxFROM suppliersWHERE fax IS NULLGO

USE northwindSELECT companyname, faxFROM suppliersWHERE fax IS NULLGO

companynamecompanyname faxfax

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 15: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Formatando os Resultados

• Ordenando Dados (Sort)• Eliminando linhas duplicadas• Mudando nomes de colunas• Usando Literais

Page 16: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Ordenando DadosUSE 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

productidproductid productnameproductname categoryidcategoryid unitpriceunitprice

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 17: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Eliminando linhas duplicadas

USE northwindSELECT DISTINCT country FROM suppliers ORDER BY countryGO

USE northwindSELECT DISTINCT country FROM suppliers ORDER BY countryGO

countrycountry

AustraliaAustralia

BrazilBrazil

CanadaCanada

DenmarkDenmark

FinlandFinland

FranceFrance

GermanyGermany

ItalyItaly

JapanJapan

NetherlandsNetherlands

NorwayNorway

SingaporeSingapore

SpainSpain

SwedenSweden

UKUK

USAUSA

Exemplo 1Exemplo 1

Page 18: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Mudando nomes de colunasUSE 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

FirstFirst LastLast 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 19: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Usando LiteraisUSE northwindSELECT firstname, lastname

,'Identification number:', employeeidFROM employeesGO

USE northwindSELECT firstname, lastname

,'Identification number:', employeeidFROM employeesGO

FirstFirst LastLast Employee ID:Employee ID:

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 20: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Considerações de Performance

• Buscas envolvendo NOT podem reduzir o desempenho de consultas

• Algumas Buscas envolvendo LIKE podem reduzir o desempenho de consultas

• Buscas exatas ou por faixas podem aumentar o desempenho de consultas

• ORDER BY pode reduzir o desempenho de consultas

Page 21: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Agrupamento e Sumarização

• Selecionando os TOP n Valores• Usando Funções de Agregação• GROUP BY Fundamentals• Usando as cláusulas COMPUTE e

COMPUTE BY

Page 22: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Selecionando os TOP n Valores• Lista somente as primeiras n linhas do Result Set• Order By determina a faixa de valores• Retorna empates se WITH TIES é usado

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 23: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Usando Funções de Agregação

Aggregate functionAggregate function DescriptionDescription

AVGAVG Average of values in a numeric expressionAverage of values in a numeric expression

COUNTCOUNT Number of values in an expressionNumber of values in an expression

COUNT (*)COUNT (*) Number of selected rowsNumber of selected rows

MAXMAX Highest value in the expressionHighest value in the expression

MINMIN Lowest value in the expressionLowest value in the expression

SUMSUM Total values in a numeric expressionTotal values in a numeric expression

STDEVSTDEV Statistical deviation of all valuesStatistical deviation of all values

STDEVPSTDEVP Statistical deviation for the populationStatistical deviation for the population

VARVAR Statistical variance of all valuesStatistical variance of all values

VARPVARP Statistical variance of all values for the populationStatistical variance of all values for the population

Page 24: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Usando Funções de Agregaçãocom valores NULL

• A maioria das funções de agregação ignora valores Null• Função COUNT(*) também conta as linhas com valores

Null

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 25: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Fundamentos GROUP BY

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

HAVING

Page 26: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

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

productidproductid total_quantitytotal_quantity

11 1515

22 3535

33 4545

productidproductid orderidorderid quantityquantity

11 11 55

11 11 1010

22 11 1010

22 22 2525

33 11 1515

33 22 3030

productidproductid total_quantitytotal_quantity

22 3535

Somente linhas que satisfazem a cláusula Where são agrupadas

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 27: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

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

productidproductid total_quantitytotal_quantity

22 3535

33 4545

productidproductid orderidorderid quantityquantity

11 11 55

11 11 1010

22 11 1010

22 22 2525

33 11 1515

33 22 3030

Page 28: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

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 orderhistORDER BY productid, orderidCOMPUTE SUM(quantity)GO

USE northwindSELECT productid, orderid ,quantity FROM orderhistORDER BY productid, orderidCOMPUTE SUM(quantity)GO

productidproductid orderidorderid quantityquantity

11 11 55

11 22 1010

22 11 1010

22 22 2525

33 11 1515

33 22 3030

sumsum 9595

productidproductid orderidorderid quantityquantity

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 29: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Junção de dados de múltiplas tabelas

• Usando Aliases (apelidos) para Tabelas• Combinando dados de múltiplas Tabelas• Combinando múltiplos Result Sets• Criando uma Tabela de um Result Set

Page 30: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Usando Aliases (apelidos) para Tabelas

• Exemplo 1 (sem alias)

• Exemplo 2 (com 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 31: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Combinando dados de múltiplas Tabelas

• Fazendo Inner Joins• Fazendo Outer Joins• Fazendo Cross Joins• Fazendo Joins de mais de Duas Tabelas• Fazendo um Join de uma tabela com ela

mesma (Self-Join)

Page 32: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

USE joindbSELECT buyer_name, sales.buyer_id, qtyFROM buyers INNER JOIN salesON buyers.buyer_id = sales.buyer_idGO

USE joindbSELECT buyer_name, sales.buyer_id, qtyFROM buyers INNER JOIN salesON buyers.buyer_id = sales.buyer_idGO

Fazendo Inner Joins

sales

buyer_idbuyer_id prod_idprod_id qtyqty

11

11

44

33

22

33

11

55

1515

55

3737

1111

44 22 10031003

buyers

buyer_namebuyer_name

Adam BarrAdam Barr

Sean ChaiSean Chai

Eva CoretsEva Corets

Erin O’MeliaErin O’Melia

buyer_idbuyer_id

11

22

33

44

Result

buyer_namebuyer_name

Adam BarrAdam Barr

Adam BarrAdam Barr

Erin O’MeliaErin O’Melia

Eva CoretsEva Corets

buyer_idbuyer_id qtyqty

11

11

44

33

1515

55

3737

1111

Erin O’MeliaErin O’Melia 44 10031003

Exemplo 1Exemplo 1

Page 33: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

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

Fazendo Outer Joins

sales

buyer_idbuyer_id prod_idprod_id qtyqty

11

11

44

33

22

33

11

55

1515

55

3737

1111

44 22 10031003

buyers

buyer_namebuyer_name

Adam BarrAdam Barr

Sean ChaiSean Chai

Eva CoretsEva Corets

Erin O’MeliaErin O’Melia

buyer_idbuyer_id

11

22

33

44 Result

buyer_namebuyer_name

Adam BarrAdam Barr

Adam BarrAdam Barr

Erin O’MeliaErin O’Melia

Eva CoretsEva Corets

buyer_idbuyer_id qtyqty

11

11

44

33

1515

55

3737

1111

Erin O’MeliaErin O’Melia 44 10031003

Sean ChaiSean Chai NULLNULL NULLNULL

Exemplo 1Exemplo 1

Page 34: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Fazendo Cross JoinsUSE joindbSELECT buyer_name, qty FROM buyers CROSS JOIN salesGO

USE joindbSELECT buyer_name, qty FROM buyers CROSS JOIN salesGO

Result

buyer_namebuyer_name

Adam BarrAdam Barr

Adam BarrAdam Barr

Adam BarrAdam Barr

Adam BarrAdam Barr

qtyqty

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_id prod_idprod_id qtyqty

11

11

44

33

22

33

11

55

1515

55

3737

1111

44 22 10031003

buyers

buyer_idbuyer_id

11

22

33

44

buyer_namebuyer_name

Adam BarrAdam Barr

Sean ChaiSean Chai

Eva CoretsEva Corets

Erin O’MeliaErin O’Melia

Exemplo 1Exemplo 1

Page 35: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Fazendo Joins de mais de duas tabelasSELECT 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

SELECT 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

produce

prod_idprod_id prod_nameprod_name

11

22

33

44

ApplesApples

PearsPears

OrangesOranges

BananasBananas

55 PeachesPeaches

buyers

buyer_idbuyer_id

11

22

33

44

buyer_namebuyer_name

Adam BarrAdam Barr

Sean ChaiSean Chai

Eva CoretsEva Corets

Erin O’MeliaErin O’Melia

sales

buyer_idbuyer_id

11

11

33

44

prod_idprod_id

22

33

11

55

22 22

qtyqty

1515

55

3737

1111

10031003Result

buyer_namebuyer_name

Erin O’MeliaErin O’Melia

Adam BarrAdam Barr

Erin O’MeliaErin O’Melia

Adam BarrAdam Barr

Eva CoretsEva Corets

prod_nameprod_name

ApplesApples

PearsPears

PearsPears

OrangesOranges

PeachesPeaches

qtyqty

3737

1515

10031003

55

1111

Exemplo 1Exemplo 1

Page 36: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Fazendo um Self-JoinUSE joindbSELECT a.buyer_id AS buyer1, a.prod_id ,b.buyer_id AS buyer2 FROM sales AS a 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 JOIN sales AS b ON a.prod_id = b.prod_idWHERE a.buyer_id > b.buyer_idGO

sales b

buyer_idbuyer_id prod_idprod_id qtyqty

11

11

44

33

22

33

11

55

1515

55

3737

1111

44 22 10031003

sales a

buyer_idbuyer_id prod_idprod_id qtyqty

11

11

44

33

22

33

11

55

1515

55

3737

1111

44 22 10031003

Result

buyer1buyer1

44prod_idprod_id buyer2buyer2

22 11

Exemplo 3Exemplo 3

Page 37: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Combinando múltiplos Result Sets• Use o Operador UNION para Criar um

único Result Set a partir de múltiplas consultas

• Cada consulta deve ter:– Tipos de dados similares– Mesmo número de colunas– Colunas na Lista do Select na mesma ordem

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 38: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

USE northwindSELECT productname AS products, unitprice AS price, (unitprice * 1.1) AS taxINTO #pricetableFROM products

USE northwindSELECT productname AS products, unitprice AS price, (unitprice * 1.1) AS taxINTO #pricetableFROM products

Criando uma Tabela de um Result Set

• Use o comando SELECT INTO– Requer um nome exclusivo para a tabela– Pode-se criar uma tabela temporária local (#)

ou global (##)

Page 39: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Subqueries

• Introdução• Usando uma Subquery como uma Tabela

Derivada• Usando uma Subquery como uma Expressão• Usando uma Subquery para correlacionar dados• Usando as cláusulas EXISTS e NOT EXISTS

Page 40: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Introdução as Subqueries• Para que usar Subqueries?

– Quebrar um problema complexo numa série de passos lógicos

– Para executar uma consulta que depende dos dados de uma outra consulta

• Porque usar Joins em vez de Subqueries– SQL Server tende a executar Joins mais rápido que

Subqueries• Como usar Subqueries

Page 41: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Usando uma Subquery como uma Tabela Derivada

• É um Recordset dentro de uma consulta que funciona como uma Tabela

• Toma o lugar de uma tabela na cláusula FROM• É otimizada normalmente junto com o resto

da consultaUSE northwindSELECT T.orderid, T.customerid FROM ( SELECT orderid, customerid FROM orders ) AS TGO

USE northwindSELECT T.orderid, T.customerid FROM ( SELECT orderid, customerid FROM orders ) AS TGO

Page 42: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Usando uma Subquery como uma Expressão

• É avaliada e tratada como uma expressão• É executada somente uma vez

USE pubsSELECT title, price ,( SELECT AVG(price) FROM titles) AS average ,price-(SELECT AVG(price) FROM titles) AS difference FROM titles WHERE type='popular_comp'GO

USE pubsSELECT title, price ,( SELECT AVG(price) FROM titles) AS average ,price-(SELECT AVG(price) FROM titles) AS difference FROM titles WHERE type='popular_comp'GO

Page 43: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Usando uma Subquery para correlacionar dados

• Executando a Subquery correlacionada• Simulando a cláusula JOIN• Simulando a cláusula HAVING

Page 44: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Executando a Subquery correlacionada

Back to Step 1Back to Step 1

USE northwindSELECT orderid, customerid FROM orders AS or1 WHERE 20 < (SELECT quantity FROM [order details] AS od WHERE or1.orderid = od.orderid AND od.productid = 23)GO

USE northwindSELECT orderid, customerid FROM orders AS or1 WHERE 20 < (SELECT quantity FROM [order details] AS od WHERE or1.orderid = od.orderid AND od.productid = 23)GO

Consulta de fora passa os valores para a de dentro

Consulta de fora passa os valores para a de dentro

Consulta de dentro é executada com valores passados pela de fora

Consulta de dentro é executada com valores passados pela de fora

Consulta de dentro retorna os valores para a consulta de fora

Consulta de dentro retorna os valores para a consulta de fora

O mesmo proceso é repetido para cada uma das linhas da consulta de fora

O mesmo proceso é repetido para cada uma das linhas da consulta de fora

Exemplo 1Exemplo 1

Page 45: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Simulando a cláusula JOIN

• Subqueries correlacionadas podem produzir o mesmo resultado que um JOIN

• Joins permitem que o Query Optimizer determine como correlacionar os dados mais eficientemente

USE pubsSELECT DISTINCT t1.type FROM titles AS t1 WHERE t1.type IN (SELECT t2.type FROM titles AS t2 WHERE t1.pub_id <> t2.pub_id)GO

USE pubsSELECT DISTINCT t1.type FROM titles AS t1 WHERE t1.type IN (SELECT t2.type FROM titles AS t2 WHERE t1.pub_id <> t2.pub_id)GO

Exemplo 1Exemplo 1

Page 46: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Simulando a cláusula HAVING• Subquery com o mesmo resultado de se usar HAVING

• Usando a cláusula HAVING sem a Subquery

USE pubsSELECT t1.type, t1.title, t1.price FROM titles AS t1 WHERE t1.price > ( SELECT AVG(t2.price) FROM titles AS t2 WHERE t1.type = t2.type )GO

USE pubsSELECT t1.type, t1.title, t1.price FROM titles AS t1 WHERE t1.price > ( SELECT AVG(t2.price) FROM titles AS t2 WHERE t1.type = t2.type )GO

USE pubsSELECT t1.type, t1.title, t1.price FROM titles AS t1 INNER JOIN titles AS t2 ON t1.type = t2.type GROUP BY t1.type, t1.title, t1.price HAVING t1.price > AVG(t2.price)GO

USE pubsSELECT t1.type, t1.title, t1.price FROM titles AS t1 INNER JOIN titles AS t2 ON t1.type = t2.type GROUP BY t1.type, t1.title, t1.price HAVING t1.price > AVG(t2.price)GO

Exemplo 1Exemplo 1

Exemplo 2Exemplo 2

Page 47: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Usando uma Subquery correlacionada na cláusula HAVING

• Use a Subquery correlacionada na cláusula HAVING da consulta externa (Outer Query)

USE pubsSELECT t1.typeFROM titles t1GROUP BY t1.typeHAVING MAX(t1.advance) >= ALL (SELECT 2 * AVG(t2.advance) FROM titles t2 WHERE t1.type = t2.type)

USE pubsSELECT t1.typeFROM titles t1GROUP BY t1.typeHAVING MAX(t1.advance) >= ALL (SELECT 2 * AVG(t2.advance) FROM titles t2 WHERE t1.type = t2.type)

Page 48: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Usando as cláusulas EXISTS e NOT EXISTS• Use com consultas correlacionadas• Determine se o dados Existe ou não numa Lista

de Valores• Como o SQL Server processa a consulta

– Consulta externa testa se existem linhas a retornar– Consulta interna retorna TRUE ou FALSE– Nenhum dado é produzido

USE northwindSELECT lastname, employeeid FROM employees AS e WHERE EXISTS (SELECT * FROM orders AS o WHERE e.employeeid = o.employeeid AND o.orderdate = '9/5/97')GO

USE northwindSELECT lastname, employeeid FROM employees AS e WHERE EXISTS (SELECT * FROM orders AS o WHERE e.employeeid = o.employeeid AND o.orderdate = '9/5/97')GO

Exemplo 1Exemplo 1

Page 49: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Exercícios

1. Fazer download do script instnwnd.sql de ftp://ftp.cefetes.br/Cursos/Informatica/ELE-BancosdeDados/Scripts2. Abrir o SQL Server Management Studio e executar o script para criar o banco Northwind3. Verificar se o banco Northwind foi mesmo criado4. Criar um diagrama de todas as tabelas do banco, organizando as tabelas como no próximo slide

Page 50: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Exercícios

Page 51: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Exercícios Básicos5. Selecione as colunas FirstName e LastName da tabela Employees organizando a saída por Lastname 6. Selecione as colunas Title, FirstName e LastName da tabela Employees organizando a saída primeiro por Title e depois Lastname 7. Selecione as colunas Title, FirstName e LastName da tabela Employees organizando a saída primeiro pela coluna 1 e depois pela coluna 38. Selecione as colunas Title, FirstName e LastName da tabela Employees organizando a saída primeiro por Title em ordem ascendente e depois Lastname em ordem descendente9. Selecione as colunas Title, FirstName e LastName da tabela Employees listando apenas os funcionários que não tenham o título de ‘Sales Representative’

Page 52: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Exercícios Básicos10. Selecione as colunas FirstName e LastName da tabela Employees listando apenas os funcionários cujo Sobrenome comece com a letra "N"11. Selecione as colunas FirstName e LastName da tabela Employees listando apenas os funcionários cujo Sobrenome comece da letra "N" em diante (O,P,Q,R...)12. Selecione as colunas FirstName e LastName da tabela Employees listando apenas os funcionários cujo Nome comece da letra “M”, e tendo como segunda letra a letra “a” ou “i”13. Selecione as colunas FirstName , LastName e Region da tabela Employees listando apenas os funcionários em que se conhece a região em que os mesmos estão localizados

Page 53: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Exercícios Básicos14. Selecione as colunas FirstName e LastName da tabela Employees listando apenas os funcionários cujo Sobrenome comece com as letras de “J” a “M”15. Selecione as colunas TitleOfCourtesy, FirstName e LastName da tabela Employees listando apenas os funcionários cujo TitleOfCourtesy comece pela letra “M”16. Selecione as colunas TitleOfCourtesy, FirstName e LastName da tabela Employees listando apenas os funcionários cujo TitleOfCourtesy comece pela letra “M”, seguida por qualquer caracter e um sinal de ponto “.”17. Selecione as colunas TitleOfCourtesy, FirstName e LastName da tabela Employees listando apenas os funcionários cujo TitleOfCourtes não seja "Ms." ou "Mrs."

Page 54: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Exercícios Básicos18. Selecione as colunas FirstName e LastName da tabela Employees listando apenas os funcionários cujo TitleOfCourtesy comece pela letra “M” e cujo título seja de ‘Sales Representative’19. Selecione as colunas City, FirstName e LastName da tabela Employees listando apenas os funcionários que vivem nas cidades de Seattle ou Redmond20. Selecione as colunas FirstName e LastName da tabela Employees listando apenas os funcionários cujo título seja de ‘Sales Representative’ e vivam nas cidades de Seattle ou Redmond

Page 55: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Exercícios Avançados

1. Retorne os nomes dos produtos que começam com as letras a, d, e de m a z, ordenados por nome2. Retorne os nomes dos fornecedores que estão sem homepage informada 3. Mostre a lista de países dos clientes da empresa (tabela Customers), sem repetições4. Mostre os nomes dos clientes que não fizeram pedidos5. Mostre os nomes dos clientes que fizeram pedidos, informando a data em que os mesmos foram feitos6. Mostre os nomes de todos os clientes que fizeram ou não pedidos, informando a data em que os pedidos foram feitos ou a data com o valor NULL caso o cliente nunca tenha feito um pedido

Page 56: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Exercícios Avançados7. Mostre o nome de todos os clientes que nunca fizeram nenhum pedido, usando JOINS para resolver o problema8. Mostre o nome de todos os clientes que nunca fizeram nenhum pedido, usando SUBQUERIES para resolver o problema9. Gere uma lista de nomes de funcionários contendo a data dos pedidos feitos pelos mesmos e nome dos clientes que fizeram os pedidos10. Gere uma lista de pedidos feitos em 1996 e 1997, contendo a descrição de todos os produtos vendidos e a quantidade vendida dos mesmos por pedido11. Liste a quantidade total de itens de cada produto, vendidos até o presente momento12. Liste a quantidade total de itens de cada produto, vendidos em 1996

Page 57: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Exercícios Avançados13. Liste todos os produtos e quantidade totais vendidas, desde que tenham vendido mais que 3 unidades14. Gere uma listagem contendo nomes de clientes fictícios que consistirão da combinação de nomes e sobrenomes de cada um dos clientes existentes15. Mostrar quantos produtos existem em cada categoria, incluindo o nome o nome de cada categoria16. Listar o valor total em vendas realizadas por empregado no mês de Abril/199717. Listar o nome e a soma dos valores de pedidos feitos para cada produto no mês de Março/1998. Listar somente os 10 mais pedidos em função do valor total pedido18. Listar os 5 fornecedores que mais foram acionados no ano de 1997, por total de vendas. Mostrar o nome do fornecedor e o total da venda de cada um deles.

Page 58: Bancos de Dados SQL Server 2012 SQL – Consultas. SQL - Consultas Elementos Básicos do SQL Agrupamento e Sumarização Junção de dados de múltiplas tabelas

Exercícios Avançados19. Listar o total de vendas realizadas mês a mês. Mostrar o mês/ano e o total de vendas realizadas naquele mês/ano20. Gerar uma listagem de funcionários contendo o nome completo dos mesmos (Nome + Sobrenome) 21. Gerar uma listagem de funcionários contendo o nome completo do mesmos e o nome completo dos seus chefes imediatos22. Exibir um ranking dos três países que mais compraram produtos desde 199723. Exiba uma listagem contendo o valor de comissão pago a cada vendedor, mês a mês, durante o ano de 1997. Supor que a comissão paga seja de 1% das vendas