5.1 Manque de signification

Le langage SQL, comme le langage Java, a un mot-clé spécial pour indiquer l'absence de valeur - c'est null. Ou comme il est souvent écrit - NULL.

L'utilisation NULLen SQL est très similaire à l'utilisation de null en Java. En Java, il peut y avoir des objets dont les champs contiennent des valeurs nulles. En SQL, il peut y avoir des tables dont les lignes contiennent des valeurs NULL.

Permettez-moi d'ajouter exprès quelques produits sans marque à notre tableau de produits. Si la marque du produit est inconnue, la valeur sera NULL.

Pour afficher de tels produits, trions notre table de produits par identifiant dans l'ordre inverse et prenons 10 enregistrements. La requête ressemblera à ceci :

SELECT * FROM product
ORDER BY id DESC
LIMIT 10

Nous obtenons le résultat de requête suivant :

identifiant nom marque prix compter
15 Rivet NUL 0,01 1000
14 Vis NUL 0,10 1000
13 Rester Ikéa 100,00 dix
12 pot de fleur Fleur intelligente 99,00 9
onze Fauteuil Bosch 44.00 8
dix Plaque Bosch 199,00 dix
9 La commode Ikéa 99,00 dix
8 Lampe LG 15h00 100
7 la télé LG 350,00 4
6 Étagère Bosch 25.00 114

Oui, j'ai ajouté des rivets et des vis à la table. Ils ont un prix et une quantité, mais pas de marque.

5.2 Comparaison avec NULL

Vous souvenez-vous que parfois vous vous fâchiez en Java lorsque vous utilisiez null ? Que vous ne pouvez pas comparer des variables pouvant faire référence à des valeurs nulles via equals(). Exemple:

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

Vous ne le croirez pas, mais dans le langage SQL, vous attendez également les nuances lorsque vous travaillez avec des valeurs NULL. Et ça sonne quelque chose comme ça :rien n'est NUL.

Si vous essayez de filtrer tous les produits dont la marque est null:

SELECT * FROM product
WHERE brand = NULL

Vous obtiendrez une table vide :

identifiant nom marque prix compter

Mais si vous écrivez dans la requête que brand n'est pas égal à NULL, vous obtiendrez le même résultat :

SELECT * FROM product
WHERE brand != NULL

Vous obtiendrez à nouveau une table vide :

identifiant nom marque prix compter

Toute comparaison/action avec NULL renverra NULL:

Expression Résultat
marque = NULL NUL
marque != NULL NUL
NULL = NULL NUL
NULL != NULL NUL

Oui,même si vous comparez NULL avec NULL, alors la réponse sera NULL.

5.3 EST NULL et N'EST PAS NULL

Alors, comment vérifier qu'un champ (ou une colonne) a une valeur deNULL ? Et pour cela, SQL a une expression spéciale - IS NULL. Cela ressemble à ceci.

variable IS NULL

Si vous voulez vérifier si une colonne de votre tableau n'est pas égale à NULL, alors vous devez écrire IS NOT NULL:

variable IS NOT NULL

Écrivons une requête qui sélectionnera tous les produits de la table des produits dont la marque est égale à NULL. Une telle requête ressemblerait à ceci :

SELECT * FROM product
WHERE brand IS NULL

Et nous obtenons le résultat de requête suivant :

identifiant nom marque prix compter
14 Vis NUL 0,10 1000
15 Rivet NUL 0,01 1000

Maintenant, affichons tous les produits dont le prix est inférieur à 20 $ :

SELECT * FROM product
WHERE price  < 20

Et nous obtenons le résultat de requête suivant :

identifiant nom marque prix compter
2 Chaise Ikéa 5,00 45
8 Lampe LG 15h00 100
14 Vis NUL 0,10 1000
15 Rivet NUL 0,01 1000

Maintenant, nous spécifions que le prix doit être inférieur à 20 $ et que la marque ne l'est pas NULL.

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

Nous obtenons le résultat de requête suivant :

identifiant nom marque prix compter
2 Chaise Ikéa 5,00 45
8 Lampe LG 15h00 100

Super, les deux dernières lignes ont disparu. Voici comment cela fonctionne. Un peu inhabituel, mais il y a quand même une certaine logique là-dedans.