Pular para o conteúdo principal

Função SQL COALESCE

COALESCE() é uma das funções mais úteis do SQL. Leia este tutorial para saber como dominá-lo.
24 de abr. de 2024  · 4 min de leitura

O que é o COALESCE() função?

Coalesce retorna o primeiro valor não nulo em uma lista. Se todos os valores da lista forem NULL, a função retornará null. 

Quando usar COALESCE()?

Essa função é útil para combinar os valores de várias colunas em uma só. 

Por exemplo, uma tabela chamada usuários contém valores de work_email e personal_email dos usuários.

Usando a função COALESCE(), podemos criar uma coluna chamada e-mail, que mostra o endereço work_email do usuário se ele não for nulo. Caso contrário, ele mostra personal_email.

user_id

work_email

personal_email

COALESCE() de

work_email e

personal_email

1

angel@datacamp.com

null

angel@datacamp.com

2

null

bruce@gmail.com

bruce@gmail.com

3

cath@datacamp.com

cath@gmail.com

cath@datacamp.com

COALESCE() syntax

COALESCE(value_1, value_2, ...., value_n)

A função COALESCE() recebe pelo menos um valor (value_1). Ele retornará o primeiro valor da lista que não for nulo. 

Por exemplo, primeiro ele verificará se value_1 é nulo. Caso contrário, ele retorna value_1. Caso contrário, ele verifica se value_2 é nulo. O processo continua até que a lista esteja completa. 

COALESCE() exemplos

Exemplo 1: COALESCE() uma coluna com uma constante

Considere a tabela countries com uma lista de países e seus dias nacionais. Alguns dias nacionais estão vazios. Para linhas com dias nacionais vazios, podemos preenchê-los com o valor 'Unknown'

A consulta e o resultado são os seguintes. 

SELECT
   country_id,
   name, 
   national_day,
   COALESCE(national_day, 'Unknown') AS national_day_coalesced
FROM countries
ORDER BY country_id

country_id

name

national_day

national_day_coalesced

1

Aruba

null

Desconhecido

2

Afeganistão

1919-08-19T00:00:00.000Z

1919-08-19

3

Angola

1975-11-11T00:00:00.000Z

1975-11-11

4

Anguilla

1967-05-30T00:00:00.000Z

1967-05-30

Observe como o valor null em national_day é substituído por uma constante Unknown

Exemplo 2: COALESCE() duas colunas

Temos uma tabela chamada products. Ele contém o nome do produto e sua descrição. Algumas descrições são muito longas (mais de 60 caracteres). Nesse caso, substituímos a descrição pelo nome do produto.

A consulta e o resultado são os seguintes.

SELECT DISTINCT
   product_name,
   description,
   COALESCE(
      CASE WHEN 
         LENGTH(description) >= 60 
         THEN NULL 
         ELSE description 
         END, 
      product_name) product_name_or_description
FROM products
product_name

description

product_name_or_description

Série G.Skill Ripjaws V

"Speed:DDR4-3200,Type:288-pin DIMM,CAS:14Module:4x16GBSize:64GB"

Série G.Skill Ripjaws V

Série G.Skill Ripjaws V

"Speed:DDR4-3200,Type:288-pin DIMM,CAS:15Module:4x16GBSize:64GB"

Série G.Skill Ripjaws V

Asus X99-E-10G WS

"CPU:LGA2011-3,Fator de forma:SSI CEB,Slots de RAM:8,RAM máxima:128GB"

"CPU:LGA2011-3,Fator de forma:SSI CEB,Slots de RAM:8,RAM máxima:128GB"

Supermicro X9SRH-7TF

"CPU:LGA2011,Fator de forma:ATX,Slots de RAM:8,RAM máxima:64GB"

"CPU:LGA2011,Fator de forma:ATX,Slots de RAM:8,RAM máxima:64GB"

Observe como a coluna product_name_or_description exibe o product_name se o description for longo. Caso contrário, ele exibe o endereço description.

 Exemplo 3: COALESCE() três colunas ou mais

Podemos levar o exemplo 2 um passo adiante. Suponha que existam atualmente dois requisitos.

  • Se o comprimento do description for menor que 60, exiba o description.
  • Caso contrário, verifique se o comprimento do endereço product_name é menor que 20. Em caso afirmativo, exibimos o product_name
  • Caso contrário, exiba product
SELECT DISTINCT
   product_name,
   description,
   COALESCE(
      CASE 
         WHEN LENGTH(description) > 50
         THEN NULL
         ELSE description
      END,
   CASE 
      WHEN LENGTH(product_name) > 14
      THEN NULL
      ELSE product_name
   END,
'product') AS product_name_or_description
FROM products
ORDER BY product_name

product_name

description

product_name_or_description

ADATA ASU800SS-128GT-C

Série:Ultimate SU800,Tipo:SSD,Capacidade:128GB,Cache:N/A

produto

ADATA ASU800SS-512GT-C

Série:Ultimate SU800,Tipo:SSD,Capacidade:512GB,Cache:N/A

produto

AMD 100-5056062

Chipset:Vega Frontier Edition Liquid,Memória:16GBCore Clock:1.5GHz

produto

AMD 100-505989

Chipset:FirePro W9100,Memória:32GBCore Clock:930MHz

Chipset:FirePro W9100,Memória:32GBCore Clock:930MHz

Observe como a coluna product_name_or_description exibe o product_name ou o description, dependendo dos comprimentos do product_name ou do description.

Requisitos técnicos

COALESCE() funciona no SQL Server (a partir de 2008), no banco de dados SQL do Azure, no Azure SQL Data Warehouse, no Parallel Data Warehouse, no BigQuery e no Amazon RedShift.

Veja também

Saiba mais sobre o SQL

Temas

Cursos populares de SQL

curso

Introduction to SQL

2 hr
881.7K
Learn how to create and query relational databases using SQL in just two hours.
Ver DetalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

tutorial

FUNÇÃO SQL FORMAT()

FORMAT() é uma das funções mais comumente usadas no SQL. Aprenda suas principais aplicações neste tutorial.
Travis Tang 's photo

Travis Tang

3 min

tutorial

FUNÇÃO SQL COUNT()

COUNT() permite que você conte o número de linhas que correspondem a determinadas condições. Saiba como usá-lo neste tutorial.
Travis Tang 's photo

Travis Tang

3 min

tutorial

Entendendo a função SQL DECODE()

Saiba como usar DECODE() no Oracle para lógica condicional na transformação de dados. Compare DECODE() com a instrução CASE WHEN em termos de desempenho e comportamento.
Allan Ouko's photo

Allan Ouko

11 min

tutorial

SELEÇÃO de várias colunas no SQL

Saiba como selecionar facilmente várias colunas de uma tabela de banco de dados em SQL ou selecionar todas as colunas de uma tabela em uma consulta simples.
DataCamp Team's photo

DataCamp Team

3 min

tutorial

FUNÇÃO SQL DATEDIFF()

DATEDIFF() é uma das funções de manipulação de dados de data mais usadas no SQL. Domine-o lendo este tutorial.
Travis Tang 's photo

Travis Tang

3 min

tutorial

Como usar um alias SQL para simplificar suas consultas

Explore como o uso de um alias SQL simplifica os nomes de colunas e tabelas. Saiba por que usar um alias SQL é fundamental para melhorar a legibilidade e gerenciar uniões complexas.
Allan Ouko's photo

Allan Ouko

9 min

See MoreSee More