11.01.2020 Views

BDGeo - Linguagem SQL - Consultando Dados II

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

INSTITUTO FEDERAL DE

EDUCAÇÃO, CIÊNCIA E TECNOLOGIA

PARAÍBA

Linguagem SQL

Consultando Dados II

Linguagem SQL - Consultando Dados II

11/01/2020

1


• Usando Funções de Agregação

• As funções agregadas:

• Operam na coleta de valores de uma coluna da tabela;

• Produzem um resultado único;

• Não atuam sobre valores nulos.

• A cláusula DISTINCT pode ser usada como parte do argumento

para eliminar linhas repetidas antes de aplicar a função.

Linguagem SQL - Consultando Dados II 11/01/2020 2


• Contando os Registros

Sintaxe:

SELECT COUNT(*)

FROM <tabela>

Exemplo 1: Exibir a quantidade de clientes cadastrados.

SELECT COUNT(*) AS quantidade

FROM cliente

Exemplo 2: Exibir quantos pedidos foram atendidos por via aérea.

SELECT COUNT(*) AS quantidade

FROM pedido

WHERE via = 'A'

Linguagem SQL - Consultando Dados II 11/01/2020 3


• Contando os Registros

Exemplo 3: Exibir quantos funcionários tem email.

SELECT COUNT(*) AS quantidade

FROM funcionario

WHERE email IS NOT NULL

SELECT COUNT(email) AS quantidade

FROM funcionario

Exemplo 4: Exibir quantos vendedores já atenderam pedido.

SELECT COUNT(DISTINCT vendedor) AS quantidade

FROM pedido

Linguagem SQL - Consultando Dados II 11/01/2020 4


• Totalizando Colunas

Sintaxe:

SELECT SUM(<coluna>)

FROM <tabela>

Exemplo 1: Exibir a soma de todos os salários da empresa.

SELECT SUM(salario) AS total

FROM funcionario

Exemplo 2: Exibir o valor total em estoque de todos os produtos

(preço de venda X quantidade em estoque).

SELECT SUM(venda*quantest) AS total

FROM produto

Linguagem SQL - Consultando Dados II 11/01/2020 5


• Calculando Médias

Sintaxe:

SELECT AVG(<coluna>)

FROM <tabela>

Exemplo 1: Exibir o valor médio de todos os salários da empresa.

SELECT AVG(salario) AS valor_médio

FROM funcionario

Exemplo 2: Exibir o preço médio de venda dos produtos que não

sejam dos tipos 1, 3 e 4, com duas casas decimais.

SELECT TRUNC(AVG(venda),2) AS preço_médio

FROM produto

WHERE idtipo NOT IN (1,3,4)

Linguagem SQL - Consultando Dados II 11/01/2020 6


• Calculando Valores Máximos

Sintaxe:

SELECT MAX(<coluna>)

FROM <tabela>

Exemplo 1: Exibir o preço do produto mais caro da empresa.

SELECT MAX(venda) AS mais_caro

FROM produto

Exemplo 2: Exibir o maior salário pago a uma funcionária.

SELECT MAX(salario) AS maior_salario

FROM funcionario

WHERE sexo = 'F'

Linguagem SQL - Consultando Dados II 11/01/2020 7


• Calculando Valores Mínimos

Sintaxe:

SELECT MIN(<coluna>)

FROM <tabela>

Exemplo 1: Exibir a data da fatura do primeiro pedido.

SELECT MIN(datafatura) AS data

FROM pedido

Exemplo 2: Exibir a data de nascimento do funcionário do sexo

masculino mais velho da empresa.

SELECT TO_CHAR(MIN(datanasc),'dd/mm/yyyy')

FROM funcionario

WHERE sexo = 'M'

Linguagem SQL - Consultando Dados II 11/01/2020 8


• Agrupando Informações

Sintaxe:

SELECT <lista de colunas>

FROM <tabela>

GROUP BY <coluna>

[HAVING] <condição>

Exemplo 1: Exibir a quantidade de funcionários de cada sexo

existente na empresa.

SELECT sexo, COUNT(*) AS quantidade

FROM funcionario

GROUP BY sexo

Linguagem SQL - Consultando Dados II 11/01/2020 9


• Agrupando Informações

Exemplo 2: Exibir a quantidade de funcionários e o valor total de

salários de cada setor da empresa.

SELECT idsetor, COUNT(*) AS quantidade,

SUM(salario) AS total

FROM funcionario

GROUP BY idsetor

Exemplo 3: Exibir a quantidade de pedidos realizados em cada ano.

SELECT DATE_PART('YEAR',datapedid) AS ano,

COUNT(*)[Quantidade]

FROM pedido

GROUP BY DATE_PART('YEAR',datapedid)

ORDER BY DATE_PART('YEAR',datapedid)

Linguagem SQL - Consultando Dados II 11/01/2020 10


• Agrupando Informações

Exemplo 4: Exibir o código do pedido e a quantidade de produtos

dos pedidos que tem mais do que três produtos.

SELECT idpedido, COUNT(idproduto) AS quantidade

FROM itens

GROUP BY idpedido

HAVING COUNT(idproduto) > 3

Exemplo 5: Exibir a quantidade de pedidos realizados em cada ano,

para os anos que tem mais de 100 pedidos.

SELECT DATE_PART('YEAR',datapedid) AS ano,

COUNT(idpedido) AS quantidade

FROM pedido

GROUP BY DATE_PART('YEAR',datapedid)

HAVING COUNT(idpedido) > 100

Linguagem SQL - Consultando Dados II 11/01/2020 11


• Juntando Tabelas

• A junção de várias tabelas permite consultar, em um único SELECT,

informações contidas em diferentes tabelas.

• Para se fazer uma junção é necessário que as tabelas estejam

relacionadas.

• A junção entre duas tabelas é realizada através da ligação entre a

chave estrangeira de uma tabela e a respectiva chave primária

referenciada.

PK da tabela 1 = FK da tabela 2

Linguagem SQL - Consultando Dados II 11/01/2020 12


• Juntando Tabelas

• Exibe apenas as linhas que participam do relacionamento, ou

seja, apenas os registros em que exista ligação entre as tabelas

serão exibidos.

A B C D

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

17 18 19 20

E F G H

30 31 32 33

34 35 36 37

38 39 40 41

42 43 44 45

46 47 48 49

50 51 52 53

54 55 56 57

58 59 60 61

Linguagem SQL - Consultando Dados II 11/01/2020 13


• Juntando Tabelas

Resultado

A B C D E F G H

1 2 3 4 30 31 32 33

1 2 3 4 34 35 36 37

9 10 11 12 38 39 40 41

9 10 11 12 46 47 48 49

13 14 15 16 50 51 52 53

13 14 15 16 58 59 60 61

Linguagem SQL - Consultando Dados II 11/01/2020 14


• Junção com Duas Tabelas

Sintaxe:

SELECT <lista de colunas>

FROM <tabela1> [alias1]

[INNER] JOIN <tabela2> [alias2]

ON <condição de relacionamento>

SELECT <lista de colunas>

FROM <tabela1> [alias1], <tabela2> [alias2]

WHERE <condição de relacionamento>

• O formato da condição de relacionamento é:

PK da tabela1 = FK da tabela 2 ou

FK da tabela 2 = PK da tabela 1

Linguagem SQL - Consultando Dados II 11/01/2020 15


• Junção com Duas Tabelas

Exemplo 1: Exibir o código de cada pedido e o nome do cliente que

realizou cada um deles, ordenados pelo código do pedido.

SELECT pedido.idpedido AS pedido, cliente.nome

FROM cliente INNER JOIN pedido

ON cliente.idcliente = pedido.idcliente

ORDER BY pedido.idpedido

Linguagem SQL - Consultando Dados II 11/01/2020 16


• Junção com Duas Tabelas

Exemplo 2: Exibir para cada funcionário, código e nome do

funcionário, sigla e nome do setor onde trabalha, ordenados pela

sigla do setor e nome do funcionário.

SELECT fu.idfuncionario, fu.nome AS funcionário,

se.idsetor, se.nome AS setor

FROM funcionario AS fu JOIN setor AS se

