---
# System prepended metadata

title: 'B.D Session Four: Query or not to Query? QUERY!!!!'

---

### 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;
```