Logo Passei Direto
Buscar

Ferramentas de estudo

Questões resolvidas

Alterar o nome da tabela cliente para cliente2 e depois retornar o nome para cliente.

Alterar o nome da coluna nomecli tabela cliente para nomedocliente e depois retornar o nome para nomecli.

Alterar a tabela cliente adicionando uma restrição para impedir a entrada de nomes repetidos.

Criar a tabela cliente2 igual a tabela cliente. Forma rápida de fazer uma cópia de uma tabela.

Atualizar o valor do CPF na tabela Pessoa Física para 44444 para o cliente de código 1.

Selecionar os nomes dos clientes na tabela Cliente ordenados primeiramente por estado e depois por cidade crescentemente.

Selecionar os nomes dos clientes que moram no Rio de Janeiro (cidade). Para confirmar listar também o nome da cidade.

Selecionar os nomes dos clientes que moram em Rio de Janeiro. Para confirmar listar também o nome da cidade. De modo a facilitar a localização, podemos usar a função UPPER que transforma os valores para letras maiúsculas.

Selecionar os nomes dos clientes que moram no Estado do Rio de Janeiro e também na cidade do Rio.

Selecionar os nomes dos produtos cujas quantidades são maiores ou iguais a 900. Para confirmar listar também as quantidades.

Selecionar todos os dados dos produtos da categoria com código igual a 5.

Selecionar os nomes dos produtos onde o código da categoria é 1 e a quantidade é superior a 500.

Selecionar os nomes dos produtos cujas categorias não sejam 3 ou 2.

Selecionar os nomes dos produtos cujas quantidades estão entre 300 e 900 itens (intervalo).

Selecionar os nomes das categorias de produtos cujos nomes começam com a letra ‘c’.

Selecionar a quantidade em estoque de produtos da categoria com código igual a 5.

Selecionar o código do produto com a maior quantidade na tabela Produto cujo código da categoria seja 1.

Contar quantas cidades diferentes temos na tabela de Clientes.

Listar o total a ser arrecadado por produto em caso de venda de todo o estoque. Considerar uma margem de lucro de 30%, por produto.

Selecionar o nome do produto, o código da categoria e o nome da categoria dos produtos sabendo que os códigos indicam os seguintes nomes de categorias: 1) padrão; 2) higiene; 3) alimento e, que ainda existem outras categorias.

Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Questões resolvidas

Alterar o nome da tabela cliente para cliente2 e depois retornar o nome para cliente.

Alterar o nome da coluna nomecli tabela cliente para nomedocliente e depois retornar o nome para nomecli.

Alterar a tabela cliente adicionando uma restrição para impedir a entrada de nomes repetidos.

Criar a tabela cliente2 igual a tabela cliente. Forma rápida de fazer uma cópia de uma tabela.

Atualizar o valor do CPF na tabela Pessoa Física para 44444 para o cliente de código 1.

Selecionar os nomes dos clientes na tabela Cliente ordenados primeiramente por estado e depois por cidade crescentemente.

Selecionar os nomes dos clientes que moram no Rio de Janeiro (cidade). Para confirmar listar também o nome da cidade.

Selecionar os nomes dos clientes que moram em Rio de Janeiro. Para confirmar listar também o nome da cidade. De modo a facilitar a localização, podemos usar a função UPPER que transforma os valores para letras maiúsculas.

Selecionar os nomes dos clientes que moram no Estado do Rio de Janeiro e também na cidade do Rio.

Selecionar os nomes dos produtos cujas quantidades são maiores ou iguais a 900. Para confirmar listar também as quantidades.

Selecionar todos os dados dos produtos da categoria com código igual a 5.

Selecionar os nomes dos produtos onde o código da categoria é 1 e a quantidade é superior a 500.

Selecionar os nomes dos produtos cujas categorias não sejam 3 ou 2.

Selecionar os nomes dos produtos cujas quantidades estão entre 300 e 900 itens (intervalo).

Selecionar os nomes das categorias de produtos cujos nomes começam com a letra ‘c’.

Selecionar a quantidade em estoque de produtos da categoria com código igual a 5.

Selecionar o código do produto com a maior quantidade na tabela Produto cujo código da categoria seja 1.

Contar quantas cidades diferentes temos na tabela de Clientes.

