Prázdna hodnota (NULL)

Tabuľky majú vo väčšine množstvo stĺpcov a nie každý záznam musí mať hodnotu vyplnenú vo všetkých stĺpcoch. Predstavme si, že by sme v našej tabuľke mali stĺpec, do ktorého by sme vkladali titul používateľa. Nie každý používateľ však musí mať titul, takže by to bola typická ukážka stĺpca, ktorý môže, ale nemusí nutne obsahovať hodnotu.

 

To, či stĺpec musí obsahovať nejakú hodnotu, určuje vlastnosť NULL alebo NOT NULL. Ak je to stĺpec, ktorý nemusí obsahovať hodnotu, jeho vlastnosť je NULL. To znamená, že ak nezadáme hodnotu v danom stĺpci (pri INSERT INTO nezadefinujeme túto hodnotu), na danom mieste v tabuľke bude uložená hodnota NULL. Slovo NULL označuje nič – prázdno (nulu), uložené na danom riadku v danom stĺpci tabuľky. Ak je totižto stĺpec NOT NULL a my mu pri vkladaní dát (insert) nezadáme hodnotu, automaticky tam vloží hodnotu podľa dátového typu stĺpca. Ak je to číselný stĺpec, tak tam vloží číslo 0 a ak je to stringový typ, tak tam bude uložený prázdny string.

 

