Este artigo visa ajudar os iniciantes a entender os conceitos básicos da função T-SQL COALESCE e sua aplicação para manipulação de valores NULL. Além disso, os leitores terão experiência prática implementando alguns exemplos simples dessa função.
Também destacaremos a importância das funções T-SQL na resolução de problemas analíticos de banco de dados.
Sobre a função SQL COALESCE
Primeiro, vamos tentar entender essa função do ponto de vista de um iniciante em SQL.
O que é a função SQL COALESCE?
É uma função T-SQL que aceita muitas entradas, mas retorna o primeiro valor de entrada que NÃO é NULL .
Qual é a entrada?
Uma entrada (também chamada de argumento) pode ser qualquer coisa fornecida a uma função exigida por essa função para fazer seu trabalho.
por exemplo, temos uma função chamada SUM() , que adiciona quaisquer dois números X e S . Esses números são entradas ou argumentos da função.
Uma entrada ou argumento pode ser uma expressão.
O que é uma expressão?
Uma expressão pode ser uma constante, uma variável ou uma coluna que retorna um único valor de dados.
No entanto, estamos particularmente focados nas colunas da perspectiva do banco de dados, que podem ou não conter valores.
O que é um valor nulo?
Qualquer valor ainda a ser atribuído à coluna de uma tabela é um NULL valor. Em outras palavras, NULL significa um valor não inicializado de uma coluna na tabela .
O que é um valor NOT NULL?
É o oposto do valor NULL. Se o valor NULL for um valor de coluna não atribuído ou não inicializado, o valor NOT NULL será um valor de coluna atribuído ou inicializado .
por exemplo, temos duas colunas, ExamId e Resultado do exame , em uma tabela.
Um usuário define ExamId=1 , mas não fornece nenhum valor ao ExamResult coluna. Em seguida, ExamResult terá NULL nele. Como alternativa, ExamId tem NÃO NULO valor porque é 1.
Como funciona a função COALESCE?
É uma função que mostra o primeiro valor NOT NULL da coluna na lista de colunas passadas para esta função. No entanto, podemos passar qualquer conjunto de expressões, que pode ser uma lista das colunas da tabela ou um simples conjunto de números (constantes) ou variáveis para esta função.
Sintaxe
A sintaxe SQL da função COALESCE (conforme documentação da Microsoft) é a seguinte:
COALESCE ( expression [ ,...n ] )
Já definimos uma expressão para que ela possa aceitar qualquer número de expressões do mesmo tipo.
Compatibilidade
De acordo com a documentação da Microsoft, esta função é compatível com muitas tecnologias Microsoft SQL, incluindo as seguintes:
- Todas as versões compatíveis do SQL Server.
- Banco de dados SQL do Azure (versão em nuvem do SQL Server).
Observe que excluí deliberadamente algumas outras tecnologias do SQL Server para manter o contexto simples.
Exemplos simples da função COALESCE
Vamos configurar um banco de dados de amostra onde podemos executar nossos exemplos. Crie um novo banco de dados chamado ‘CoalesceDB’ para executar seus exemplos nele. Utilize o seguinte código:
-- Create sample database
Create DATABASE CoalesceDB;
GO
Exemplo de 'Número com NULL'
Se passarmos um número e um valor NULL para a função COALESCE em qualquer ordem, ela retornará o número porque é o primeiro valor NOT NULL .
Use o script T-SQL no banco de dados de exemplo da seguinte maneira:
-- Use the sample database
USE CoalesceDB
-- Simple COALESCE example with number and NULL inputs (arguments)
SELECT COALESCE(NULL,1) as COALESCE_Result
Você deve obter os seguintes resultados:
Se invertermos a ordem dos argumentos de tal forma que o número 1 venha primeiro e NULL se torne o segundo argumento, ainda obteremos o mesmo resultado:
-- Simple COALESCE example with Number and NULL while number being first input (arguments)
SELECT COALESCE(1,NULL) as COALESCE_Result_Number_First
'String com um NULL' Exemplo
Aqui vamos passar uma string (dados do tipo caractere) e um NULL para esta função para ver os resultados. Execute o seguinte script:
-- Simple COALESCE example with string and NULL inputs (arguments)
SELECT COALESCE(NULL,'Second input') as COALESCE_Result
Os resultados estão abaixo:
Da mesma forma, inverter a ordem nos dará os mesmos resultados do exemplo anterior.
Exemplo de "Dois números e um NULL"
Vamos ver o comportamento da função COALESCE se fornecermos as três entradas (argumentos), incluindo dois números e um valor NULL, para esta função.
Execute o seguinte script para o exemplo com dois números e um valor NULL:
-- Simple COALESCE example with two numbers and NULL inputs (arguments)
SELECT COALESCE(NULL,2,3) as COALESCE_Result
A saída é a seguinte:
Desde o primeiro NÃO valor nulo é 2 , a função COALESCE o retornou, ignorando o valor após ele.
Vamos agora inverter a ordem dos números na lista de argumentos com o seguinte script:
-- Simple COALESCE example with two numbers reversed and NULL inputs (arguments)
SELECT COALESCE(NULL,3,2) as COALESCE_Result
O conjunto de resultados está abaixo:
Exemplo de 'Número, String e NULL'
Aqui misturamos os tipos de argumentos inserindo um número, string e um valor NULL. Digite o seguinte código:
-- Simple COALESCE example with one number one string and NULL inputs (arguments)
SELECT COALESCE(NULL,1,'Home') as COALESCE_Result
Os resultados são os seguintes:
Embora a função COALESCE mostre os resultados corretos, pegando o primeiro valor NOT NULL, que é 1, não é um bom exemplo. Devemos fornecer o mesmo tipo de argumentos. São números ou caracteres ou qualquer outro tipo de expressão.
Se fornecermos a string 'Home' como primeiro argumento e o número 1 como segundo argumento, isso causará um erro. É por isso que as expressões devem ser do mesmo tipo.
Vamos tentar isso trocando os dois argumentos NOT NULL:
-- Simple COALESCE example with one number one string first and NULL inputs (arguments)
SELECT COALESCE(NULL,'Home',1) as COALESCE_Result
A saída está abaixo:
Exemplo de 'Duas Strings com NULL'
Se inserirmos um valor NULL seguido por dois valores de string, ele retornará a primeira string porque NÃO é NULL. Vai deixar o segundo de fora. Execute o seguinte script para vê-lo em ação:
-- Simple COALESCE example with two strings and NULL inputs (arguments)
SELECT COALESCE(NULL,'Home','Office') as COALESCE_Result
O conjunto de resultados está abaixo:
O exemplo acima prova que resultados precisos requerem o fornecimento do mesmo tipo de argumentos para a função COALESCE. Um argumento em si pode ser um número, string, variável ou uma coluna da tabela.
Exemplos de casos reais
Agora, tomamos um cenário de caso real simples da função COALESCE manipulando valores NULL de forma eficaz.
Uma empresa provedora de serviços de TI armazena os dados de seus clientes, enquadrando-se nas duas categorias a seguir:
- Clientes empresariais.
- Clientes individuais.
Um cliente empresarial é um cliente que representa uma empresa. Eles fazem pedidos em nome da empresa (negócio). Um cliente individual é uma pessoa que solicita serviços pessoalmente e por uso pessoal.
Os contatos dos clientes empresariais estão na tabela Cliente na coluna Work_Email. Os endereços de email dos clientes pessoais estão na coluna Personal_Email da tabela.
Portanto, ele preenche a coluna Work_Email ou Personal_Email para cada cliente, dependendo do tipo.
Criar a Tabela de Clientes
Criaremos uma tabela chamada 'Cliente' no banco de dados de amostra CoalesceDB. Digite o seguinte script:
-- Using the sample database
Use CoalesceDB
-- Create Customer table
CREATE TABLE Customer
(CustomerId INT IDENTITY(1,1),
Work_Email VARCHAR(250) NULL,
Personal_Email VARCHAR(250) NULL,
CONSTRAINT [PK_Customer] PRIMARY KEY ([CustomerId])
)
Preencher a tabela de clientes
Vamos preencher a tabela customer usando o seguinte script:
-- Using the sample database
Use CoalesceDB
-- Populate Customer table
INSERT INTO Customer
(Work_Email,Personal_Email)
values
('[email protected]',NULL),
(NULL,'[email protected]'),
(NULL,'[email protected]'),
('[email protected]',NULL),
('[email protected]',NULL),
(NULL,'[email protected]')
-- Important: Please note the above email addresses are for demo purposes only
Visualizar a tabela de clientes
Execute o seguinte script:
-- View customer table
SELECT [CustomerId], [Work_Email], [Personal_Email] FROM dbo.Customer
A saída é a seguinte:
Visualizando todos os contatos disponíveis usando COALESCE
Agora, se quisermos ver todos os contatos disponíveis de todos os clientes, ignorando NULLs, podemos fazer isso usando a função COALESCE da seguinte forma:
--Viewing all available contacts using COALESCE
SELECT C.CustomerId,COALESCE(Work_Email,Personal_Email) AS Email
FROM dbo.Customer C
Os resultados são:
Coisas para fazer
Parabéns! Você tem o básico da função COALESCE e entende seu uso para manipular os valores NULL de forma eficaz.
Agora, você pode querer treinar ainda mais as novas habilidades:
- Tente criar e preencher mais duas colunas, Work_Phone e Personal_Phone, na tabela Customer. Veja se você pode manipular valores NULL nessas colunas usando o exemplo de caso real.
- Tente criar uma visualização SQL para mostrar todos os contatos de e-mail disponíveis dos clientes.
- Tente passar todas as quatro colunas (Work_Email, Personal_Email, Work_Phone e Personal_Phone) na função. Obviamente, você precisa garantir que todos tenham o mesmo tipo de dados. Veja você mesmo os resultados.
Leia também
Um uso prático da função SQL COALESCE
Principais respostas para 5 perguntas importantes sobre a função SQL COALESCE