5.1 Falta de significância

A linguagem SQL, como a linguagem Java, tem uma palavra-chave especial para denotar a ausência de um valor - é null. Ou como costuma ser escrito - NULL.

O uso NULLem SQL é muito semelhante ao uso de null em Java. Em Java, pode haver objetos cujos campos contenham valores nulos. No SQL, pode haver tabelas cujas linhas contenham valores NULL.

Deixe-me adicionar alguns produtos sem marca à nossa tabela de produtos de propósito. Se a marca do produto for desconhecida, o valor será NULL.

Para exibir esses produtos, vamos classificar nossa tabela de produtos por id na ordem inversa e obter 10 registros. A solicitação ficará assim:

SELECT * FROM product
ORDER BY id DESC
LIMIT 10

Obtemos o seguinte resultado da consulta:

eu ia nome marca preço contar
15 Rebite NULO 0,01 1000
14 Parafuso NULO 0,10 1000
13 Ficar IKEA 100,00 10
12 vaso de flores flor inteligente 99,00 9
onze Cadeirão Bosch 44,00 8
10 Placa Bosch 199,00 10
9 Cômoda IKEA 99,00 10
8 Lâmpada LG 15h00 100
7 televisão LG 350,00 4
6 Prateleira Bosch 25h00 114

Sim, adicionei rebites e parafusos à mesa. Eles têm preço e quantidade, mas não têm marca.

5.2 Comparação com NULL

Você se lembra que às vezes você ficava bravo em Java ao usar null? Que você não pode comparar variáveis ​​que podem se referir a valores nulos via equals(). Exemplo:

Product product1 = new Product();
Product product2 = null;
if (product2.equals(product1) {  //an exception will be raised here}

Você não vai acreditar, mas na linguagem SQL também está esperando as nuances ao trabalhar com valores NULL. E soa mais ou menos assim:nada é NULO.

Se você tentar filtrar todos os produtos cuja marca é null:

SELECT * FROM product
WHERE brand = NULL

Você receberá uma tabela vazia:

eu ia nome marca preço contar

Mas se você escrever na consulta que marca não é igual a NULL, obterá o mesmo resultado:

SELECT * FROM product
WHERE brand != NULL

Você receberá novamente uma mesa vazia:

eu ia nome marca preço contar

Qualquer comparação/ação com NULL retornará NULL:

Expressão Resultado
marca = NULL NULO
marca != NULO NULO
NULO = NULO NULO
NULO != NULO NULO

Sim,mesmo se você comparar NULL com NULL, a resposta será NULL.

5.3 É NULO e NÃO É NULO

Então, como verificamos se algum campo (ou alguma coluna) tem um valor de NULL? E para isso, o SQL possui uma expressão especial - IS NULL. Se parece com isso.

variable IS NULL

Se você quiser verificar se uma coluna da sua tabela não é igual a NULL, então você precisa escrever IS NOT NULL:

variable IS NOT NULL

Vamos escrever uma consulta que selecionará todos os produtos da tabela de produtos cuja marca seja igual a NULL. Tal solicitação ficaria assim:

SELECT * FROM product
WHERE brand IS NULL

E obtemos o seguinte resultado da consulta:

eu ia nome marca preço contar
14 Parafuso NULO 0,10 1000
15 Rebite NULO 0,01 1000

Agora vamos exibir todos os produtos cujo preço é inferior a $ 20:

SELECT * FROM product
WHERE price  < 20

E obtemos o seguinte resultado da consulta:

eu ia nome marca preço contar
2 Cadeira IKEA 5,00 45
8 Lâmpada LG 15h00 100
14 Parafuso NULO 0,10 1000
15 Rebite NULO 0,01 1000

Agora especificamos que o preço deve ser inferior a $ 20 e a marca não é NULL.

SELECT * FROM product
WHERE price  < 20 AND brand IS NOT NULL

Obtemos o seguinte resultado da consulta:

eu ia nome marca preço contar
2 Cadeira IKEA 5,00 45
8 Lâmpada LG 15h00 100

Ótimo, as duas últimas linhas sumiram. Veja como funciona. Um pouco incomum, mas ainda há uma certa lógica nisso.