Tratamento de valores NULL em SQL


Introdução

No mundo dos bancos de dados, os valores NULL muitas vezes podem parecer a proverbial ovelha negra. Eles representam dados ausentes, indefinidos ou desconhecidos e podem representar desafios únicos no gerenciamento e análise de dados. Think about que você está analisando um banco de dados de vendas e algumas entradas não possuem suggestions do cliente ou quantidades de pedidos. Compreender como lidar eficazmente com valores NULL em SQL é essential para garantir a recuperação precisa de dados e análises significativas. Neste guia, nos aprofundaremos nas nuances dos valores NULL, exploraremos como eles afetam as operações SQL e forneceremos técnicas práticas para gerenciá-los.

Tratamento de valores NULL em SQL

Resultados de aprendizagem

  • Entenda o que os valores NULL representam em SQL.
  • Identifique o impacto dos valores NULL nas consultas e cálculos de dados.
  • Make the most of funções e técnicas SQL para lidar com valores NULL de maneira eficaz.
  • Implemente práticas recomendadas para gerenciar NULLs no design e consulta de banco de dados.

O que são valores NULL em SQL?

NULL é um marcador especial em SQL usado para apontar para o fato de que o valor de algum fator não é conhecido. Também deve ser entendido que NULL não é igual a ”, 0 e outros valores semelhantes, mas, em vez disso, aponta para a ausência de valor. Em SQL, NULL pode ser usado em qualquer tipo de atributo, seja inteiro, string ou knowledge.

Exemplo de valores NULL

Considere uma tabela chamada workers:

Nesta tabela, o department_id para John e Bob é NULL, indicando que o departamento deles é desconhecido. O e-mail de Alice também é NULL, o que significa que não há nenhum e-mail registrado.

Impacto dos valores NULL em consultas SQL

SQL NULL definiu quaisquer colunas que não contenham dados e seu uso influencia o desempenho das consultas e quais resultados são entregues. Uma das coisas que todos precisam saber para escrever boas consultas e poder trabalhar corretamente com os dados é o comportamento dos valores NULL. Neste weblog, explicarei algumas abordagens, dependendo se os campos contêm o valor NULL e a perspectiva em que os campos são considerados, para consultas SQL para comparação, cálculo, operações lógicas e assim por diante.

Comparações com NULL

Ao realizar comparações em SQL, é essencial entender que valores NULL não equivalem a zero ou a uma string vazia. Em vez disso, NULL representa um valor desconhecido. Como resultado, qualquer comparação direta envolvendo NULL produzirá um resultado UNKNOWN, em vez de TRUE ou FALSE.

Exemplo:

SELECT * FROM workers WHERE department_id = NULL;

Saída: Nenhuma linha será retornada porque as comparações com NULL usando = não avalie como TRUE.

Para verificar corretamente os valores NULL, use:

SELECT * FROM workers WHERE department_id IS NULL;

Supondo que workers tabela tem:

ID_do_funcionárioprimeiro nomedepartamento_id
1John101
2JaneNULO
3Prumo102
4AliceNULO

Saída:

ID_do_funcionárioprimeiro nomedepartamento_id
2JaneNULO
4AliceNULO

Lógica Booleana e NULLs

Valores NULL afetam a lógica booleana em consultas SQL. Quando NULL está envolvido em operações lógicas, o resultado muitas vezes pode levar a resultados inesperados. Em SQL, a lógica de três valores (TRUE, FALSE, UNKNOWN) significa que se qualquer operando em uma expressão lógica for NULL, a expressão inteira poderá ser avaliada como UNKNOWN.

Exemplo:

SELECT * FROM workers WHERE first_name="John" AND department_id = NULL;

Saída: Esta consulta não retornará resultados, pois a condição que envolve NULL será avaliado como DESCONHECIDO.

Para operações lógicas corretas, verifique explicitamente NULL:

SELECT * FROM workers WHERE first_name="John" AND department_id IS NULL;

Saída:

ID_do_funcionárioprimeiro nomedepartamento_id
Sem saída

Funções de agregação

Valores NULL têm um impacto único em funções agregadas, como SUM, AVG, COUNTe outros. A maioria das funções agregadas ignora valores NULL, o que significa que não contribuirão para o resultado dos cálculos. Esse comportamento pode levar a conclusões enganosas se você não estiver ciente dos NULLs presentes no seu conjunto de dados.

Exemplo:

SELECT AVG(wage) FROM workers;

Supondo que workers tabela tem:

ID_do_funcionáriosalário
150.000
2NULO
360.000
4NULO

Saída:

A média é calculada a partir dos salários não NULOS (50.000 e 60.000).

Se todos os valores em uma coluna forem NULL:

SELECT COUNT(wage) FROM workers;

Saída:

Neste caso, COUNT conta apenas valores não NULL.

Valores DISTINTOS e NULL

