MediumSQL e VS Code. Explorando com o Teo Me Why, parte 1: | by Maria Fernanda E. S. M. Almeida | Medium
Sitemap
Maria Fernanda E. S. M. Almeida

Maria Fernanda E. S. M. Almeida

SQL e VS Code

Explorando com o Teo Me Why, parte 1:

9 min readOct 31, 2024

--

Introdução ao Curso e ao Ambiente de Estudo

Aproveitando o meu penúltimo dia como estagiária e com um tempinho livre para aprender mais, resolvi explorar um curso gratuito de SQL criado pelo Teo Calvo, nosso querido “Teo Me Why”. Apesar de já me considerar em nível intermediário com SQL, me propus a rever tudo, começando do zero. Afinal, revisitar conceitos sempre traz novos insights, e conhecimento nunca é demais!

Este curso foi realizado em uma live, onde o Teo compartilhou uma abordagem prática e descomplicada com apenas 7 eps. Para quem quiser seguir os mesmos passos, utilizamos:

  • Ferramentas: SQLite com integração no VS Code (que eu particularmente amei poder deixar vermelho)
  • Base de Dados: Utilizamos um conjunto de dados reais da Olist, uma empresa de marketplace. Esse dataset é ideal para aprender SQL em um cenário próximo da realidade do varejo.

1. Entendendo os Relacionamentos entre Tabelas

Antes de começar com queries, a primeira parte do curso abordou os relacionamentos entre tabelas, explicando como funcionam as conexões entre diferentes partes de um banco de dados. No caso do dataset da Olist, exploramos relações como:

Press enter or click to view image in full size
relacionamentos entre as tabelas destes banco de dados
  • Tabelas de Produtos e Categorias: Onde identificamos como as categorias de produtos se relacionam com informações de quantidades e tipos de produtos.
  • Clientes e Pedidos: Observamos o relacionamento entre clientes e seus pedidos, um ponto essencial em bancos de dados de marketplaces.

2. Primeira Query: Filtrando Colunas e Usando Condições Básicas

A primeira consulta que fizemos foi na tabela tb_products, onde filtramos colunas específicas. O objetivo era selecionar apenas os dados necessários e aplicar condições que refinassem o que estava sendo exibido.

Exemplo de Query: Filtrando com WHERE e AND

Press enter or click to view image in full size
primeira query

Explicação:

  • A função WHERE filtra as linhas da tabela com base em condições específicas.
  • AND permite que a consulta mostre apenas os registros que atendem a ambas as condições: pertencer à categoria "bebês" e ter mais de uma foto.
