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