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, NULLJava'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.