5.1 Kakulangan ng kahalagahan

Ang wikang SQL, tulad ng wikang Java, ay may espesyal na keyword upang tukuyin ang kawalan ng halaga - ito ay null. O gaya ng madalas na nakasulat - NULL.

Ang paggamit NULLsa SQL ay halos kapareho sa paggamit ng null sa Java. Sa Java, maaaring may mga bagay na ang mga patlang ay naglalaman ng mga null na halaga. Sa SQL, maaaring mayroong mga talahanayan na ang mga hilera ay naglalaman ng mga NULL na halaga.

Hayaan akong magdagdag ng ilang walang brand na produkto sa aming talahanayan ng produkto nang kusa. Kung ang tatak ng produkto ay hindi alam, ang halaga ay magiging NULL.

Upang ipakita ang mga naturang produkto, pag-uri-uriin natin ang aming talahanayan ng produkto ayon sa id sa reverse order at kumuha ng 10 record. Ang kahilingan ay magiging ganito:

SELECT * FROM product
ORDER BY id DESC
LIMIT 10

Nakukuha namin ang sumusunod na resulta ng query:

id pangalan tatak presyo bilangin
15 Rivet WALA 0.01 1000
14 tornilyo WALA 0.10 1000
13 Tumayo IKEA 100.00 10
12 palayok ng bulaklak Smartflower 99.00 9
labing-isa Silyon Bosch 44.00 8
10 Plato Bosch 199.00 10
9 Dresser IKEA 99.00 10
8 lampara LG 15.00 100
7 TV LG 350.00 4
6 istante Bosch 25.00 114

Oo, nagdagdag ako ng mga rivet at turnilyo sa mesa. Mayroon silang presyo at dami, ngunit walang tatak.

5.2 Paghahambing sa NULL

Naaalala mo ba na minsan ay nagagalit ka sa Java kapag gumagamit ng null? Na hindi mo maihahambing ang mga variable na maaaring sumangguni sa mga null na halaga sa pamamagitan ng equals(). Halimbawa:

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

Hindi ka maniniwala, ngunit sa wikang SQL naghihintay ka rin para sa mga nuances kapag nagtatrabaho sa mga halaga ng NULL. At parang ganito:walang NULL.

Kung susubukan mong i-filter ang lahat ng produkto na ang tatak ay null:

SELECT * FROM product
WHERE brand = NULL

Makakakuha ka ng isang walang laman na mesa:

id pangalan tatak presyo bilangin

Ngunit kung isusulat mo sa query na ang tatak ay hindi katumbas ng NULL, makakakuha ka ng parehong resulta:

SELECT * FROM product
WHERE brand != NULL

Makakakuha ka muli ng isang walang laman na mesa:

id pangalan tatak presyo bilangin

Anumang paghahambing/aksyon sa NULL ay magbabalik ng NULL:

Pagpapahayag Resulta
tatak = NULL WALA
tatak != NULL WALA
NULL = NULL WALA
NULL != NULL WALA

Oo,kahit na ikumpara mo ang NULL sa NULL, ang sagot ay magiging NULL.

5.3 AY NULL at HINDI NULL

Kaya paano natin susuriin na ang ilang field (o ilang column) ay may halaga na NULL? At para dito, may espesyal na expression ang SQL - IS NULL. Parang ganito.

variable IS NULL

Kung gusto mong suriin kung ang isang column ng iyong talahanayan ay hindi katumbas ng NULL, kailangan mong isulat ang IS NOT NULL:

variable IS NOT NULL

Sumulat tayo ng query na pipili ng lahat ng produkto mula sa talahanayan ng produkto na ang tatak ay katumbas ng NULL. Ang ganitong kahilingan ay magiging ganito:

SELECT * FROM product
WHERE brand IS NULL

At makuha namin ang sumusunod na resulta ng query:

id pangalan tatak presyo bilangin
14 tornilyo WALA 0.10 1000
15 Rivet WALA 0.01 1000

Ngayon ipakita natin ang lahat ng mga produkto na ang presyo ay mas mababa sa $20:

SELECT * FROM product
WHERE price  < 20

At makuha namin ang sumusunod na resulta ng query:

id pangalan tatak presyo bilangin
2 upuan IKEA 5.00 45
8 lampara LG 15.00 100
14 tornilyo WALA 0.10 1000
15 Rivet WALA 0.01 1000

Ngayon ay tinukoy namin na ang presyo ay dapat na mas mababa sa $20 at ang tatak ay hindi NULL.

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

Nakukuha namin ang sumusunod na resulta ng query:

id pangalan tatak presyo bilangin
2 upuan IKEA 5.00 45
8 lampara LG 15.00 100

Mahusay, wala na ang huling dalawang linya. Narito kung paano ito gumagana. Medyo hindi karaniwan, ngunit mayroon pa ring tiyak na lohika dito.