Listar o total a ser arrecadado por produto em caso de venda de todo o estoque. Considerar uma margem de lucro de 30%, por produto.

Selecionar o nome do produto, o código da categoria e o nome da categoria dos produtos sabendo que os códigos indicam os seguintes nomes de categorias: 1) padrão; 2) higiene; 3) alimento e, que ainda existem outras categorias.

Prévia do material em texto

1 
 
Lista de exercícios para o script controle de pedidos 
 
 
 
 
 
 
Com base na base de dados criada via script e no schema apresentado na figura acima, 
responda: 
 
EXERCÍCIOS DDL: 
 
1. Alterar a tabela Cliente adicionando a coluna Telefone (literal com tamanho 9) e 
DDD (literal com tamanho 3). Após a criação dos atributos, preencher com os 
valores ‘RJ’ para o DDD igual a 21 e 11 para ‘SP’. 
 
alter table cliente add telefone char(9); 
 
alter table cliente add ddd char(3); 
 
select * from cliente; 
 
2 
 
--agora vamos preencher essas colunas. O update faz parte da DML! 
 
update cliente 
set ddd = '21' 
where estadocli='RJ'; 
 
update cliente 
set ddd = '11' 
where estadocli='SP'; 
 
2. Alterar o nome da tabela cliente para cliente2 e depois retornar o nome para cliente. 
 
select * from cliente 
alter table cliente rename to cliente2; 
select * from cliente2 
alter table cliente2 rename to cliente; 
select * from cliente 
 
3. Alterar o nome da coluna nomecli tabela cliente para nomedocliente e depois 
retornar o nome para nomecli. 
 
alter table cliente rename nomecli to nomedocliente; 
 
alter table cliente rename nomedocliente to nomecli; 
 
4. Criar uma restrição para limitar a quantidade dos produtos com um valor mínimo de 
50 produtos no estoque. 
 
select * from produto 
 
alter table produto add constraint limite_quant 
check (quantprod > 50); 
 
update produto 
set quantprod = 20 –-valor não permitido 
where codprod = 1; 
 
alter table produto 
drop constraint limite_quant; 
 
alter table produto 
add constraint limite_quant check (quantprod > 20); 
 
--não desejo mais a constraint 
alter table produto drop constraint limite_quant; 
 
3 
 
5. Alterar a tabela cliente adicionando uma coluna chamada idade que deve conter 
valores acima de 18 anos. 
alter table cliente add idade integer 
check (idade > 18); 
 
ou 
 
alter table cliente add idade integer; 
 
alter table cliente add constraint idade_maior 
check (idade > 18); 
--para testar 
 
update cliente set idade = 15 where codcli = 1; 
 
6. Alterar a tabela cliente adicionando uma restrição para impedir a entrada de nomes 
repetidos. 
 
alter table cliente add constraint nome_nao_repete 
unique (nomecli); 
--cria então uma chave secundária ou candidata 
 
--para testar 
insert into cliente (codcli,nomecli) 
 values (100,'Adriana') 
 
7. Criar uma restrição para permitir clientes somente do Rio ou de São Paulo. 
 
alter table cliente add constraint limita_estado 
check (estadocli in ('RJ','SP')); 
 
alter table cliente add constraint limita_estado 
check (estadocli in ('RJ','SP','MG')); 
 
8. Criar a tabela cliente2 igual a tabela cliente. Forma rápida de fazer uma cópia de 
uma tabela 
 
create table cliente2 as 
select * from cliente; 
 
--Pode-se também, criar a tabela baseado em uma condição: 
 
create table cliente2 as 
select * from cliente 
where estadocli = 'RJ'; 
4 
 
 
 
5 
 
EXERCÍCIOS DML APLICADOS A UMA TABELA: 
 
9. Atualizar o valor do CPF na tabela Pessoa Física para 44444 para o cliente de 
código 1. 
 
update pessoa_fisica 
set cpf = 44444 
where codpessoafisica = 1 
 
10. Tente inserir um produto com os seguintes dados: 
 
insert into produto values (10,2,5,'produto10',12,4) 
 
11. Também é possível estabelecer quais campos serão inseridos na operação: 
 
insert into produto (codprod,nomeprod,codcat,codfor) 
 values (30,'produto10',1,2) 
 
12. Mostra todos os dados de todas as colunas da tabela: 
 
