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 NULL
en 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.
GO TO FULL VERSION