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.
GO TO FULL VERSION