CodeGym /Cursos /SQL & Hibernate /O valor nulo especial

O valor nulo especial

SQL & Hibernate
Nível 1 , Lição 4
Disponível

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.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION