5.1 A jelentőség hiánya

Az SQL nyelvnek, akárcsak a Java nyelvnek, van egy speciális kulcsszava az érték hiányának jelzésére – ez null. Vagy ahogy szokták írni - NULL.

Az NULLSQL használata nagyon hasonló a Java null használatához. Javaban lehetnek olyan objektumok, amelyek mezői null értékeket tartalmaznak. Az SQL-ben lehetnek olyan táblák, amelyek sorai NULL értékeket tartalmaznak.

Hadd vegyek fel szándékosan néhány márka nélküli terméket a terméktáblázatunkba. Ha a termék márkája ismeretlen, akkor az értéke NULL.

Az ilyen termékek megjelenítéséhez rendezzük a terméktáblázatunkat id szerint fordított sorrendben, és vegyünk 10 rekordot. A kérés így fog kinézni:

SELECT * FROM product
ORDER BY id DESC
LIMIT 10

A következő lekérdezési eredményt kapjuk:

id név márka ár számol
15 Szegecs NULLA 0,01 1000
14 Csavar NULLA 0.10 1000
13 Állvány IKEA 100.00 10
12 virágcserép Okosvirág 99.00 9
tizenegy Fotel Bosch 44.00 8
10 Lemez Bosch 199,00 10
9 Öltözködőasztal IKEA 99.00 10
8 Lámpa LG 15.00 100
7 tévé LG 350,00 4
6 Polc Bosch 25.00 114

Igen, szegecseket és csavarokat adtam az asztalhoz. Áruk és mennyiségük van, de márka nincs.

5.2 Összehasonlítás a NULL-lal

Emlékszel arra, hogy néha megőrültél a Java-ban, amikor nullát használsz? Hogy nem lehet összehasonlítani azokat a változókat, amelyek null értékekre utalhatnak az equals() segítségével. Példa:

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

Nem fogod elhinni, de az SQL nyelvben a NULL értékekkel való munka során is várod az árnyalatokat. És valahogy így hangzik:semmi sem NULL.

Ha megpróbálja kiszűrni az összes olyan terméket, amelynek márkája null:

SELECT * FROM product
WHERE brand = NULL

Kapsz egy üres asztalt:

id név márka ár számol

De ha azt írja be a lekérdezésbe, hogy a márka nem egyenlő a -val NULL, akkor ugyanazt az eredményt kapja:

SELECT * FROM product
WHERE brand != NULL

Ismét kapsz egy üres asztalt:

id név márka ár számol

A NULL-lal végzett bármilyen összehasonlítás/művelet NULL-t ad vissza:

Kifejezés Eredmény
márka = NULL NULLA
márka != NULL NULLA
NULL = NULL NULLA
NULL != NULL NULLA

Igen,Még ha a NULL-t összehasonlítja a NULL-lal, akkor a válasz NULL lesz.

5.3 NULL és NEM NULL

Tehát hogyan ellenőrizhetjük, hogy bizonyos mezők (vagy oszlopok) értéke NULL? És erre az SQL-nek van egy speciális kifejezése - IS NULL. Ez így néz ki.

variable IS NULL

Ha ellenőrizni szeretné, hogy a táblázat egy oszlopa nem egyenlő-e a -val NULL, akkor a következőt kell írnia IS NOT NULL:

variable IS NOT NULL

Írjunk egy lekérdezést, amely kiválasztja a terméktáblázatból az összes olyan terméket, amelynek márkája egyenlő a -val NULL. Egy ilyen kérés így nézne ki:

SELECT * FROM product
WHERE brand IS NULL

És a következő lekérdezési eredményt kapjuk:

id név márka ár számol
14 Csavar NULLA 0.10 1000
15 Szegecs NULLA 0,01 1000

Most jelenítsük meg az összes olyan terméket, amelynek ára kevesebb, mint 20 USD:

SELECT * FROM product
WHERE price  < 20

És a következő lekérdezési eredményt kapjuk:

id név márka ár számol
2 Szék IKEA 5.00 45
8 Lámpa LG 15.00 100
14 Csavar NULLA 0.10 1000
15 Szegecs NULLA 0,01 1000

Most megadjuk, hogy az árnak kevesebbnek kell lennie, mint 20 USD, és a márka nem lehet NULL.

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

A következő lekérdezési eredményt kapjuk:

id név márka ár számol
2 Szék IKEA 5.00 45
8 Lámpa LG 15.00 100

Remek, az utolsó két sor eltűnt. Íme, hogyan működik. Kicsit szokatlan, de mégis van ebben egy bizonyos logika.