Možno ste sa spýtali, že na čo nám je taká hodnota NULL, keď prázdno (žiadnu hodnotu) vieme vyjadriť napríklad číslom 0 alebo prázdnym stringom (''''). Je ale dobré používať túto špeciálnu hodnotu ako ukazovateľ pre žiadnu hodnotu, pretože je to univerzálna hodnota pre všetky druhy stĺpcov. Kde je NULL vieme, že to je prázdno, nemusíme hľadať nuly alebo prázdne stringy a podobne. Túto vlastnosť totižto vieme použiť veľmi jednoducho v klauzule WHERE, o chvíľu si to ukážeme.

 

Ak sa prekliknete na sekciu štruktúry tabuľky (structure), tak v popise tabuľky uvidíte stĺpec s názvom Null. Tento stĺpec značí, či dané stĺpce môžu alebo nemôžu obsahovať hodnotu NULL. V našom prípade máme pri stĺpcoch user_name a user_surname napísané Yes, čo značí, že tieto stĺpce môžu obsahovať aj prázdnu hodnotu (NULL). Pri stĺpci id je No, to značí, že tento stĺpec je NOT NULL, takže nemôže obsahovať túto hodnotu.

 

To, či je stĺpec NULL alebo nie určujeme pri vytváraní tabuľky, kde špecifikujeme vlastnosti stĺpcov. My sme pri vytváraní špecifikovali len názov a typ (prípadne veľkosť typu) stĺpca, túto vlastnosť sme nedefinovali, preto sa všetky stĺpce automaticky nastavili na NULL. Ak by sme chceli nejaký stĺpec označiť ako NOT NULL, tak by sme len za určenie dátového typu napísali NOT NULL alebo NULL. Spravidla by stĺpce, ktoré chceme, aby boli vyplnené, mali byť NOT NULL. V našom prípade by to malo byť aj id, aj meno a aj priezvisko, pretože každý používateľ by mal mať poradové číslo a aj meno a priezvisko, aby sme ho vedeli identifikovať. Stĺpec id sa nám automaticky nastavil na NOT NULL počas toho, ako sme ho nastavili na unique a auto increment.

 

Poďme si to teda vyskúšať, aby sme pochopili, o čom je reč. Skúsme pri danom nastavení tabuľky (user_name a user_surname je NULL) vložiť iba priezvisko, napríklad takto:


INSERT INTO users (user_surname) VALUES ('Mak');


Prepnite sa na prehľad tabuľky (browse) a pozrite si posledný záznam. Stĺpec id je vzhľadom k unique a auto_incerement vybavený. My sme zadali iba priezvisko, tým pádom sa nám do stĺpca user_name, ktorý je NULL, takže môže obsahovať túto hodnotu, vložila práve táto hodnota, indikujúca na danom prázdnu hodnotu.

 

Ako sme si povedali, výhoda tejto vlastnosti je, že ju môžeme použiť v klauzule WHERE. Ak by sme chceli v tomto prípade napríklad načítať iba používateľov, ktorí majú vyplnené krstné meno (stĺpec user_name), stačilo by za slovom WHERE napísať vzťah IS NOT NULL (nie je NULL). To by nám vypísalo všetkých používateľov, ktorí majú vyplnené meno. V opačnom prípade, ak by sme z nejakého dôvodu chceli dostať iba zoznam používateľov, ktorí meno nemajú vyplnené, zavolali by sme klauzulu WHERE IS NULL. Vyskúšajte si obidva tieto prípady, query by mali vyzerať takto:


SELECT * FROM users WHERE user_name IS NOT NULL;

SELECT * FROM users WHERE user_name IS NULL


Prvý príkaz by vám mam vypísať prvých 6 záznamov s vyplneným menom a druhý iba posledný záznam bez mena. Toto je hlaván výhoda hodnoty NULL, ktorý je určená na jednoznačné určenie prázdnej (nezadanej) hodnoty. Poďme si ale ešte vyskúšať definovanie tejto vlastnosti pri tvorbe stĺpca. V našej tabuľke si upravíme stĺpec (ALTER TABLE – CHANGE) user_surname tak, aby bol NOT NULL. Spravíme to podobne, ako keď sme menili stĺpec id pomocou príkazu CHANGE, query by mala vyzerať takto:


ALTER TABLE users CHANGE user_surname user_surname VARCHAR(50) NOT NULL;


Po vykonaní tohto príkazu si môžete v štruktúre tabuľky (structure) skontrolovať, že sa nám tento stĺpec skutočne nastavil ako not null (hodnota No v stĺpci NULL v popise tabuľky). Čo to zmenilo na veci? Skúsme si vložiť pre zmenu záznam len s vyplneným menom, bez priezviska:


INSERT INTO users (user_name) VALUES ('Jozef');


Pozrite sa na prehľad tabuľky (browse), v stĺpci user_surname posledného záznamu sa nenachádza slovo NULL, pretože stĺpec nemôže obsahovať túto hodnotu (je NOT NULL). Namiesto toho je tam nič, ale v tomto prípade je toto nič prázdny string – prázdne úvodzovky. Čo to mení na veci? Ak by sme v tomto prípade chceli získať používateľov, ktorí nemajú vyplnené priezvisko, podmienka IS NOT NULL by už nefungovala, dostali by sme aj tak všetkých používateľov, lebo prázdny string sa neberie ako nič, ako NULL.

 

Tak ako aj iné vlastnosti stĺpcov, aj táto by sa mala premyslieť pred vytváraním tabuľky. Administrátor databázy má vedieť, ktoré stĺpce v jeho tabuľke by mali určite obsahovať nejakú hodnotu a ktoré z nich nemusia. Tie, ktoré nemusia, by mal mať nastavené ako NULL a táto hodnota by v prípade žiadnej hodnoty mala byť na danom mieste vyplnená. Následne si vie ľahko pomocou podmienka IS NULL/IS NOT NULL vyberať záznamy, ktoré danú hodnotu nemajú alebo majú vyplnenú.

Máte nejakú otázku alebo Vám niečo nie je jasné? Napíšte nám na info@zacni-programovat.sk a poradíme!

Ťažko sa vám učí samému?

Máte problémy s niektorými časťami alebo sa neviete učiť sám? Využite našu možnosť individuálnej asistencie:

  • samostatný prístup
  • vysvetlenie nejasností prebraného učiva
  • úlohy a cvičenia navyše
  • všetko z pohodlia domova cez mail a skype

Pre viac info kliknite tu

Kľúčové slová prednášky

sql nullsql prazdna hodnotanullnot nullis not nullis nullsql nulova hodnotaprazdna hodnotanevyplnena hodnotachangealter table

IT ftip

Prečo je Bill Gates tak veľmi bohatý? Pretože za chyby sa platí...