Pular para o conteúdo

A primeira escola especializada em tecnologia do Alto Solimões, com corpo técnico formado na área.

Modulo 2: CRUD Basico

Buscando Dados

SELECT para consultar registros

SELECT -- lendo dados do banco

O comando SELECT e o mais usado do SQL. Ele consulta dados de uma ou mais tabelas. Vamos usar esta tabela de exemplo:

idnomeemailidadeativo
1Ana Silva[email protected]201
2Carlos Souza[email protected]221
3Julia Santos[email protected]191
4Pedro Lima[email protected]210
5Maria Costa[email protected]231

SELECT * -- tudo de uma vez

O asterisco (*) significa "todas as colunas":

SELECT * FROM alunos;
-- → Retorna todas as colunas de todos os registros

Resultado: a tabela inteira, todas as 5 linhas com todas as 5 colunas.

Selecionando colunas especificas

Informe exatamente quais colunas voce quer:

SELECT nome, email FROM alunos;
-- → Retorna apenas nome e email
nomeemail
Ana Silva[email protected]
Carlos Souza[email protected]
Julia Santos[email protected]
Pedro Lima[email protected]
Maria Costa[email protected]

Voce pode selecionar quantas colunas quiser, em qualquer ordem:

SELECT email, nome, idade FROM alunos;
-- → Retorna email, nome e idade (nessa ordem)

Alias com AS -- renomeando colunas

Use AS para dar um apelido temporario a uma coluna no resultado:

SELECT
nome AS aluno,
email AS contato,
idade AS anos
FROM alunos;
alunocontatoanos
Ana Silva[email protected]20
Carlos Souza[email protected]22

O alias nao altera a tabela -- so muda o nome no resultado da consulta. Isso e util quando:

  • O nome da coluna e confuso (ex: dt_nasc vira data_nascimento)
  • Voce usa calculos (ex: preco * quantidade AS total)
  • Junta tabelas e tem colunas com mesmo nome
SELECT
nome,
idade,
idade + 1 AS idade_ano_que_vem
FROM alunos;
nomeidadeidade_ano_que_vem
Ana Silva2021
Carlos Souza2223

DISTINCT -- removendo duplicatas

Se voce quer valores unicos (sem repeticao):

SELECT DISTINCT idade FROM alunos;
-- → Retorna cada idade uma unica vez

Util quando voce quer saber quais valores existem numa coluna:

SELECT DISTINCT ativo FROM alunos;
-- → 1, 0 (os unicos valores que existem)

Contando registros

Use COUNT(*) para saber quantos registros existem:

SELECT COUNT(*) AS total_alunos FROM alunos;
-- → 5

Mesma operacao com ORMs

Prisma

Buscar todos os registros:

const alunos = await prisma.aluno.findMany();
// → Array com todos os alunos e todas as colunas

Selecionar colunas especificas:

const alunos = await prisma.aluno.findMany({
select: {
nome: true,
email: true,
},
});
// → [{ nome: 'Ana Silva', email: '[email protected]' }, ...]

Buscar um registro pelo id:

const aluno = await prisma.aluno.findUnique({
where: { id: 1 },
});
// → { id: 1, nome: 'Ana Silva', ... }

Contar registros:

const total = await prisma.aluno.count();
// → 5

Drizzle

Buscar todos:

const todosAlunos = await db.select().from(alunos);
// → Array com todos os alunos

Selecionar colunas especificas:

const resultado = await db
.select({
nome: alunos.nome,
email: alunos.email,
})
.from(alunos);
// → [{ nome: 'Ana Silva', email: '[email protected]' }, ...]

Contar registros:

import { count } from 'drizzle-orm';

const [resultado] = await db
.select({ total: count() })
.from(alunos);
// → { total: 5 }

Lucid (AdonisJS)

Buscar todos:

const alunos = await Aluno.all();
// → Array de instancias do model

Selecionar colunas especificas:

const alunos = await Aluno.query().select('nome', 'email');
// → [{ nome: 'Ana Silva', email: '[email protected]' }, ...]

Buscar um registro pelo id:

const aluno = await Aluno.find(1);
// → Instancia do model com id = 1

const aluno = await Aluno.findOrFail(1);
// → Mesmo que find(), mas lanca erro se nao encontrar

Contar registros:

const total = await Aluno.query().count('* as total');
// → [{ total: 5 }]

Comparativo Rapido

OperacaoSQLPrismaDrizzleLucid
Buscar todosSELECT * FROM alunosfindMany()db.select().from()Model.all()
Colunas especificasSELECT nome, email FROM alunosfindMany({ select })db.select({ ... }).from()query().select()
Buscar por IDSELECT * FROM alunos WHERE id = 1findUnique({ where })db.select().from().where()Model.find(1)
ContarSELECT COUNT(*) FROM alunoscount()db.select({ count() })query().count()

Boas Praticas

  1. Sempre liste as colunas que voce precisa ao inves de usar *
  2. Use alias para deixar o resultado mais legivel
  3. Cuidado com tabelas grandes -- sem WHERE ou LIMIT, voce pode trazer milhoes de registros
  4. Use COUNT antes de SELECT se quiser saber o tamanho do resultado antes de trazer os dados
-- Ruim em producao:
SELECT * FROM alunos;

-- Bom em producao:
SELECT id, nome, email FROM alunos;

Exercicios

  1. Escreva um SELECT que retorne apenas o nome e a idade de todos os alunos.

  2. Use AS para renomear a coluna nome para aluno e email para contato no resultado.

  3. Escreva uma query que retorne quantos alunos existem na tabela.

  4. Use DISTINCT para listar todas as idades diferentes que existem na tabela.

  5. Reescreva as queries dos exercicios 1 e 2 usando Prisma ou Drizzle ou Lucid (escolha um).

  6. Pesquise: qual a diferenca entre findUnique e findFirst no Prisma?

Referencias

Testa o que você leu

5 perguntas sobre esta aula. Errar aqui não custa nada - a explicação vem junto da correção.

Pergunta 1 de 5
O que `SELECT *` retorna?