Resumo : neste tutorial você aprenderá como trabalhar com NULL
valores MySQL. Além disso, você aprenderá algumas funções úteis para lidar com os NULL
valores de forma eficaz.
NULL
Introdução aos valores MySQL
No MySQL, um NULL
valor significa desconhecido. Um NULL
valor é diferente de zero( 0
) ou de uma string vazia ''
.
Um NULL
valor não é igual a nada, nem mesmo a si mesmo. Se você comparar um NULL
valor com outro NULL
valor ou qualquer outro valor, o resultado é NULL
porque o valor de cada NULL
valor é desconhecido.
Geralmente, você usa o NULL
valor para indicar que os dados estão ausentes, são desconhecidos ou não são aplicáveis. Por exemplo, o número de telefone de um cliente potencial pode NULL
ser adicionado posteriormente.
Ao criar uma tabela , você pode especificar se uma coluna aceita NULL
valores ou não usando a NOT NULL
restrição.
Por exemplo, a instrução a seguir cria a leads
tabela:
DROP TABLE IF EXISTS leads;
CREATE TABLE leads (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
source VARCHAR(255) NOT NULL,
email VARCHAR(100),
phone VARCHAR(25)
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta leads
tabela, a coluna id
é a coluna de chave primária , portanto não aceita nenhum NULL
valor.
As colunas first_name
, last_name
e source
usam as NOT NULL
restrições, portanto, você não pode inserir nenhum NULL
valor nessas colunas, enquanto as colunas email
e phone
aceitam valores NULL.
Você pode usar um NULL
valor na INSERT
instrução para especificar que os dados estão faltando. Por exemplo, a instrução a seguir insere uma linha na leads
tabela. Como o número de telefone está faltando, um NULL
valor é usado.
INSERT INTO leads(first_name,last_name,source,email,phone)
VALUE('John','Doe','Web Search','[email protected]',NULL);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Como o valor padrão da coluna email é NULL
, você pode omitir o email na INSERT
instrução da seguinte maneira:
INSERT INTO leads(first_name,last_name,source,phone)
VALUES
('Lily','Bush','Cold Calling','(408)-555-1234'),
('David','William','Web Search','(408)-888-6789');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
MySQL SET NULL
em UPDATE
declaração
Para definir o valor de uma coluna como NULL
, você usa o operador de atribuição ( =
). Por exemplo, para atualizar o telefone de David William
to NULL
, você usa a seguinte UPDATE
instrução:
UPDATE leads
SET
phone = NULL
WHERE
id = 3;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
MySQL ORDER BY
comNULL
Se você usar a ORDER BY
cláusula para classificar o conjunto de resultados em ordem crescente, o MySQL considera NULL
os valores inferiores aos outros valores, portanto, apresenta os NULL
valores primeiro.
A instrução a seguir classifica os leads por número de telefone em ordem crescente.
SELECT
*
FROM
leads
ORDER BY phone;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Caso você use o ORDER BY DESC
, os NULL
valores aparecem no final do conjunto de resultados. Veja o exemplo a seguir:
SELECT
*
FROM
leads
ORDER BY phone DESC;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Para testar NULL
em uma consulta, você usa o operador IS NULL
ou IS NOT NULL
na WHERE
cláusula.
Por exemplo, para obter os leads que ainda não forneceram o número de telefone, você utiliza a IS NULL
operadora da seguinte forma:
SELECT
*
FROM
leads
WHERE
phone IS NULL;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Você pode usar a IS NOT
operadora para obter todos os leads que forneceram os endereços de e-mail.
SELECT
*
FROM
leads
WHERE
email IS NOT NULL;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Mesmo que the NULL
não seja igual a NULL
, dois NULL
valores são iguais na GROUP BY
cláusula.
SELECT
id, first_name, last_name, email, phone
FROM
leads
GROUP BY email;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A consulta retorna apenas duas linhas porque as linhas cuja coluna email está NULL
são agrupadas em uma.
MySQL NULL
e UNIQUE
índice
Ao usar uma restrição UNIQUE ou um índice UNIQUE em uma coluna, você pode inserir vários NULL
valores nessa coluna. Está perfeitamente bem porque, neste caso, o MySQL considera que NULL
os valores são distintos.
Vamos verificar esse ponto criando um UNIQUE
índice para a phone
coluna.
CREATE UNIQUE INDEX idx_phone ON leads(phone);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Observe que se você usar o mecanismo de armazenamento BDB , o MySQL considera que os NULL
valores são iguais, portanto você não pode inserir vários NULL
valores em uma coluna que possui uma restrição exclusiva.
NULL
Funções MySQL
O MySQL fornece várias funções úteis que lidam com NULL de maneira eficaz: IFNULL
, COALESCE
e NULLIF
.
A IFNULL
função aceita dois parâmetros. A IFNULL
função retorna o primeiro argumento se não for NULL
, caso contrário, retorna o segundo argumento.
Por exemplo, a instrução a seguir retorna o número de telefone, caso contrário NULL
, ela retorna N/A
em vez de NULL
.
SELECT
id,
first_name,
last_name,
IFNULL(phone, 'N/A') phone
FROM
leads;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A COALESCE
função aceita uma lista de argumentos e retorna o primeiro argumento não NULO. Por exemplo, você pode usar a COALESCE
função para exibir as informações de contato de um lead com base na prioridade das informações na seguinte ordem: telefone, email e N/A.
SELECT
id,
first_name,
last_name,
COALESCE(phone, email, 'N/A') contact
FROM
leads;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A NULLIF
função aceita dois argumentos. Se os dois argumentos forem iguais, a NULLIF
função retornará NULL
. Caso contrário, ele retorna o primeiro argumento.
A NULLIF
função é útil quando você tem NULL
valores de string vazios em uma coluna. Por exemplo, por engano, você insere a seguinte linha na leads
tabela:
INSERT INTO leads(first_name,last_name,source,email,phone)
VALUE('Thierry','Henry','Web Search','[email protected]','');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O telefone é uma string vazia em vez de NULL
.
Se você deseja obter os dados de contato dos leads, você acaba com um telefone vazio em vez do e-mail conforme a seguinte consulta:
SELECT
id,
first_name,
last_name,
COALESCE(phone, email, 'N/A') contact
FROM
leads;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Para corrigir isso, você usa a NULLIF
função para comparar o telefone com a string vazia, se forem iguais retorna NULL
, caso contrário retorna o número do telefone.
SELECT
id,
first_name,
last_name,
COALESCE(NULLIF(phone, ''), email, 'N/A') contact
FROM
leads;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste tutorial, você aprendeu como trabalhar com MySQL NULL
e como usar algumas funções úteis para lidar NULL
com consultas.