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 NULL
sa 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.