SELECT product_id AS NOME,
product_category_name AS Categoria,
product_photos_qty AS Quantidade
FROM tb_products
WHERE ( product_category_name = 'bebes'
AND product_photos_qty > 1

3. Segunda Query: Usando Parênteses para Agrupar Condições

Nessa etapa, aprendi uma técnica importante: usar parênteses em uma consulta SQL para agrupar várias condições, de forma parecida com uma função matemática. Isso é muito útil quando precisamos de mais flexibilidade para especificar múltiplos filtros.

Exemplo de Query: Utilizando Parênteses e OR

Press enter or click to view image in full size

Explicação:

  • Os parênteses agrupam a condição de filtro entre categorias (bebes e perfumaria), de modo que ambas sejam aplicadas antes de verificar a quantidade de fotos.
  • O OR permite que a consulta exiba registros que pertençam a uma das duas categorias mencionadas.
SELECT product_id AS NOME,
product_category_name AS Categoria,
product_photos_qty AS Quantidade

FROM tb_products

WHERE ( product_category_name = 'bebes'
OR
product_category_name = 'perfumaria')
product_photos_qty > 1

4. Usando Alias (AS) para Renomear Colunas e Agregações

Um recurso muito útil que aprendemos foi o uso de alias, ou AS, que permite dar apelidos para colunas ou tabelas na consulta. Isso torna o resultado mais legível e organizado, especialmente quando estamos utilizando funções de agregação como COUNT, SUM, e MAX.

Exemplo de Query: Agregações com Alias

Press enter or click to view image in full size
SELECT 
COUNT(*) AS 'linhas',
SUM(product_photos_qty) AS 'Photos',
MAX(product_photos_qty) AS 'Max Photos'
FROM tb_products;

Explicação:

  • Ao usar AS em cada função, especificamos como queremos que o resultado seja nomeado no quadro de visualização da consulta.
  • Este é um truque prático não só para facilitar a leitura, mas também para renomear colunas em operações mais complexas, como COUNT, SUM, e MAX, que são funções de agregação.

Essas funções de agregação são chamadas assim pois permitem sumarizar e extrair informações específicas de um grande conjunto de dados, tornando-as especialmente úteis em análises. Usar AS nessas funções faz com que os resultados fiquem mais fáceis de interpretar!

5. Agrupando Dados com GROUP BY: Análise por Estado

Nesta etapa, aprendemos sobre o GROUP BY, que é uma cláusula essencial em SQL para agrupar linhas de dados com valores semelhantes em uma coluna específica. Com ele, conseguimos analisar dados de forma agregada, facilitando o cálculo de totais, médias ou contagens para diferentes categorias, como estados, produtos ou qualquer outra categoria importante.

Exemplo de Query: Contando Vendedores por Estado

Press enter or click to view image in full size
SELECT 
seller_state,
COUNT(*) AS 'QTD'
FROM tb_sellers
GROUP BY seller_state;

Explicação:

  • seller_state: coluna pela qual queremos agrupar os dados, ou seja, teremos uma linha para cada estado.
  • COUNT(*): função de agregação que conta o número total de linhas em cada grupo (neste caso, o número de vendedores por estado).
  • AS 'QTD': renomeia o resultado do COUNT(*) como QTD, tornando o nome mais descritivo para a contagem.

O GROUP BY é especialmente útil quando queremos entender distribuições e comparar resultados por grupos específicos em um conjunto de dados, como vimos aqui na contagem de vendedores por estado.

6. Subqueries e having

Uma subquery, ou subconsulta, é uma consulta SQL dentro de outra. Esse recurso é muito útil para organizar e simplificar análises complexas, especialmente quando precisamos aplicar filtros adicionais sobre resultados agregados. No entanto, para quem está lendo não é muito bom e nem eficiente para o PC.

Get Maria Fernanda E. S. M. Almeida’s stories in your inbox

Join Medium for free to get updates from this writer.

Exemplo de Query com Subquery para Filtragem de Dados Agregados

Press enter or click to view image in full size
SELECT * 
FROM (
SELECT
seller_state,
COUNT(*) AS 'QTD'
FROM tb_sellers
GROUP BY seller_state
)
WHERE QTD > 10;

Explicação:

  • A subquery (SELECT seller_state, COUNT(*) AS 'QTD' FROM tb_sellers GROUP BY seller_state) cria um conjunto de dados agrupando os vendedores por estado e contando o número total de vendedores (QTD) para cada estado.
  • O comando WHERE QTD > 10 na query principal filtra os resultados da subquery, exibindo apenas os estados com mais de 10 vendedores.
Press enter or click to view image in full size

Quando estamos lidando com agregações em SQL e queremos aplicar condições nesses resultados, o HAVING é a opção ideal. Ele funciona de maneira parecida com o WHERE, mas é especialmente útil quando precisamos filtrar dados após o uso de funções agregadas como COUNT, SUM, AVG, entre outras.

Exemplo de Query com HAVING

SELECT 
seller_state,
COUNT(*) AS 'QTD'
FROM tb_sellers
GROUP BY seller_state
HAVING COUNT(*) > 10;

Explicação:

  • GROUP BY seller_state: Agrupa os vendedores por estado.
  • COUNT(*) AS 'QTD': Conta o total de vendedores em cada estado, nomeando o resultado como QTD.
  • HAVING COUNT(*) > 10: Filtra apenas os grupos (neste caso, estados) onde a quantidade de vendedores é maior que 10.

O HAVING simplifica consultas agregadas e elimina a necessidade de uma subquery, tornando a execução da query mais rápida e eficiente. Essa prática é ideal para filtrar dados diretamente na consulta principal, deixando o SQL mais legível e fácil de manter.

8. Eliminando Duplicatas e Ordenando com DISTINCT e ORDER BY

A cláusula DISTINCT é uma ferramenta poderosa em SQL para remover valores duplicados, garantindo que cada valor apareça apenas uma vez no resultado da consulta. Isso é particularmente útil quando queremos obter uma lista única de categorias, clientes, produtos ou qualquer outro dado onde valores duplicados podem ser comuns.

Nesta query, buscamos todas as categorias de produtos (product_category_name) da tabela tb_products, excluindo valores nulos com IS NOT NULL e ordenando a lista em ordem alfabética crescente.

Exemplo de Query com DISTINCT, IS NOT NULL, e ORDER BY

Press enter or click to view image in full size
SELECT DISTINCT product_category_name
FROM tb_products
WHERE product_category_name IS NOT NULL
ORDER BY 1 ASC;

Explicação:

  • DISTINCT: Retorna apenas valores únicos de product_category_name, eliminando duplicatas.
  • IS NOT NULL: Filtra a consulta para mostrar apenas as categorias de produtos que não estão vazias, removendo valores nulos.
  • ORDER BY 1 ASC: Organiza o resultado de forma ascendente (ASC) com base na primeira coluna (nesse caso, product_category_name).

Com essa combinação de DISTINCT, IS NOT NULL, e ORDER BY, a query retorna uma lista única e ordenada das categorias de produtos disponíveis na tabela, excluindo qualquer valor nulo.

9. Tratando Valores Nulos com CASE WHEN: Substituindo por um Valor Padrão

A cláusula CASE WHEN permite criar condições lógicas dentro de uma consulta SQL. É especialmente útil para tratar valores nulos, substituindo-os por algo mais significativo. No exemplo abaixo, aplicamos um CASE WHEN para transformar valores nulos da coluna product_category_name no valor padrão "OUTROS", tornando mais fácil identificar registros que estão sem categoria atribuída.

Exemplo de Query com CASE WHEN para Valores Nulos

Press enter or click to view image in full size
SELECT 
DISTINCT CASE
WHEN product_category_name IS NULL THEN 'OUTROS'
ELSE product_category_name
END AS categoria_fillna
FROM tb_products
ORDER BY categoria_fillna;

Explicação:

  • CASE WHEN product_category_name IS NULL THEN 'OUTROS': Verifica se product_category_name é nulo. Se for, substitui o valor por "OUTROS".
  • ELSE product_category_name: Quando o valor não é nulo, mantém o valor original da coluna product_category_name.
  • DISTINCT: Retorna apenas valores únicos para categoria_fillna, eliminando duplicatas.
  • ORDER BY categoria_fillna: Ordena os resultados em ordem alfabética da coluna categoria_fillna.

Essa abordagem com CASE WHEN mantém o conjunto de dados consistente, preenchendo os valores ausentes com um termo padrão e assegurando que categorias sem nome não sejam deixadas em branco. Isso facilita a organização dos dados para análises futuras!

10. Simplificando a Substituição de Valores Nulos com COALESCE

A função COALESCE é uma maneira simples e eficiente de tratar valores nulos. Ela aceita múltiplos argumentos e retorna o primeiro que não seja NULL. Neste exemplo, aplicamos o COALESCE na coluna product_category_name, substituindo valores nulos por "OUTROS".

Press enter or click to view image in full size

Exemplo de Query com COALESCE

SELECT 
COALESCE(product_category_name, 'OUTROS') AS CATEGORIA
FROM tb_products;

Explicação:

  • COALESCE(product_category_name, 'OUTROS'): Verifica se product_category_name é NULL. Se for, retorna "OUTROS"; caso contrário, retorna o valor original.
  • AS CATEGORIA: Renomeia a coluna como CATEGORIA para tornar o resultado mais legível.

O COALESCE é uma alternativa mais enxuta ao CASE WHEN para substituição de valores nulos, simplificando o código e tornando-o mais legível.

Conclusão e Insights

A exploração dos conceitos de SQL neste curso reforça como o domínio das funções de filtragem, agregação e tratamento de dados é essencial para extrair informações de maneira precisa e eficiente. Com recursos como DISTINCT, CASE WHEN, COALESCE, GROUP BY e HAVING, o SQL se mostra não apenas uma linguagem de consulta, mas também uma ferramenta poderosa para organização e interpretação de dados.

Insights Chave:

  1. Filtragem Avançada com Subqueries e HAVING: Aprender a filtrar dados após agregações, como usamos com o HAVING, elimina a complexidade de subqueries, aumentando a eficiência e facilitando a leitura das consultas.
  2. Tratamento de Dados Nulos com COALESCE e CASE WHEN: A capacidade de tratar dados nulos diretamente na consulta (como a substituição de valores nulos por "OUTROS") permite organizar melhor as categorias e simplifica a análise de dados onde categorias completas são essenciais.
  3. Agregações e Agrupamentos: Com o GROUP BY e as funções de agregação (COUNT, SUM, AVG), conseguimos sintetizar grandes volumes de dados, agrupando-os para análises mais significativas. Esses recursos são especialmente úteis em contextos de negócios, como a contagem de vendas por estado, identificação de categorias mais populares e análise de desempenho de produtos.

Essas técnicas de SQL são fundamentais não apenas para explorar e visualizar dados, mas também para simplificar processos de análise em bases de dados extensas e complexas. Quanto mais dominamos essas funções, mais eficazes nos tornamos na extração de insights estratégicos para a tomada de decisões.

--

--