NULL ilə işləmək ən müxtəlif situasiyalarda qarşımıza çıxır: hesabatlarda olmayan məlumatların işlənməsindən tutmuş filtrasiya və sıralamaya qədər. Əgər cədvəldə dəyərin olmaması ilə 9999 kimi qəribə bir rəqəm arasında seçim olsaydı, çoxu NULL-u seçərdi — bəli, razıyam, bu ən rahat variant deyil, amma ən azı dürüstdür. Gəlin bir neçə tipik case-ə baxaq.
Nümunə: Qiyməti olmayan məhsulların sıralanması
Təsəvvür elə ki, biz onlayn mağaza idarə edirik və məhsullar üçün belə bir cədvəlimiz var:
| product_id | name | price |
|---|---|---|
| 1 | Telefon | 45000 |
| 2 | Noutbuk | NULL |
| 3 | Kamera | 25000 |
| 4 | Ağıllı saat | NULL |
Biz məhsulları qiymətə görə sıralamaq istəyirik, elə ki, qiyməti olmayanlar (NULL) axırda getsin.
SELECT product_id, name, price
FROM products
ORDER BY price ASC NULLS LAST;
Nəticə:
| product_id | name | price |
|---|---|---|
| 3 | Kamera | 25000 |
| 1 | Telefon | 45000 |
| 2 | Noutbuk | NULL |
| 4 | Ağıllı saat | NULL |
Burada əsas məqam NULLS LAST açarıdır. Default olaraq PostgreSQL ASC üçün NULL dəyərləri əvvələ qoyur, amma bu parametr ilə onları sona atırıq.
Nümunə: Doğum tarixi olmayan tələbələrin filtrasiyası
Bizdə tələbələrin cədvəli var və yalnız doğum tarixi göstərilməyənləri seçmək istəyirik.
| student_id | name | birth_date |
|---|---|---|
| 1 | Otto Art | 2000-01-15 |
| 2 | Anna Song | NULL |
| 3 | Alex Lin | 1999-05-10 |
| 4 | Maria Chi | NULL |
Sorgu:
SELECT student_id, name
FROM students
WHERE birth_date IS NULL;
Nəticə:
| student_id | name |
|---|---|
| 2 | Anna Song |
| 4 | Maria Chi |
Biz uğurla doğum tarixi məlum olmayan tələbələrin məlumatını çıxartdıq.
NULL ilə işləmək üçün funksiyaların istifadəsi nümunələri
Nümunə: Mümkün NULL ilə yekun məbləğin hesablanması
Sifarişlər cədvəlində sifariş məbləğləri saxlanılır. Amma bəzən məlumatlar doldurulmur və belə hallarda məbləğ 0 kimi götürülməlidir.
Məlumat nümunəsi:
| order_id | customer_name | order_amount |
|---|---|---|
| 1 | Alex | 1200 |
| 2 | Maria | 2500 |
| 3 | Max | NULL |
| 4 | Xena | 3100 |
Sorgu:
SELECT SUM(COALESCE(order_amount, 0)) AS total_amount
FROM orders;
Nəticə:
| total_amount |
|---|
| 6800 |
Burada COALESCE(order_amount, 0) istifadə edirik ki, NULL 0 ilə əvəz olunsun və toplama düzgün getsin. Bu, səhvlərin və yanlış hesablamaların qarşısını alır.
Nümunə: NULL əvəzinə mətn çıxarmaq
| customer_name | order_amount |
|---|---|
| Alex | 1200 |
| Maria | 2500 |
| Max | NULL |
| Xena | 3100 |
Hesabatda bütün boş dəyərlər üçün NULL əvəzinə "Göstərilməyib" mətni çıxarmaq lazımdır.
SELECT
customer_name,
COALESCE(order_amount::TEXT, 'Göstərilməyib') AS order_status
FROM orders;
Nəticə:
| customer_name | order_status |
|---|---|
| Alex | 1200 |
| Maria | 2500 |
| Max | Göstərilməyib |
| Xena | 3100 |
COALESCE() ilə istədiyimiz mətni çıxara bilirik, əgər dəyər NULL olsa.
NULL ilə işləməyin mürəkkəb ssenariləri
| customer_name | order_amount |
|---|---|
| Alex | 1200 |
| Maria | 2500 |
| Max | NULL |
| Xena | 3100 |
Bizim tapşırığımız — sifarişləri elə sıralamaqdır ki, məbləği olmayanlar əvvəldə, sonra isə ən böyükdən kiçiyə doğru getsin.
SELECT customer_name, order_amount
FROM orders
ORDER BY order_amount DESC NULLS FIRST;
Nəticə:
| customer_name | order_amount |
|---|---|
| Max | NULL |
| Xena | 3100 |
| Maria | 2500 |
| Alex | 1200 |
Burada NULLS FIRST istifadə etdik ki, NULL dəyərlər hamıdan əvvəl getsin.
Nümunə: NULL dəyərlərin əvəzlənməsi ilə filtrasiya
| student_id | name | birth_date |
|---|---|---|
| 1 | Otto Art | 2000-01-15 |
| 2 | Anna Song | NULL |
| 3 | Alex Lin | 1999-05-10 |
| 4 | Maria Chi | NULL |
Bəzi hesabatlarda yalnız dəyəri olan sətirləri çıxarmaq və ya NULL olarsa "Naməlum" ilə əvəzləmək lazımdır.
SELECT
student_id,
name,
COALESCE(birth_date::TEXT, 'Naməlum') AS birth_date_info
FROM students;
Nəticə:
| student_id | name | birth_date_info |
|---|---|---|
| 1 | Otto Art | 2000-01-15 |
| 2 | Anna Song | Naməlum |
| 3 | Alex Lin | 1999-05-10 |
| 4 | Maria Chi | Naməlum |
Bu xüsusilə hesabatlarda faydalıdır, çünki məlumatın olmadığını göstərmək vacibdir.
Praktik tövsiyələr
NULL ilə işləmək xüsusi diqqət tələb edir. Budur bir neçə faydalı məsləhət:
IS NULLvəCOALESCE()istifadə et yoxlama və əvəzləmə üçün.- Unutma ki, aqreqat funksiyalar
NULLdəyərləri saymır, yalnızCOUNT(*)istisnadır. - Sıralama üçün
NULLS FIRSTvəNULLS LASTaçarlarını yadında saxla. - Hesabatlarda həmişə göstər ki,
NULLilə necə işləyirsən, həmkarlarınla anlaşılmazlıq olmasın.
Bu biliklər sənə təkcə düzgün sorğular yazmağa yox, həm də müsahibədə yaxşı təsir bağışlamağa kömək edəcək. Axı real məlumatlarla işləməyi bacarmaq, sadəcə nəzəriyyədən daha dəyərlidir!
GO TO FULL VERSION