Expressões CASE em SELECT
Escreva lógica condicional embutida e conheça as formas CASE pesquisada e simples.
Expressões CASE em SELECT é uma aula grátis de SQL Interview Prep no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Interview Prep inclui 4 aulas no total.
CASE: a expressão condicional do SQL
CASE corresponde ao if/then/else do SQL, mas é uma expressão que retorna um único valor — por isso funciona em qualquer lugar que aceite um valor: SELECT, WHERE, ORDER BY e até dentro de agregações.
SELECT order_id,
amount,
CASE WHEN amount > 100 THEN 'large' ELSE 'small' END AS size
FROM orders;Forma pesquisada de CASE
O CASE pesquisado verifica uma condição booleana em cada WHEN e retorna a primeira correspondência. É a forma mais flexível, e a ordem importa — vence a primeira condição verdadeira.
SELECT score,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
ELSE 'F'
END AS grade
FROM exam_results;Forma simples de CASE
O CASE simples compara uma expressão com uma lista de valores. É mais curto para verificações de igualdade, mas não consegue lidar com intervalos nem com testes de NULL.
SELECT status_code,
CASE status_code
WHEN 1 THEN 'active'
WHEN 2 THEN 'paused'
WHEN 3 THEN 'closed'
ELSE 'unknown'
END AS status_label
FROM accounts;Pesquisado versus simples: quando usar cada um
Use o CASE simples para comparar igualdades com valores fixos e o CASE pesquisado para intervalos ou NULL. Armadilha importante: o CASE simples nunca pode corresponder a NULL — use IS NULL em uma forma pesquisada.
-- Simple CASE will NOT catch NULL here
SELECT CASE WHEN bonus IS NULL THEN 'no bonus'
ELSE 'has bonus'
END AS bonus_flag
FROM employees;A ordem dos ramos WHEN importa
Como vence o primeiro ramo correspondente, ordene os WHENs do mais específico para o menos específico. Coloque um limite amplo primeiro e uma pontuação de 95 será rotulada incorretamente.
-- Correct order: highest threshold first
SELECT CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
ELSE 'C or below'
END AS grade
FROM exam_results;O ELSE e o NULL implícito
Se nada corresponder e você omitir ELSE, CASE retornará NULL. Adicione um ELSE explícito para o valor padrão, evitando que valores inesperados se tornem NULL silenciosamente.
-- No ELSE: anything not 1/2 becomes NULL
SELECT CASE flag WHEN 1 THEN 'yes' WHEN 2 THEN 'no' END AS label
FROM toggles;Agregação condicional (padrão de tabela dinâmica)
O truque mais valioso em entrevistas: agregação condicional. Coloque CASE dentro de SUM ou COUNT para contabilizar linhas por categoria em uma única passagem — um relatório organizado no estilo de tabela dinâmica.
SELECT
SUM(CASE WHEN status = 'paid' THEN 1 ELSE 0 END) AS paid_orders,
SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending_orders,
SUM(CASE WHEN status = 'paid' THEN amount ELSE 0 END) AS paid_revenue
FROM orders;COUNT ignora NULL: um atalho com CASE
Como COUNT ignora NULL, você pode omitir ELSE para que as linhas sem correspondência se tornem NULL e não sejam contadas. É uma forma um pouco mais curta de fazer uma contagem condicional.
SELECT
COUNT(CASE WHEN status = 'paid' THEN 1 END) AS paid_orders,
COUNT(CASE WHEN status = 'pending' THEN 1 END) AS pending_orders
FROM orders;CASE em ORDER BY para uma ordenação personalizada
Coloque CASE em ORDER BY para ordenar por uma prioridade personalizada, em vez de usar uma ordem alfabética ou numérica simples — por exemplo, urgente antes de normal e antes de todas as outras.
SELECT order_id, status
FROM orders
ORDER BY
CASE status
WHEN 'urgent' THEN 1
WHEN 'normal' THEN 2
ELSE 3
END,
order_id;Consistência de tipos entre os ramos
Todos os ramos de um CASE devem retornar um tipo compatível. Misturar um número e uma cadeia de texto pode causar um erro ou forçar uma conversão — escolha um único tipo de saída e use CAST explicitamente, se necessário.
-- Keep branches the same type
SELECT CASE WHEN qty > 0 THEN CAST(qty AS VARCHAR)
ELSE 'none'
END AS qty_label
FROM inventory;CASE em WHERE para filtragem condicional
CASE em WHERE permite aplicar uma lógica de filtragem diferente com base em um indicador — como um limite de preço diferente por região. Muitas vezes é mais limpo do que um emaranhado de AND e OR.
SELECT order_id, amount, region
FROM orders
WHERE amount > CASE region
WHEN 'US' THEN 100
WHEN 'EU' THEN 90
ELSE 50
END;Verificação rápida
Preveja o resultado.
Recapitulação
Recapitulando: CASE retorna um único valor e funciona em SELECT, WHERE, ORDER BY e agregações. A forma pesquisada lida com intervalos e NULL; a primeira correspondência vence; nenhuma correspondência significa NULL; mantenha os tipos dos ramos compatíveis.
Perguntas Frequentes
A aula “Expressões CASE em SELECT” é grátis?
Sim — o texto completo de “Expressões CASE em SELECT” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Interview Prep, atualize para CoddyKit PRO. O curso de SQL Interview Prep inclui 4 aulas no total.
O que vou aprender em “Expressões CASE em SELECT”?
Escreva lógica condicional embutida e conheça as formas CASE pesquisada e simples. Você pratica SQL Interview Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Interview Prep?
Nenhuma experiência prévia é necessária. SQL Interview Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Expressões CASE em SELECT”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Interview Prep?
Sim. Cada aula de SQL Interview Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Projetando colunas e armadilhas de alias
- Colunas calculadas e precedência de expressões
- DISTINCT versus GROUP BY para exclusividade
- Expressões CASE em SELECT