Ao usar o DISTINCT palavra-chave, os valores NULL são tratados como um único valor exclusivo. Assim, se você tiver várias linhas com NULLs em uma coluna, o DISTINCT consulta retornará apenas uma instância de NULL.

Exemplo:

SELECT DISTINCT department_id FROM workers;

Supondo que workers tabela tem:

ID_do_funcionáriodepartamento_id
1101
2NULO
3102
4NULO

Saída:

Mesmo se houver vários NULLs, apenas um NULL aparecerá no resultado.

Técnicas para lidar com valores NULL

O tratamento de valores NULL é essential para manter a integridade dos dados e garantir resultados de consulta precisos. Aqui estão algumas técnicas eficazes:

Usando IS NULL e IS NOT NULL

A maneira mais direta de filtrar valores NULL é usando o IS NULL e IS NOT NULL predicados. Isso permite que você verifique explicitamente valores NULL em suas consultas.

Exemplo:

SELECT * FROM workers WHERE department_id IS NULL;

Saída:

ID_do_funcionárioprimeiro nomedepartamento_id
2JaneNULO
4AliceNULO

Para encontrar funcionários com um departamento atribuído:

SELECT * FROM workers WHERE department_id IS NOT NULL;

Saída:

ID_do_funcionárioprimeiro nomedepartamento_id
1John101
3Prumo102

Usando a função COALESCE

O COALESCE função retorna o primeiro valor não NULL na lista de argumentos. Isso é útil para fornecer valores padrão quando NULL é encontrado.

Exemplo:

SELECT first_name, COALESCE(department_id, 'No Division') AS division FROM workers;

Saída:

primeiro nomedepartamento
John101
JaneNenhum departamento
Prumo102
AliceNenhum departamento

Usando a função NULLIF

O NULLIF a função retorna NULL se os dois argumentos forem iguais; caso contrário, ele retornará o primeiro argumento. Isso pode ajudar a evitar comparações indesejadas e lidar com padrões de maneira elegante.

Exemplo:

SELECT first_name, NULLIF(department_id, 0) AS department_id FROM workers;

Supondo department_id às vezes é definido como 0 em vez de NULL:

Saída:

primeiro nomedepartamento_id
John101
JaneNULO
Prumo102
AliceNULO

Usando a instrução CASE

O CASE instrução permite lógica condicional em consultas SQL. Você pode usá-lo para substituir valores NULL por substitutos significativos com base em condições específicas.

Exemplo:

SELECT first_name, 
       CASE 
           WHEN department_id IS NULL THEN 'Unknown Division'
           ELSE department_id 
       END AS division 
FROM workers;

Saída:

primeiro nomedepartamento
John101
JaneDepartamento desconhecido
Prumo102
AliceDepartamento desconhecido

Usando funções agregadas com tratamento NULL

Ao usar funções agregadas como COUNT, SUM, AVGand many others., é essencial lembrar que eles ignoram valores NULL. Você pode combinar essas funções com COALESCE ou técnicas semelhantes para gerenciar NULLs em resultados agregados.

Exemplo:

Para contar quantos funcionários têm um departamento atribuído:

SELECT COUNT(department_id) AS AssignedDepartments FROM workers;

Saída:

Se você quiser incluir uma contagem de valores NULL:

SELECT COUNT(*) AS TotalEmployees, 
       COUNT(department_id) AS AssignedDepartments,
       COUNT(*) - COUNT(department_id) AS UnassignedDepartments 
FROM workers;

Saída:

Whole de funcionáriosDepartamentos AtribuídosDepartamentos não atribuídos
422

Melhores práticas para gerenciar valores NULL

Veremos agora as melhores práticas para gerenciar o valor NULL.

  • Use NULL propositalmente: use NULL apenas para indicar a ausência de um valor. Esta distinção é essential; NULL não deve ser confundido com zero ou com uma string vazia, pois cada um tem seu próprio significado no contexto de dados.
  • Estabeleça restrições de banco de dados: implemente restrições NOT NULL sempre que aplicável para evitar entradas NULL não intencionais em campos críticos. Isso ajuda a reforçar a integridade dos dados e garante que as informações essenciais estejam sempre presentes.
  • Normalize seu esquema de banco de dados: projete adequadamente o esquema do seu banco de dados para minimizar a ocorrência de valores NULL. Ao organizar os dados em tabelas e relacionamentos apropriados, você pode reduzir a necessidade de NULLs e promover uma representação de dados mais clara.
  • Make the most of valores padrão sensatos: ao projetar tabelas, considere usar valores padrão razoáveis ​​para preencher possíveis entradas NULL. Essa abordagem ajuda a evitar confusão e garante que os usuários entendam o contexto dos dados sem encontrar NULL.
  • Estratégias de manipulação de documentos NULL: documente claramente sua abordagem para lidar com valores NULL em sua organização. Isso inclui o estabelecimento de diretrizes para entrada de dados, relatórios e análise para promover consistência e compreensão entre os membros da equipe.
  • Revise e audite regularmente os dados: understand revisões e auditorias periódicas de seus dados para identificar e gerenciar valores NULL de maneira eficaz. Essa prática ajuda a manter a qualidade e a integridade dos dados ao longo do tempo.
  • Eduque os membros da equipe: Reconhecer e explicar os valores NULOS aos funcionários para que eles entendam sua importância e seu manejo adequado. Informar a equipe com o conhecimento correto é essential para tomar as decisões corretas em relação aos dados e relatórios.

