CodeGym /Kurslar /SQL SELF /NULL dəyərlərin yoxlanılması: IS NULL və IS NOT NULL

NULL dəyərlərin yoxlanılması: IS NULL və IS NOT NULL

SQL SELF
Səviyyə , Dərs
Mövcuddur

Bu gün NULL ilə işləməyi öyrənməyə davam edirik — verilənlər bazalarının görünməz qəhrəmanı. Əgər hələ də düşünürsən ki, NULL sadəcə "heç nə"dir, haqlısan, amma tam deyil. Bu dərsdə öyrənəcəyik ki, necə yoxlayaq, məlumatlarımızda NULL var, ya yox və bununla nə etmək lazımdır. Hazırsan? Gəlin, dəyərlərin yoxluğunu izləyək!

Gəlin sadədən başlayaq — təsəvvür et, sən online mağazanın verilənlər bazası ilə işləyirsən. Səndə sifarişlər cədvəli var, bəzi sifarişlərdə şərh əlavə olunmayıb, digərlərində isə qeyd var. Əgər sən bütün boş şərhli sifarişləri tapmaq istəsən və adi müqayisə =, <> istifadə etsən, təəccüblənəcəksən... Niyə? Çünki NULL — xüsusi haldır!

SQL-də NULL olub-olmadığını yoxlamaq üçün IS NULLIS NOT NULL istifadə olunur. Bu operatorlar bizə NULL ilə baş çıxarmağa və lazım olan məlumatı almağa kömək edir.

IS NULL ilə dəyərlərin yoxlanılması

IS NULL sütunun və ya ifadənin NULL olub olmadığını yoxlamaq üçündür.

SELECT *
FROM orders
WHERE comment IS NULL;

Bu sorğu comment sütununda NULL olan bütün sətrləri qaytaracaq. Bu, şərhi olmayan sifarişləri tapmaq üçün rahatdır.

Budur orders cədvəlinin nümunəsi:

id customer_name total_amount comment
1 Otto Art 1500 "Təcili çatdırılma"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

Sorğu:

SELECT id, customer_name
FROM orders
WHERE comment IS NULL;

Nəticə:

id customer_name
2 Maria Chi
4 Anna Song

Fikir ver, boş sətir '' olan sətrlər bura daxil deyil, çünki ''NULL deyil.

IS NOT NULL ilə dəyərlərin yoxlanılması

IS NOT NULL əksinə işləyir; yoxlayır ki, dəyər NULL deyil. Məsələn, bütün şərhi olan sifarişləri tapmaq istəsən:

SELECT *
FROM orders
WHERE comment IS NOT NULL;

Bu sorğu yalnız comment sütununda məlumat olan sətrləri qaytaracaq (boş sətir '' daxil olmaqla).

Nümunə

orders cədvəli eyni qalır.

id customer_name total_amount comment
1 Otto Art 1500 "Təcili çatdırılma"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

Gəlin sorğunu icra edək:

SELECT id, customer_name, comment
FROM orders
WHERE comment IS NOT NULL;

Nəticə:

id customer_name comment
1 Otto Art "Təcili çatdırılma"
3 Alex Lin ''

Diqqət et, boş sətir '' olan sətr də daxil edilib. SQL bunu "boş olmayan" kimi sayır.

IS NULLIS NOT NULL nə vaxt istifadə olunur?

Bir neçə ssenari:

  1. Məlumatların filtrasiyası: sən natamam sətrləri, yəni dəyəri olmayanları çıxarmaq istəyirsən.
  2. Xətaların işlənməsi: bəzən NULL məlumat daxilində səhv deməkdir və belə sətrləri ayırmaq lazımdır.
  3. Məlumatların analizi: itkin dəyərlərin sayını hesablamaq, məlumat keyfiyyətini başa düşməyə kömək edir.

Praktiki tətbiq

Gəlin bir neçə praktiki tapşırıq edək:

Tapşırıq 1: Doğum tarixi göstərilməyən tələbələri seçmək

Tutaq ki, səndə students cədvəli var:

id name birth_date
1 Otto Art 2000-05-10
2 Maria Chi NULL
3 Alex Lin 1998-12-30
4 Anna Song NULL

Sorğu:

SELECT name
FROM students
WHERE birth_date IS NULL;

Nəticə:

name
Maria Chi
Anna Song

Bu sorğu, doğum tarixi dəqiqləşdirilməli olan tələbələri tapmaq üçün faydalıdır.

Tapşırıq 2: Şərhi olan sifarişləri seçmək

id customer_name total_amount comment
1 Otto Art 1500 "Təcili çatdırılma"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

orders cədvəli üçün doldurulmuş şərhli sifarişləri tapmaq olar:

SELECT customer_name, comment
FROM orders
WHERE comment IS NOT NULL;

Nəticə:

customer_name comment
Otto Art "Təcili çatdırılma"
Alex Lin ''

Adi operatorlarla müqayisə

İndi bir az kənara çıxaq və NULL yoxlamaq üçün "səhv" sorğu edək:

SELECT *
FROM orders
WHERE comment = NULL;

Təəccübləndin? Sorğu heç bir sətir qaytarmayacaq, hətta comment açıq şəkildə NULL olanları da. Çünki NULL adi operatorlarla müqayisə edilə bilməz. Belə müqayisələr üçün mütləq IS NULL istifadə etməliyik.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION