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