Um dos cenários mais comuns quando a gente trabalha com banco de dados é preparar dados pra relatórios. Imagina a situação: você trabalha numa universidade e seu chefe (que, claro, não manja nada de SQL) pede pra você criar uma lista de estudantes juntando nome e sobrenome, e ainda mostrar a data de nascimento no formato DD-MM-YYYY. A missão tá clara: deixar os dados bonitões. E SQL é nosso parceiro fiel nessa hora.
Exemplo 1: Juntando nome e sobrenome
Bora começar juntando o nome (first_name) e o sobrenome (last_name) dos estudantes da nossa tabela students.
SELECT
CONCAT(first_name, ' ', last_name) AS full_name
FROM
students;
O que tá rolando aqui?
CONCAT()junta strings. A gente coloca um espaço entre o nome e o sobrenome pra ficar mais legível.- O resultado vai pra uma nova coluna chamada
full_name.
O resultado pode ficar assim:
| full_name |
|---|
| Otto Art |
| Anna Song |
| Pol Mac |
Exemplo 2: Formatando data
Agora vamos adicionar a formatação da data de nascimento na nossa query.
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM
students;
O que tem de novo aqui:
- A gente usa a função
TO_CHAR()no campobirth_date. - O formato
'DD-MM-YYYY'deixa a data num jeito mais amigável (tipo:25-12-2001).
Resultado:
| full_name | formatted_birth_date |
|---|---|
| Otto Art | 12-04-1995 |
| Anna Song | 03-08-1996 |
| Pol Mac | 21-11-1997 |
Voilà! Você acabou de criar um relatório bonitão.
Formatação pra exportar dados
Imagina que um colega seu quer exportar os dados dos pedidos pra um arquivo CSV pra mexer no Excel depois. Mas os dados no banco tão num formato ruim pra ele, e o pessoal de vendas quer ver de um jeito específico. Por exemplo, em vez do campo total_price com o valor do pedido, eles querem ver assim: $100.00.
Exemplo 3: Convertendo números pra formato de moeda
Vamos ajeitar os dados dos pedidos da tabela orders pra exportação:
SELECT
order_id,
TO_CHAR(total_price, 'FM$999,999.00') AS formatted_price
FROM
orders;
O que o TO_CHAR() faz aqui?
FM(Fill Mode) tira os espaços extras.$coloca o símbolo de moeda.999,999.00define o formato com separador de milhar e duas casas decimais.
Resultado:
| order_id | formatted_price |
|---|---|
| 1 | $1,000.00 |
| 2 | $2,500.50 |
| 3 | $10.00 |
Agora seu colega pode importar os dados no Excel de boa e ainda te elogiar na reunião.
Desafio final
Agora começa a parte mais legal. Bora juntar tudo que você já aprendeu.
Desafio
Crie uma query pra tabela students que:
- Junta nome e sobrenome numa coluna só chamada
full_name. - Converte a data de nascimento pro formato
DD-MM-YYYY. - Mostra a idade do estudante na data de hoje.
A query vai ficar mais ou menos assim:
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date,
DATE_PART('year', AGE(birth_date)) AS age
FROM
students;
Novidades aqui:
AGE(birth_date)retorna o intervalo entre hoje e a data de nascimento, mas no formato de anos, meses e dias.DATE_PART('year', AGE(birth_date))pega só a quantidade de anos desse intervalo.
Resultado:
| full_name | formatted_birth_date | age |
|---|---|---|
| Otto Art | 12-04-1995 | 28 |
| Anna Song | 03-08-1996 | 27 |
| Pol Mac | 21-11-1997 | 25 |
Esse relatório vai agradar até os colegas mais chatos.
Formatação pra condições específicas
Às vezes a gente precisa formatar dados pra criar condições ou filtrar. Por exemplo, pegar estudantes que fazem aniversário no mês atual.
Exemplo 4: Filtrando por mês
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM
students
WHERE
DATE_PART('month', birth_date) = DATE_PART('month', CURRENT_DATE);
Como isso funciona?
DATE_PART('month', birth_date)pega o mês da data de nascimento.CURRENT_DATEtraz a data de hoje. A gente pega o mês dela comDATE_PART().
Juntando formatação e ordenação
Agora vamos juntar tudo que aprendemos e adicionar ordenação. Por exemplo, criar uma lista de estudantes ordenados pela data de nascimento.
Exemplo 5: Ordenando por data de nascimento
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM
students
ORDER BY
birth_date ASC;
Ordenando em ordem crescente ASC mostra primeiro os estudantes mais velhos, e em ordem decrescente DESC — os mais novos.
Juntando com valores únicos
Pra fechar — um desafio com estrelinha. Imagina que nossa universidade tem filiais em várias cidades, e você precisa criar uma lista das cidades únicas onde os estudantes estudam, mas em ordem alfabética.
Exemplo 6: Valores únicos e ordenação
SELECT DISTINCT
city
FROM
students
ORDER BY
city ASC;
O que o DISTINCT faz?
Ele tira os valores repetidos, então cada cidade aparece só uma vez no resultado.
Pra que serve tudo isso?
Praticidade e beleza. Quando os dados estão bem apresentados, fica muito mais fácil trabalhar com eles e o chefe para de encher o saco.
Preparação pra vida real. Você vai conseguir gerar relatórios automáticos, trabalhar com exportações e montar apresentações maneiras.
Valoriza seu passe. SQL não é só sobre dados. É sobre deixar tudo claro e útil pra galera.
Usa essas dicas pra não só escrever queries, mas criar verdadeiras obras de arte! Nas próximas aulas a gente vai mergulhar ainda mais na magia do PostgreSQL.
GO TO FULL VERSION