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