select * from cliente 
 
CRIAR INSERT A PARTIR DE SUBCONSULTA 
 
13. Selecionar os nomes de todos clientes. 
 
select nomecli 
from cliente 
 
14. Selecionar os nomes e o código das categorias, ordenados de modo descendente 
pelo código da categoria. 
 
select nomecat,codcat 
from categoria 
order by codcat desc 
 
15. Selecionar os nomes das cidades dos fornecedores ordenadas alfabeticamente. 
 
select cidadefor 
from fornecedor 
order by cidadefor 
 
ou 
select cidadefor 
from fornecedor 
order by 1 
6 
 
 
16. Selecionar os nomes dos clientes na tabela Cliente ordenados primeiramente por 
estado e depois por cidade crescentemente. 
 
select nomecli,cidadecli,estadocli 
from cliente 
order by 1, 2 
 
17. Como os nomes foram repetidos, podemos impedir esta repetição por meio da 
cláusula distinct. 
 
select distinct cidadefor 
from fornecedor 
order by cidadefor 
 
18. Selecionar os nomes dos clientes que moram no Rio de Janeiro (cidade). Para 
confirmar listar também o nome da cidade. 
 
select nomecli,cidadecli 
from cliente 
where cidadecli = 'Rio de Janeiro' 
 
19. Selecionar os nomes dos clientes que moram em Rio de Janeiro. Para confirmar 
listar também o nome da cidade. De modo a facilitar a localização, podemos usar a 
função UPPER que transforma os valores para letras maiúsculas. 
 
select nomecli,cidadecli 
from cliente 
where upper(cidadecli) = 'RIO DE JANEIRO' 
 
20. Selecionar os nomes dos clientes que moram no Estado do Rio de Janeiro e também 
na cidade do Rio. 
 
select nomecli,cidadecli 
from cliente 
where cidadecli = 'Petrópolis' 
and estadocli = 'RJ' 
 
21. Selecionar os nomes dos produtos cujas quantidades são maiores ou iguais a 900. 
Para confirmar listar também as quantidades. 
 
select nomeprod,quantprod 
from produto 
where quantprod >= 900 
 
22. Selecionar todos os dados dos produtos da categoria com código igual a 5 
7 
 
 
select * 
from produto 
where codcat=5 
 
23. Selecionar os nomes dos produtos onde o código da categoria é 1 e a quantidade é 
superior a 500. 
 
select nomeprod,codcat,quantprod 
from produto 
where quantprod > 500 and codcat = 1 
 
24. Selecionar os nomes dos produtos com uma perspectiva de aumento de 10% no 
preço. 
 
select nomeprod, precoprod, precoprod * 1.1 as 
preco_com_aumento 
from produto 
 
25. Selecionar os nomes dos produtos da tabela Produto onde o código da categoria é 
1ou 2 e a quantidade é superior a 500. 
 
select nomeprod,codcat 
from produto 
where quantprod > 500 and (codcat = 1 or codcat =2) 
 
ou podemos utilizar 
 
select nomeprod,codcat 
from produto 
where quantprod > 500 
and codcat in (1,2) 
 
26. Selecionar os códigos dos produtos cuja quantidade não é maior que 500. 
 
select codprod,quantprod 
from produto 
where not (quantprod > 500) 
 
27. Selecionar os nomes dos produtos cujas categorias não sejam 3 ou 2. 
 
select nomeprod,codcat 
from produto 
where codcat not in (3,2) 
 
8 
 
28. Podemos alterar o nome de uma coluna para facilitar o entendimento do usuário. 
Neste exemplo a coluna quantprod tem seu nome alterado para 
‘quantidade_no_estoque’ (não pode haver espaço em branco). 
 
select codprod, quantprod as quantidade_no_estoque 
from produto 
where quantprod > 200 
 
Neste exemplo a coluna quantprod tem seu nome alterado para ‘Quantidade no 
estoque’. 
 
select codprod, quantprod as "Quantidade no estoque" 
from produto 
where quantprod > 200 
 
29. Selecionar os nomes dos produtos cujas quantidades estão entre 300 e 900 itens 
(intervalo). 
 
select nomeprod,quantprod 
from produto 
where quantprod between 450 and 850 
 
30. Selecionar os nomes das categorias de produtos cujos nomes começam com a letra 
‘c’. 
 
