0Pricing
SQL Interview Prep · Aula

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

  1. Projetando colunas e armadilhas de alias
  2. Colunas calculadas e precedência de expressões
  3. DISTINCT versus GROUP BY para exclusividade
  4. Expressões CASE em SELECT
← Voltar para SQL Interview Prep