### INFO B - Caroline Campos Lima, 04
# B.D Session Four: Query or not to Query? QUERY!!!!
[toc]
## PARTE I
### Desafio 1
Filtrando por : nome da categoria
Ordenando por : nome da categoria e nome do produto
```sql=
SELECT c.nm_categoria,
p.nm_produto,
p.vl_preco
FROM tb_categoria c
JOIN tb_produto p
ON c.id_categoria = p.id_categoria
WHERE c.nm_categoria = 'Masculino'
ORDER BY c.nm_categoria, p.nm_produto;
```
### Desafio 2
Filtrando por : produtos que possuem o estoque disponível menor que o estoque mínimo.
Ordenando por : nome da categoria e nome do produto
```sql=
SELECT c.nm_categoria,
p.nm_produto,
p.vl_preco,
e.qtd_minima,
e.qtd_disponivel
FROM tb_produto p
JOIN tb_categoria c
ON p.id_categoria = c.id_categoria
JOIN tb_estoque e
ON p.id_produto = e.id_produto
WHERE e.qtd_disponivel < e.qtd_minima
ORDER BY c.nm_categoria, p.nm_produto;
```
### Desafio 3
Filtrando por : nome categoria e nome do produto de forma parcial
Ordenando por : preço de forma decrescente
```sql=
SELECT c.nm_categoria,
p.nm_produto,
p.vl_preco,
e.qtd_minima,
e.qtd_disponivel
FROM tb_produto p
JOIN tb_categoria c
ON p.id_categoria = c.id_categoria
JOIN tb_estoque e
ON p.id_produto = e.id_produto
WHERE c.nm_categoria LIKE 'Feminino'
AND p.nm_produto LIKE '%a%'
ORDER BY p.vl_preco DESC;
```
### Desafio 4
Filtrando por : nome cliente e cidade
Ordenando por : cidade
```sql=
SELECT c.nm_cliente,
c.ds_cpf,
e.ds_cep,
e.ds_endereco,
e.nr_endereco,
e.ds_cidade
FROM tb_cliente c
JOIN tb_endereco e
ON c.id_endereco = e.id_endereco
WHERE c.nm_cliente LIKE 'M%'
AND e.ds_cidade LIKE '%r%'
ORDER BY e.ds_cidade;
```
### Desafio 5
Filtrando por : entre um período de início e fim da data da venda
Ordenando por : id da venda
```sql=
SELECT v.id_venda,
v.dt_venda,
c.nm_cliente,
v.ds_nota_fiscal,
v.tp_forma_pagamento,
e.ds_endereco,
e.nr_endereco
FROM tb_venda v
JOIN tb_cliente c
ON v.id_cliente = c.id_cliente
JOIN tb_endereco e
ON v.id_endereco_entrega = e.id_endereco
WHERE v.dt_venda BETWEEN '2021-04-01' AND '2021-04-30'
ORDER BY v.id_venda;
```
### Desafio 6
Filtrando por : nome cliente ou nota fiscal
Ordenando por : id da venda
```sql=
SELECT v.id_venda,
v.dt_venda,
c.nm_cliente,
v.ds_nota_fiscal,
v.tp_forma_pagamento,
e.ds_endereco,
e.nr_endereco
FROM tb_venda v
JOIN tb_cliente c
ON v.id_cliente = c.id_cliente
JOIN tb_endereco e
ON v.id_endereco_entrega = e.id_endereco
WHERE c.nm_cliente LIKE 'Samanta Marques'
OR v.ds_nota_fiscal = 'NF23064356'
ORDER BY v.id_venda;
```
### Desafio 7
Filtrando por : data de venda, endereco
Ordenando por : id da venda
```sql=
SELECT v.id_venda,
v.dt_venda,
c.nm_cliente,
v.ds_nota_fiscal,
e.ds_endereco,
e.nr_endereco
FROM tb_venda v
JOIN tb_cliente c
ON v.id_cliente = c.id_cliente
JOIN tb_endereco e
ON v.id_endereco_entrega = e. id_endereco
WHERE v.dt_venda = '2021-06-29'
AND e.ds_endereco LIKE 'Rua Augusto'
ORDER BY v.id_venda;
```
### Desafio 8
Filtrando por : id da venda ou nota fiscal
Ordenando por : id da venda
```sql=
SELECT v.id_venda,
v.dt_venda,
c.nm_cliente,
v.ds_nota_fiscal,
e.ds_endereco,
e.nr_endereco,
p.nm_produto,
ca.nm_categoria,
p.vl_preco
FROM tb_venda v
JOIN tb_cliente c
ON v.id_cliente = c.id_cliente
JOIN tb_endereco e
ON v.id_endereco_entrega = e.id_endereco
JOIN tb_venda_item vi
ON v.id_venda = vi.id_venda
JOIN tb_produto p
ON vi.id_produto = p.id_produto
JOIN tb_categoria ca
ON p.id_categoria = ca.id_categoria
JOIN tb_estoque es
ON p.id_produto = es.id_produto
WHERE v.id_venda = 8
OR v.ds_nota_fiscal = 'NF13985403'
ORDER BY v.id_venda;
```
### Desafio 9
Filtrando por : data da venda
Ordenando por : id da venda
```sql=
SELECT v.id_venda,
v.dt_venda,
c.nm_cliente,
v.ds_nota_fiscal,
e.ds_endereco,
e.nr_endereco,
p.nm_produto,
ca.nm_categoria,
p.vl_preco
FROM tb_venda v
JOIN tb_cliente c
ON v.id_cliente = c.id_cliente
JOIN tb_endereco e
ON v.id_endereco_entrega = e.id_endereco
JOIN tb_venda_item vi
ON v.id_venda = vi.id_venda
JOIN tb_produto p
ON vi.id_produto = p.id_produto
JOIN tb_categoria ca
ON p.id_categoria = ca.id_categoria
JOIN tb_estoque es
ON p.id_produto = es.id_produto
WHERE v.dt_venda = '2021-05-23'
ORDER BY v.id_venda;
```
### Desafio 10
Filtrando por : data da venda
Ordenando por : nome do produto
```sql=
SELECT p.nm_produto,
c.nm_categoria,
p.vl_preco
FROM tb_produto p
JOIN tb_categoria c
ON p.id_categoria = c.id_categoria
JOIN tb_venda_item vi
ON p.id_produto = vi.id_produto
JOIN tb_venda v
ON vi.id_venda = v.id_venda
WHERE v.dt_venda = '2021-11-30'
ORDER BY p.nm_produto;
```
## PARTE II
### Desafio 11
Filtrando pelos produtos que nunca foram vendidos
```sql=
SELECT p.nm_produto,
c.nm_categoria,
p.vl_preco
FROM tb_produto p
JOIN tb_categoria c
ON p.id_categoria = c.id_categoria
WHERE p.id_produto NOT IN (SELECT id_produto FROM tb_venda_item);
```
### Desafio 12
Filtrando pelas categorias que não possuem produtos
```sql=
SELECT c.nm_categoria,
c.id_categoria
FROM tb_produto p
RIGHT JOIN tb_categoria c
ON p.id_categoria = c.id_categoria
WHERE p.id_produto IS NULL;
```
### Desafio 13
Filtrando pelos clientes que não possuem endereço
```sql=
SELECT c.id_cliente,
c.nm_cliente,
c.ds_cpf
FROM tb_cliente c
LEFT JOIN tb_endereco e
ON c.id_endereco = e.id_endereco
WHERE e.id_endereco IS NULL;
```
### Desafio 14
Filtrando pelas vendas que não possuem clientes
```sql=
SELECT id_venda,
dt_venda,
nm_cliente,
ds_nota_fiscal,
tp_forma_pagamento,
ds_endereco,
nr_endereco
FROM tb_venda v
LEFT JOIN tb_cliente c
ON c.id_cliente = v.id_cliente
JOIN tb_endereco e
ON v.id_endereco_entrega = e.id_endereco
WHERE v.id_cliente IS NULL
ORDER BY v.id_venda;
```
## PARTE III
### Desafio 15
Agrupando por id_venda
Selecionando a contagem de items por venda
```sql=
SELECT v.id_venda,
COUNT (vi.id_venda_item)
AS qntItens
FROM tb_venda v
JOIN tb_venda_item vi
ON v.id_venda = vi.id_venda
GROUP BY v.id_venda;
```
### Desafio 16
Agrupando por id_venda
Selecionando a contagem de items da venda e somando o preco dos itens da venda
```sql=
SELECT v.id_venda,
COUNT (vi.id_venda_item) qnt,
SUM (p.vl_preco) total
FROM tb_venda v
JOIN tb_venda_item vi
ON v.id_venda = vi.id_venda
JOIN tb_produto p
ON p.id_produto = vi.id_produto
GROUP BY v.id_venda;
```
### Desafio 17
Agrupando por id da venda, data da venda e nome do cliente
Selecionando a contagem de items da venda e somando o preco dos itens da venda
```sql=
SELECT v.id_venda,
v.dt_venda,
c.nm_cliente,
COUNT (vi.id_venda_item) qnt,
SUM (p.vl_preco) total
FROM tb_venda v
JOIN tb_venda_item vi
ON v.id_venda = vi.id_venda
JOIN tb_produto p
ON p.id_produto = vi.id_produto
JOIN tb_cliente c
ON c.id_cliente = v.id_cliente
GROUP BY v.id_venda, v.dt_venda, c.nm_cliente;
```
### Desafio 18
Agrupando por id da venda, data da venda e nome do cliente
Selecionando a contagem de items da venda e somando o preco dos itens da venda
Tendo o valor total da vendo maior que R$1000,00
```sql=
SELECT v.id_venda,
v.dt_venda,
c.nm_cliente,
COUNT (vi.id_venda_item) qnt,
SUM (p.vl_preco) total
FROM tb_venda v
JOIN tb_venda_item vi
ON v.id_venda = vi.id_venda
JOIN tb_produto p
ON p.id_produto = vi.id_produto
JOIN tb_cliente c
ON c.id_cliente = v.id_cliente
GROUP BY v.id_venda, v.dt_venda, c.nm_cliente
HAVING SUM (p.vl_preco) > 100;
```
### Desafio 19
Consultando as cidades que mais tiveram vendas
Ordenando pela quantidade de vezes vendida de forma decrescente
```sql=
SELECT e.ds_cidade,
COUNT (vi.id_venda_item) qnt,
SUM (p.vl_preco) total
FROM tb_venda v
JOIN tb_venda_item vi
ON v.id_venda = vi.id_venda
JOIN tb_produto p
ON p.id_produto = vi.id_produto
JOIN tb_endereco e
ON e.id_endereco = v.id_endereco_entrega
GROUP BY e.ds_cidade;
```
### Desafio 20
Consultando os produtos mais vendidos
Ordenando pela quantidade de vezes vendida de forma decrescente
```sql=
SELECT nm_produto,
vl_preco,
COUNT (vi.id_venda_item) qnt
FROM tb_venda_item vi
JOIN tb_produto p
ON vi.id_produto = p.id_produto
GROUP BY nm_produto, vl_preco
ORDER BY COUNT (vi.id_venda_item) DESC;
```
## DESAFIO MONSTER
### Desafio MONSTER
Consultando os top 5 clientes que mais compraram
Ordenando pela quantidade de vezes comprada de forma decrescente
```sql=
SELECT nm_produto,
vl_preco,
COUNT (vi.id_venda_item) qnt
FROM tb_venda_item vi
JOIN tb_produto p
ON vi.id_produto = p.id_produto
GROUP BY nm_produto, vl_preco
ORDER BY COUNT (vi.id_venda_item) DESC
LIMIT 5;
```
{"metaMigratedAt":"2023-06-16T01:15:21.140Z","metaMigratedFrom":"Content","title":"B.D Session Four: Query or not to Query? QUERY!!!!","breaks":true,"contributors":"[{\"id\":\"d83c7a84-ea20-48d2-809b-933a34168ebe\",\"add\":16887,\"del\":6957}]"}