select nomecat 
from categoria 
where nomecat like 'c%' 
 
31. Selecionar os nomes dos clientes cujas cidades começam com ‘Petró’. Falar do 
ILIKE. 
 
select nomecli,cidadecli 
from cliente 
where cidadecli like 'Petró%' 
 
ou 
 
select nomecli,cidadecli 
from cliente 
where cidadecli ilike 'PETRÓ%' 
 
32. Selecionar os nomes dos clientes cujas cidades não começam com ‘Petró’ 
 
 
 
9 
 
select nomecli,cidadecli 
from cliente 
where cidadecli not like 'Petró%' 
 
33. Selecionar as categorias cujos valores sejam nulos. 
 
select nomecat 
from categoria 
where nomecat is null 
 
34. Selecionar as categorias cujos valores não sejam nulos. 
 
select nomecat 
from categoria 
wherenomecat is not null 
 
35. Selecionar o maior preço e a menor quantidade dos produtos. 
 
select max(precoprod), min(quantprod) 
from produto 
 
36. Selecionar os 3 produtos mais caros. 
 
select * 
from produto 
where precoprod is not null 
order by precoprod desc 
limit 3 
 
37. Selecionar o tempo total decorrido entre duas datas informadas. 
 
select age(timestamp '2001-04-10', timestamp '1957-06-13') 
 
38. Selecionar o tempo atual. 
 
select current_date; 
 
39. Selecionar apenas o ano a partir da função now(), com o uso de CAST 
 
select substring(now()::text,1,4) 
 
40. Acrescentar uma coluna datacadastro na tabela cliente e preencher com a função 
now() 
 
alter table cliente add datacadastro timestamp; 
 
10 
 
update cliente set datacadastro=now(); 
 
select * from cliente 
 
41. Tarefa: criar 3 colunas para o dia, mês e ano. Preencher a partir do campo 
datacriacao. 
 
alter table cliente add diacadastro integer; 
 
alter table cliente add mescadastro integer; 
alter table cliente add anocadastro integer; 
 
update cliente 
set diacadastro=substring(datacadastro::text,9,2)::integer; 
 
update cliente 
set mescadastro=substring(datacadastro::text,6,2)::integer; 
 
update cliente 
set anocadastro=substring(datacadastro::text,1,4)::integer; 
 
42. Selecionar a quantidade total de produtos para a categoria 1. 
 
select sum(quantprod) as "total para a categoria 1" 
from produto 
where codcat = 1 
 
43. Calcular e exibir a média de produtos. 
 
select avg(quantprod) 
from produto 
 
Ou 
 
select sum(quantprod) / count(*) 
from produto 
 
Para arredondar: 
 
select round(avg(quantprod),2) 
from produto 
 
44. Exemplo de uso da função SUBSTR(). 
 
select substr(nomecli,2,3) 
from cliente 
11 
 
45. Exemplo de uso de concatenação. 
 
select nomecli||'-'||estadocli 
from cliente 
 
46. Selecionar o total de produtos da categoria com código igual a 5 
 
select count(*) as total 
from produto 
where codcat = 5 
 
Ou 
 
select count(1) as total 
from produto 
where codcat = 5 
 
47. Selecionar a quantidade em estoque de produtos da categoria com código igual a 5 
 
select sum(quantprod) as total 
from produto 
where codcat = 5 
 
48. Selecionar o total a ser arrecada se todos os produtos da categoria com código igual 
a 5 fossem vendidos. 
 
select sum(quantprod*precoprod) as total 
from produto 
where codcat=5 
 
Ou 
 
select 'R$ '||sum(quantprod*precoprod) as total 
from produto 
where codcat=5 
 
Se necessário, usar o CAST: 
 
select 'R$ '||sum(quantprod*precoprod)::text as total 
from produto 
where codcat=5 
 
49. Contar quantos produtos tem o preço superior a R$ 500,00. 
 
select count(*) 
from produto 
12 
 
where precoprod > 150 
 
50. Quais as categorias de produtos? 
 
select distinct codcat 
from produto 
 
51. Selecionar o código do produto com a maior quantidade na tabela Produto cujo 
código da categoria seja 1. 
 
select max(quantprod) 
from produto 
where codcat = 1 
 
52. Contar quantas cidades diferentes temos na tabela de Clientes. 
 
select count(distinct(cidadecli)) as total 
from cliente 
 
53. Selecionar a quantidade de produtos por categoria. 
 
select codcat,count(*) as total 
from produto 
group by codcat 
 
ou 
 
select codcat,count(quantprod) as total 
from produto 
group by codcat 
 
54. Selecionar as quantidades de produtos armazenados no estoque por categoria na 
tabela Produto. 
 
select codcat,sum(quantprod) as total 
from produto 
group by codcat 
 
55. Qual o total a ser arrecadado, por categoria, no caso da venda de todo o estoque. 
 
select codcat,sum(quantprod * precoprod) 
from produto 
group by codcat 
 
Para formatar: 
 
13 
 
select codcat,'R$ '||round(sum(quantprod*precoprod ),2)::text 
from produto 
group by codcat 
 
56. Listar o total a ser arrecadado por produto em caso de venda de todo o estoque. 
Considerar uma margem de lucro de 30%, por produto. 
 
select sum(quantprod * (precoprod*1.3)) 
from produto 
 
57. Listar os totais de produtos por código das categorias. 
 
select codcat,count(*) as total 
from produto 
group by codcat 
order by 1 
 
58. Quais os códigos das categorias com mais de 3 produtos. 
 
select codcat,count(*) 
from produto 
group by codcat 
having count(*)>3 
 
59. Selecionar o nome do produto, o código da categoria e o nome da categoria dos 
produtos sabendo que os códigos indicam os seguintes nomes de categorias: 1) 
padrão; 2) higiene; 3) alimento e, que ainda existem outras categorias. 
 
select nomeprod,codcat,case 
 when codcat=1 then 'padrão' 
 when codcat=2 then 'higiene' 
 when codcat=3 then 'alimento' 
 else 'outras' 
 end nome_categoria 
from produto 
 
 
 
 
14 
 
EXERCÍCIOS DML APLICADOS A MAIS DE UMA TABELA: 
 
60. Listar os nomes dos produtos e o nome de suas categorias. 
 
select nomeprod,nomecat 
from produto, 
categoria 
where produto.codcat = categoria.codcat 
 
select nomeprod,nomecat -–alias para as tabelas 
from produto p, 
categoria c 
where c.codcat = p.codcat 
 
explain select nomeprod,nomecat 
from produto p, 
categoria c 
where c.codcat = p.codcat 
 
61. Listar os números dos pedidos feitos por ‘Ana’. 
 
select nrped 
from cliente, 
pedido 
where cliente.codcli = pedido.codcli 
and upper(nomecli)='ANA' 
 
Ou 
 
select nrped 
from cliente c, 
pedido p 
where c.codcli = p.codcli 
and lower(nomecli)= 'ana' 
 
Ou 
 
SELECT c.codcli,p.codcli,nrped AS "Nr Pedido" 
FROM cliente c INNER JOIN pedido p 
ON c.codcli = p.codcli 
WHERE upper(nomecli) = 'ANA' 
 
 
 
 
 
15 
 
62. Listar todos os dados dos clientes que fizeram pedidos. 
 
 
select * 
from cliente c, 
pedido o 
where c.codcli = o.codcli 
 
Ou 
 
select * 
from cliente c inner join pedido p 
on c.codcli = p.codcli 
 
63. Listar os nomes dos clientes que compraram o produto de código 1. Ordenados pelo 
nome do cliente. 
 
select nomecli 
from cliente c, 
pedido p, 
pedido_produto pp 
where c.codcli=p.codcli 
and p.nrped = pp.nrped 
and codprod = 1 
order by 1 
 
Ou 
 
select distinct nomecli,nrped 
from cliente c inner join pedido p 
on c.codcli=p.codcli 
order by 1,2 
 
64. Listar os nomes dos clientes e os nomes dos produtos comprados por eles. 
 
select nomecli as nome_cliente, nomeprod as nome_produto 
from cliente c, 
pedido p, 
pedido_produto pp, 
produto o 
where c.codcli = p.codcli 
and p.nrped = pp.nrped 
and pp.codprod = o.codprod 
 
 
 
16 
 
65. Listar os nomes dos clientes que compraram o produto ‘TV 21’. 
 
select nomecli 
from cliente c, 
pedido p, 
pedido_produto pp, 
produto o 
where c.codcli = p.codcli 
and p.nrped = pp.nrped 
and pp.codprod = o.codprod 
and nomeprod = 'TV 21' 
 
66. Listar o total de produtos por categoria (nome da categoria). 
 
select codcat,count(*) 
from produto o, 
categoria c 
where o.codcat = c.codcat 
group by 1 
 
67. Listar o total de produtos comprados por categoria (código da categoria). 
 
select codcat,count(*) 
from pedido_produto pp, 
produto o 
where pp.codprod=o.codprod 
group by codcat 
 
68. Listar quantas unidades foram vendidas para cada produto (nome do produto). 
 
select nomeprod 
from produto p, 
pedido_produto pp, 
where pp.codprod = p.codprod 
group by nomeprod 
 
69. Listar o total de produtos comprados por categoria (nome da categoria). 
 
select nomecat,count(*) 
from pedido_produto pp, 
produto o, 
categoria c 
where pp.codprod=o.codprod 
and c.codcat=o.codcat 
group by 1 
 
17 
 
70. Listar todos os dados dos clientes do tipo pessoa jurídica. 
 
select * 
from cliente, 
pessoa_juridica 
where cliente.codcli = pessoa_juridica.codpessoajuridica 
 
71. Listar os nomes das categorias cujo total de produtos seja superior a 4 itens. 
select nomecat,count(*) as total 
from categoria c inner join produto p 
on c.codcat = p.codcat 
group by nomecat 
having count(*) > 4 
 
72. Listar o total de produtosque tiveram mais de 5 pedidos. 
select count(*) as total 
from pedido_produto 
group by codprod 
having count(*) > 5 
 
73. Que compraram apenas 3 produtos 
SELECT nomecli,count(*) 
FROM cliente c, 
pedido p, 
pedido_produto pp 
WHERE c.codcli = p.codcli 
AND p.nrped = pp.nrped 
GROUP BY nomecli 
HAVING count(*) = 3 
ORDER BY nomecli 
 
74. Listar os nomes dos clientes que compraram produtos com preço acima de R$ 
1000,00. 
 
select distinct nomecli 
from cliente c, 
pedido p, 
pedido_produto e, 
produto r 
where c.codcli = p.codcli 
and p.nrped = e.nrped 
and e.codprod = r.codprod 
and precoprod > 1000 
18 
 
75. Quantos clientes fizeram pedidos? 
select count(distinct(codcli)) as total 
from pedido p 
 
76. Listar o total de pedidos feitos por cliente (nome). 
 
select nomecli, count(*) 
from cliente c, 
pedido p 
where c.codcli = p.codcli 
group by nomecli 
 
77. Listar o total de pedidos feitos por categoria (nome da categoria). 
 
select nomecat, count(*) 
from pedido_produto pp, 
produto r, 
categoria c 
where pp.codprod = r.codprod 
and c.codcat = p.codcat 
group by nomecat 
 
78. Listar quantas unidades foram vendidas para cada produto. Primeiro pelo próprio 
código do produto, depois alterar para agrupar pelo nome do produto. 
 
alter table pedido_produto add quant_vendida integer 
update pedido_produto set quant_vendida = 5 
 
select codprod, sum(quant_vendida) as total 
from pedido_produto 
group by codprod 
 
select nomeprod, sum(quant_vendida) as total 
from pedido_produto pp inner join produto p 
on pp.codprod = p.codprod 
group by nomeprod 
 
79. Exibir os nomes dos clientes que compraram produtos dos fornecedores que estão 
localizados no mesmo estado dos clientes. 
 
 
 
 
 
 
19 
 
select distinct nomecli,estadocli,estadofor 
from cliente c, 
pedido p, 
pedido_produto e, 
produto r, 
fornecedor f 
where c.codcli = p.codcli 
and p.nrped = e.nrped 
and e.codprod = r.codprod 
and r.codfor = f.codfor 
and c.estadocli = f.estadofor 
 
80. Listar os CPFs dos clientes que compraram produtos da categoria ‘higiene, com 
preço superior a R$ 500,00 e cujo fornecedor está localizado no ‘RJ’. 
 
select cpf 
from cliente c, 
pedido p, 
pedido_produto e, 
produto r, 
fornecedor f, 
categoria a, 
pessoa_fisica pf 
where c.codcli = p.codcli 
and p.nrped = e.nrped 
and e.codprod = r.codprod 
and r.codfor = f.codfor 
and a.codcat = r.codcat 
and c.codcli = pf.codpessoafisica 
and precoprod >= 500 
and f.estadofor = 'RJ' 
and nomecat = 'higiene' 
 
 
CRIAR AUTO JUNÇÃO 
select * from categoria 
alter table categoria add nivel integer 
select * from categoria 
update categoria set nivel = 1 
select * from categoria 
alter table categoria add categoria_acima integer 
select * from categoria 
alter table categoria add constraint fkcategoria foreign 
key(categoria_acima) references categoria 
20 
 
insert into categoria values (7,'som',2,40) 
insert into categoria values (7,'som',2,4) 
select * from categoria 
 
 
21 
 
QUESTÕES COM OUTROS TIPOS DE JUNÇÕES (EXTERNAS): 
 
-- Verificando os clientes cadastrados 
 
select codcli 
from cliente order by 1 
 
81. Listar os códigos dos clientes que fizeram pedidos. 
 
select distinct codcli 
from pedido 
order by 1 
 
-- Incluindo um cliente que ainda não fez pedido 
 
insert into cliente (codcli,nomecli) values (50,'Eli') 
 
-- Vamos verificar agora as diferenças entre os “joins”: 
 
82. INNER JOIN / listar nome e número de pedidos dos clientes que fizeram pedidos 
 
select nomecli,nrped 
from cliente c join pedido p 
on c.codcli = p.codcli 
order by 1,2 
 
83. LEFT OUTER JOIN / listar nome e número de pedidos dos clientes que fizeram 
pedidos e o nome dos que não fizeram 
 
select nomecli,nrped AS numero_do_pedido 
from cliente c left outer join pedido p 
on c.codcli = p.codcli 
order by 2,1 
 
84. LEFT OUTER JOIN / listar o nome dos clientes que não fizeram 
 
select nomecli,nrped AS numero_do_pedido 
from cliente c left outer join pedido p 
on c.codcli = p.codcli 
where p.codcli is null 
order by 2,1 
 
85. Listar todos os dados dos clientes que NÃO fizeram pedidos. 
 
 
 
22 
 
select nomecli 
from cliente c left join pedido p 
on c.codcli = p.codcli 
where p.codcli is null 
 
86. RIGHT OUTER JOIN / a mesma consulta anterior usando o RIGHT. Observe que o 
cliente Eli não será recuperado. Por quê? 
 
 
select nomecli, p.nrped 
from cliente c right outer join pedido p 
on c.codcli = p.codcli 
order by 2,1 
 
87. RIGHT OUTER JOIN - correto 
 
select nomecli, p.nrped 
from pedido p right outer join cliente c 
on p.codcli = c.codcli --aqui não influencia 
order by 2,1 
 
-- Para testar o uso do FULL OUTER JOIN vamos efetuar os comandos a seguir: 
 
create table pedido2 as select * from pedido 
 
insert into pedido2(nrped) values (100) 
 
insert into pedido(nrped,codcli) values (101,1) 
 
select * from pedido2 
 
88. FULL OUTER JOIN / a consulta vai exibir registros sem correspondência em 
ambos os lados 
 
select nomecli, nrped 
from cliente c full join pedido2 p 
on c.codcli=p.codcli 
 
89. FULL OUTER JOIN / exemplo de uma junção através do campo “nrped” 
 
select p1.nrped, p2.nrped 
from pedido p1 full join pedido2 p2 
on p1.nrped = p2.nrped 
 
90. Listar os clientes que moram no mesmo estado 
 
23 
 
select distinct a.nomecli,b.nomecli 
from cliente a inner join cliente b 
on a.estadocli = b.estadocli 
where a.nomecli <> b.nomecli 
and a.nomecli||b.nomecli<>b.nomecli||a.nomecli 
order by 1 
 
 
 
 
24 
 
QUESTÕES BASEADAS NAS OPERAÇÕES DE CONJUNTOS: 
 
91. UNION 
 
select * from pedido 
union 
select * from pedido2 
 
92. INTERSECT 
 
select * from pedido 
intersect 
select * from pedido2 
 
93. EXCEPT 
 
select * from pedido 
except 
select * from pedido2

Mais conteúdos dessa disciplina