ON se.idsetor = fu.idsetor

ORDER BY se.idsetor, fu.nome

Linguagem SQL - Consultando Dados II 11/01/2020 17


• Junção com Duas Tabelas

Exemplo 3: Exibir a quantidade, a média dos preços de venda

e de custo dos produtos de cada tipo, mostrando o código e o nome

do tipo do produto.

SELECT ti.idtipo, ti.nome AS tipo,

COUNT(pr.idproduto) AS quantidade,

AVG(pr.venda) AS venda, AVG(pr.custo) AS custo

FROM produto AS pr JOIN tipo AS ti

ON ti.idtipo = pr.idtipo

GROUP BY ti.idtipo, ti.nome

Linguagem SQL - Consultando Dados II 11/01/2020 18


• Junção Com Mais de Duas Tabelas

Sintaxe:

SELECT <lista de colunas>

FROM <tabela1> [alias1]

[INNER] JOIN <tabela2> [alias2]

ON <condição de relacionamento1>

[INNER] JOIN <tabela3> [alias3]

ON <condição de relacionamento2> ...

[INNER] JOIN <tabelaN> [aliasN]

ON <condição de relacionamentoN>

Linguagem SQL - Consultando Dados II 11/01/2020 19


• Junção Com Mais de Duas Tabelas

Exemplo 1: Exibir o código dos pedidos, a via de transporte de cada

um deles, o nome do cliente e o nome do vendedor, ordenados pelo

código do pedido.

SELECT pe.idpedido AS pedido, pe.via,

cl.nome AS cliente, fu.nome AS vendedor

FROM pedido AS pe JOIN cliente AS cl

ON cl.idcliente = pe.idcliente

JOIN funcionario AS fu

ON fu.idfuncionario = pe.idvendedor

ORDER BY pe.idpedido

Linguagem SQL - Consultando Dados II 11/01/2020 20


• Junção Com Mais de Duas Tabelas

Exemplo 2: Exibir o nome do funcionário, o nome da cidade onde

reside, o nome da cidade e o nome do país onde nasceu, ordenados

pelo nome do funcionário em ordem ascendente.

SELECT fu.nome AS funcionário, c1.nome AS reside,

c2.nome AS nasceu, pa.nome AS país

FROM funcionario AS fu JOIN cidade AS c1

ON c1.idcidade = fu.idreside

JOIN cidade AS c2 ON c2.idcidade = fu.idnasceu

JOIN pais AS pa ON pa.idpais = c2.idpais

ORDER BY fu.nome

Linguagem SQL - Consultando Dados II 11/01/2020 21


• Junção Com Mais de Duas Tabelas

Exemplo 3: Exibir o nome do país e a quantidade de clientes

existente em cada um deles, ordenando pelo nome do país em

ordem ascendente.

SELECT pa.nome, COUNT(cl.idcliente) AS quantidade

FROM cliente AS cl JOIN cidade AS ci

ON ci.idcidade = cl.idcidade

JOIN pais AS pa ON pa.idpais = ci.idpais

GROUP BY pa.nome

ORDER BY pa.nome

Linguagem SQL - Consultando Dados II 11/01/2020 22


• Junção Com Mais de Duas Tabelas

Exemplo 4: Exibir os nomes dos países estrangeiros e a quantidade

de pedidos realizados pelos clientes de cada um deles, mostrando

apenas os países para os quais houve mais de 10 pedidos,

ordenando pelo nome do país em ordem ascendente.

SELECT pa.nome, COUNT(pe.idpedido) AS quantidade

FROM cliente AS cl JOIN pedido AS pe

ON cl.idcliente = pe.idcliente

JOIN cidade AS ci ON ci.idcidade = cl.idcidade

JOIN pais AS pa ON pa.idpais = ci.idpais

WHERE pa.nome <> 'Brasil'

GROUP BY pa.nome

HAVING COUNT(pe.idpedido) > 10

ORDER BY pa.nome

Linguagem SQL - Consultando Dados II 11/01/2020 23


Copyright © 2019 Nilton Freire Santos.

Todos os direitos reservados.

Linguagem SQL - Consultando Dados II 24

11/01/2020


Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!