Erros comuns a serem evitados com NULLs

Vamos agora explorar os erros comuns que podemos evitar com NULLs.

  • Confundindo NULL com Strings Zero ou Vazias: Os primeiros e mais frequentemente encontrados antipadrões são NULL, usado como zero ou uma string vazia. Reconhecer que NULL é usado para denotar a ausência de valor é essential para evitar interpretações errôneas dos dados.
  • Usando o operador de igualdade para comparações NULL: Não use operadores de igualdade (=) ao testar valores NULL, pois isso resultará em uma condição UNKNOWN. Em vez disso, você deve usar os predicados IS NULL ou IS NOT NULL para comparação.
  • Negligenciando NULLs em funções agregadas: Alguns dos problemas comuns incluem o fato de que a maioria dos usuários parece ignorar o fato de que funções agregadas como SUM, AVG e COUNT sempre omitirão valores NULL resultantes de sinais errados. Tenha cuidado com dados agregados e NULLs existem mesmo em registros contendo apenas números inteiros.
  • Não considerando NULLs na lógica de negócios: não levar em conta valores NULL na lógica de negócios pode levar a resultados inesperados em aplicativos e relatórios. Sempre inclua verificações de NULL ao executar operações lógicas.
  • Uso excessivo de NULLs: Embora NULLs possam ser úteis, seu uso excessivo pode complicar a análise de dados e os relatórios. Esforce-se para obter um equilíbrio, garantindo que os NULLs sejam usados ​​adequadamente, sem sobrecarregar o conjunto de dados.
  • Ignorando a documentação: Negligenciar a documentação de suas estratégias para gerenciar valores NULL pode causar confusão e inconsistência entre os membros da equipe. Documentação clara é essencial para um gerenciamento de dados eficaz.
  • Negligenciando auditorias regulares de valores NULL: auditorias regulares de valores NULL ajudam a manter a integridade e a qualidade dos dados. Ignorar esta etapa pode resultar no acúmulo de erros e interpretações errôneas na análise de dados.

Conclusão

O tratamento de valores NULL em SQL requer atenção cuidadosa para evitar distorções e afetar a análise de dados. Você pode resolver problemas com NULLs usando NULL intencionalmente, configurando restrições no banco de dados e auditando informações diariamente. Além disso, existem armadilhas específicas com as quais, se estiver familiarizado – como confundir NULL com zero ou não levar em conta NULLs em operações lógicas – melhorarão os métodos profissionais de manipulação de dados. Finalmente, e mais importante, um gerenciamento apropriado de valores NULL aumenta a credibilidade das consultas e dos relatórios e incentiva a apreciação dos ambientes de dados e, portanto, a formação de decisões/insights corretos sobre dados específicos.

Perguntas frequentes

Q1. O que significa NULL em SQL?

A. NULL representa um valor ausente ou indefinido em SQL, indicando a ausência de dados.

Q2. Como posso verificar valores NULL em uma consulta?

A. Uso IS NULL ou IS NOT NULL para verificar valores NULL em consultas SQL.

Q3. Os valores NULL afetarão as funções agregadas?

R. Sim, as funções agregadas ignoram valores NULL, o que pode afetar os resultados.

This fall. Como posso substituir valores NULL por um valor padrão?

A. Você pode usar o COALESCE, IFNULLou ISNULL funções para substituir valores NULL por um padrão especificado.

Q5. É uma boa prática permitir valores NULL no meu banco de dados?

R. Embora NULLs possam ser necessários, geralmente é melhor minimizar seu uso aplicando restrições NOT NULL e fornecendo valores padrão quando apropriado.

Meu nome é Ayushi Trivedi. Eu sou formado em B. Tech. Tenho 3 anos de experiência trabalhando como educador e editor de conteúdo. Trabalhei com várias bibliotecas python, como numpy, pandas, seaborn, matplotlib, scikit, imblearn, regressão linear e muito mais. Eu também sou um autor. Meu primeiro livro chamado #turning25 foi publicado e está disponível na amazon e flipkart. Aqui, sou editor de conteúdo técnico da Analytics Vidhya. Sinto-me orgulhoso e feliz por ser AVian. Tenho uma ótima equipe para trabalhar. Adoro construir a ponte entre a tecnologia e o aluno.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *