5.1 Önem eksikliği
SQL dili, Java dili gibi, bir değerin yokluğunu belirtmek için özel bir anahtar kelimeye sahiptir - bu boştur. Veya sık sık yazıldığı gibi - NULL
.
SQL'deki kullanım, NULL
Java'daki null kullanımına çok benzer. Java'da, alanları boş değerler içeren nesneler olabilir. SQL'de, satırları NULL değerler içeren tablolar olabilir.
Ürün tablomuza bilerek bir iki markasız ürün ekleyeyim. Ürünün markası bilinmiyorsa değer olacaktır NULL
.
Bu tür ürünleri görüntülemek için ürün tablomuzu id'ye göre tersten sıralayalım ve 10 adet kayıt alalım. İstek şöyle görünecektir:
SELECT * FROM product
ORDER BY id DESC
LIMIT 10
Aşağıdaki sorgu sonucunu alıyoruz:
İD | isim | marka | fiyat | saymak |
---|---|---|---|---|
15 | Perçin | HÜKÜMSÜZ | 0.01 | 1000 |
14 | Vida | HÜKÜMSÜZ | 0.10 | 1000 |
13 | Durmak | IKEA | 100.00 | 10 |
12 | saksı | akıllı çiçek | 99.00 | 9 |
on bir | Koltuk | bosch | 44.00 | 8 |
10 | Plaka | bosch | 199.00 | 10 |
9 | Şifonyer | IKEA | 99.00 | 10 |
8 | Lamba | LG | 15.00 | 100 |
7 | televizyon | LG | 350.00 | 4 |
6 | Raf | bosch | 25.00 | 114 |
Evet, masaya perçin ve vida ekledim. Fiyatı ve miktarı var ama markası yok.
5.2 NULL ile Karşılaştırma
Null kullanırken bazen Java'da sinirlendiğinizi hatırlıyor musunuz? Equals() aracılığıyla boş değerlere başvurabilen değişkenleri karşılaştıramazsınız. Örnek:
Product product1 = new Product();
Product product2 = null;
if (product2.equals(product1) { //an exception will be raised here
…
}
İnanmayacaksınız ama SQL dilinde NULL değerlerle çalışırken de nüansları bekliyorsunuz. Ve kulağa şöyle bir şey geliyor:hiçbir şey BOş değil.
Markası şu olan tüm ürünleri filtrelemeye çalışırsanız null
:
SELECT * FROM product
WHERE brand = NULL
Boş bir tablo alacaksınız:
İD | isim | marka | fiyat | saymak |
---|
Ancak sorguya markanın eşit olmadığını yazarsanız NULL
, aynı sonucu alırsınız:
SELECT * FROM product
WHERE brand != NULL
Yine boş bir tablo alacaksınız:
İD | isim | marka | fiyat | saymak |
---|
NULL ile herhangi bir karşılaştırma/işlem NULL döndürür:
İfade | Sonuç |
---|---|
marka = BOŞ | HÜKÜMSÜZ |
marka != BOŞ | HÜKÜMSÜZ |
BOŞ = BOŞ | HÜKÜMSÜZ |
BOŞ != BOŞ | HÜKÜMSÜZ |
Evet,NULL ile NULL'u karşılaştırsanız bile, cevap NULL olacaktır..
5.3 BOŞTUR ve BOŞ DEĞİLDİR
Peki, bazı alanların (veya bazı sütunların) değerinin olup olmadığını nasıl kontrol ederiz NULL
? Ve bunun için SQL'in özel bir ifadesi vardır - IS NULL
. Bu gibi görünüyor.
variable IS NULL
Tablonuzdaki bir sütunun eşit olup olmadığını kontrol etmek istiyorsanız NULL
, şunu yazmanız gerekir IS NOT NULL
:
variable IS NOT NULL
Ürün tablosundan markası eşit olan tüm ürünleri seçecek bir sorgu yazalım NULL
. Böyle bir istek şöyle görünür:
SELECT * FROM product
WHERE brand IS NULL
Ve aşağıdaki sorgu sonucunu alıyoruz:
İD | isim | marka | fiyat | saymak |
---|---|---|---|---|
14 | Vida | HÜKÜMSÜZ | 0.10 | 1000 |
15 | Perçin | HÜKÜMSÜZ | 0.01 | 1000 |
Şimdi fiyatı 20 doların altında olan tüm ürünleri gösterelim:
SELECT * FROM product
WHERE price < 20
Ve aşağıdaki sorgu sonucunu alıyoruz:
İD | isim | marka | fiyat | saymak |
---|---|---|---|---|
2 | Sandalye | IKEA | 5.00 | 45 |
8 | Lamba | LG | 15.00 | 100 |
14 | Vida | HÜKÜMSÜZ | 0.10 | 1000 |
15 | Perçin | HÜKÜMSÜZ | 0.01 | 1000 |
Şimdi fiyatın 20$'dan az olması gerektiğini ve markanın olmadığını belirtiyoruz NULL
.
SELECT * FROM product
WHERE price < 20 AND brand IS NOT NULL
Aşağıdaki sorgu sonucunu alıyoruz:
İD | isim | marka | fiyat | saymak |
---|---|---|---|---|
2 | Sandalye | IKEA | 5.00 | 45 |
8 | Lamba | LG | 15.00 | 100 |
Harika, son iki satır gitmiş. İşte nasıl çalıştığı. Biraz alışılmadık ama yine de bunda belli bir mantık var.