CodeGym /Kursy /SQL SELF /Sprawdzanie wartości NULL: IS NULL i IS NOT NULL

Sprawdzanie wartości NULL: IS NULL i IS NOT NULL

SQL SELF
Poziom 9 , Lekcja 1
Dostępny

Dzisiaj lecimy dalej z NULL — niewidzialnym bohaterem baz danych. Jeśli dalej myślisz, że NULL to po prostu "nic", to masz rację, ale nie do końca. W tym wykładzie nauczysz się sprawdzać, czy w twoich danych jest NULL i co z tym zrobić. No to co, gotowy tropić brakujące wartości?

Zacznijmy od prostego przykładu — wyobraź sobie, że pracujesz z bazą sklepu internetowego. Masz tabelę zamówień, gdzie dla niektórych zamówień nie dodano komentarza, a w innych — są jakieś uwagi. Jeśli chcesz znaleźć wszystkie zamówienia z pustymi uwagami i użyjesz zwykłych porównań =, <>, możesz się zdziwić... Dlaczego? Bo NULL to specjalny przypadek!

W SQL sprawdzanie obecności lub braku NULL robimy za pomocą IS NULL i IS NOT NULL. Te operatory pomagają nam ogarnąć NULL i wyciągnąć to, co trzeba.

Sprawdzanie wartości z IS NULL

IS NULL używasz, żeby sprawdzić, czy kolumna albo wyrażenie ma wartość NULL.

SELECT *
FROM orders
WHERE comment IS NULL;

To zapytanie zwróci wszystkie wiersze, gdzie w kolumnie comment jest NULL. Przydatne, jeśli chcesz znaleźć zamówienia bez uwag.

Przykład tabeli orders:

id customer_name total_amount comment
1 Otto Art 1500 "Pilna dostawa"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

Zapytanie:

SELECT id, customer_name
FROM orders
WHERE comment IS NULL;

Wynik:

id customer_name
2 Maria Chi
4 Anna Song

Zwróć uwagę, że wiersze z pustym stringiem '' nie są tu uwzględnione, bo '' to nie NULL.

Sprawdzanie wartości z IS NOT NULL

IS NOT NULL działa odwrotnie — sprawdza, czy wartość nie jest NULL. Na przykład, jeśli chcesz dostać wszystkie zamówienia z jakimś komentarzem:

SELECT *
FROM orders
WHERE comment IS NOT NULL;

To zapytanie zwróci tylko te wiersze, gdzie w kolumnie comment coś jest (w tym puste stringi '').

Przykład

Tabela orders zostaje taka sama.

id customer_name total_amount comment
1 Otto Art 1500 "Pilna dostawa"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

Odpalamy zapytanie:

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

Wynik:

id customer_name comment
1 Otto Art "Pilna dostawa"
3 Alex Lin ''

Zwróć uwagę, że wiersz z pustym stringiem '' jest uwzględniony. SQL traktuje to jako "niepuste".

Kiedy używać IS NULL i IS NOT NULL?

Oto kilka sytuacji:

  1. Filtrowanie danych: chcesz wykluczyć niepełne rekordy, gdzie czegoś brakuje.
  2. Obsługa błędów: czasem NULL może oznaczać błąd w danych i musisz wyłapać takie wiersze.
  3. Analiza danych: liczenie rekordów z brakującymi wartościami pomaga ogarnąć jakość danych.

Praktyczne zastosowanie

Spróbujmy kilku praktycznych zadań:

Zadanie 1: Wybierz studentów bez podanej daty urodzenia

Załóżmy, że masz tabelę students:

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

Zapytanie:

SELECT name
FROM students
WHERE birth_date IS NULL;

Wynik:

name
Maria Chi
Anna Song

To zapytanie jest spoko, żeby znaleźć studentów, którym trzeba dopisać datę urodzenia.

Zadanie 2: Wybierz zamówienia z komentarzami

id customer_name total_amount comment
1 Otto Art 1500 "Pilna dostawa"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

Dla tabeli orders możemy znaleźć zamówienia z uzupełnionymi komentarzami:

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

Wynik:

customer_name comment
Otto Art "Pilna dostawa"
Alex Lin ''

Porównanie ze zwykłymi operatorami

Teraz zróbmy krok w bok i spróbujmy wykonać "błędne" zapytanie do sprawdzenia NULL:

SELECT *
FROM orders
WHERE comment = NULL;

Zdziwiony? Zapytanie nie zwróci żadnych wierszy, nawet tych, gdzie comment to ewidentnie NULL. To dlatego, że NULL nie porównujesz zwykłymi operatorami. Do takich porównań musisz użyć IS NULL.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION