CodeGym /Kursy /SQL SELF /Poznajemy NULL. Różnica między NULL a 0

Poznajemy NULL. Różnica między NULL a 0

SQL SELF
Poziom 9 , Lekcja 0
Dostępny

Przyszedł czas, żeby pogadać trochę więcej o NULL. I to wcale nie jest pusta gadka, nawet jeśli nasz bohater wygląda... nijak. Gdyby tabela była domem, NULL byłby jego duchem — cichym, tajemniczym i nieprzewidywalnym. Niby jest, ale na pytania nie odpowiada, w obliczeniach nie bierze udziału, porównań unika. To nie jest po prostu "pusto" — to "nic nie wiadomo".

W świecie SQL NULL to nie zero, nie pusty string i nie "brak danych" w zwykłym sensie. To specjalny znak nieznanego, z którym trzeba obchodzić się ostrożnie. Dziś ogarniemy, czemu NULL to nie tylko dziwny gość, ale ważny uczestnik każdej bazy danych. Bo on dosłownie oznacza "wartość nieznana albo nieokreślona".

Czym NULL różni się od pustego stringa albo liczby 0?

Wielu początkujących myli NULL z innymi wartościami, jak pusty string '' albo liczba 0. Zobaczmy kluczowe różnice:

Pojęcie Wartość
NULL Całkowity brak wartości. To nie jest po prostu puste pudełko, to brak pudełka
Pusty string To string, który po prostu nie ma znaków. Na przykład: ''
Liczba 0 Wartość reprezentująca konkretną liczbę równą zero

Przykład z życia: wyobraź sobie, że masz tabelę pracowników i trzymasz tam ich pensje. Jeśli pensja to 0, znaczy, że ktoś nie dostał kasy. Ale jeśli pensja to NULL, to po prostu nie wiesz, ile zarabia (albo jeszcze nie ustalono).

Jak interpretować NULL

Teraz, kiedy już trochę wiemy, czym jest NULL, zobaczmy, jak SQL z nim działa. Najważniejsze o NULL można ująć jednym zdaniem: NULL nie jest równy niczemu i nie jest nierówny niczemu, nawet samemu sobie.

SELECT NULL = NULL;  -- Wynik: FALSE

Niespodzianka! Dlaczego tak? Bo NULL to nieznane. Jeśli masz dwie nieznane wartości, nie możesz powiedzieć, że są równe, ani że są różne.

Zobaczmy kilka przykładów:

Przykłady operacji z NULL

SELECT NULL + 1;      -- Wynik: NULL
SELECT NULL * 100;    -- Wynik: NULL
SELECT NULL = 0;      -- Wynik: FALSE
SELECT NULL <> 0;     -- Wynik: FALSE

NULL przy dodawaniu, mnożeniu czy jakimkolwiek innym obliczeniu zawsze zwraca NULL. Tutaj NULL działa zupełnie inaczej niż 0 w matematyce. To jakby wrzucać coś w pustkę i ta pustka wszystko pochłania.

Praktyczne przykłady

Wyobraźmy sobie tabelę students z informacjami o studentach:

id name birth_date grade
1 Alice 2000-01-01 85
2 Bob NULL 90
3 Charlie 1999-05-22 NULL
4 Diana NULL NULL

Przykład 1: Wpływ NULL w warunkach

Jeśli spróbujemy znaleźć wszystkich studentów bez daty urodzenia, dając warunek WHERE birth_date = NULL:

SELECT *
FROM students 
WHERE birth_date = NULL;

Nie dostaniemy żadnych wyników, bo NULL = NULL zwraca FALSE. Żeby sprawdzić NULL, trzeba użyć IS NULL:

SELECT * FROM students WHERE birth_date IS NULL;

Wynik:

id name birth_date grade
2 Bob NULL 90
4 Diana NULL NULL

Przykład 2: Wpływ NULL w obliczeniach

id name birth_date grade
1 Alice 2000-01-01 85
2 Bob NULL 90
3 Charlie 1999-05-22 NULL
4 Diana NULL NULL

Jeśli spróbujemy policzyć średnią ocenę wszystkich studentów:

SELECT AVG(grade) FROM students;

Wynik będzie: 87.5. Dlaczego? Bo NULL jest ignorowany w funkcjach agregujących, takich jak AVG, SUM, MIN, MAX. Ale uważaj! Jeśli musisz brać pod uwagę wiersze z NULL, to wymaga dodatkowych trików.

Bardziej szczegółowo ogarniemy pracę z NULL w kolejnych wykładach.

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