IS NULL, IS NOT NULL i COALESCE
Wykrywaj wartości NULL za pomocą IS NULL, zastępuj je przy użyciu COALESCE / NULLIF i projektuj zapytania odporne na brakujące dane.
IS NULL, IS NOT NULL i COALESCE to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.
Sprawdzanie wartości NULL
Należy używać IS NULL i IS NOT NULL — nigdy = NULL:
SELECT * FROM users WHERE deleted_at IS NULL;
SELECT * FROM users WHERE deleted_at IS NOT NULL;Dlaczego = NULL po cichu nie działa
Porównanie dowolnej wartości z NULL daje NULL (wartość nieznaną). Wiersz zostaje odrzucony, ale nie pojawia się żaden błąd, więc usterka trafia do produkcji:
SELECT * FROM users WHERE deleted_at = NULL;
-- → returns 0 rows, alwaysCOALESCE: pierwsza wartość różna od NULL
COALESCE przyjmuje dowolną liczbę argumentów i zwraca pierwszy, który nie jest NULL:
SELECT id,
COALESCE(nickname, full_name, email, 'Anonymous') AS display_name
FROM users;COALESCE w WHERE
Proszę użyć COALESCE, aby zamienić NULL na domyślną wartość możliwą do sortowania lub porównywania:
-- Treat NULL last_login_at as the epoch:
SELECT * FROM users
ORDER BY COALESCE(last_login_at, '1970-01-01') DESC;NULLIF: odwrotność
NULLIF(a, b) zwraca NULL, gdy a = b, a w przeciwnym razie zwraca a:
-- Treat 0 as missing so AVG ignores it:
SELECT AVG(NULLIF(price, 0)) FROM products;
-- Convert empty string to NULL on insert:
INSERT INTO contacts (phone) VALUES (NULLIF(:phone, ''));CASE dla warunków domyślnych
CASE jest uniwersalną alternatywą, gdy COALESCE nie zapewnia wystarczającej elastyczności:
SELECT id,
CASE
WHEN status IS NULL OR status = '' THEN 'unknown'
WHEN status = 'A' THEN 'active'
ELSE status
END AS status_label
FROM users;NULL w CHECK i ograniczeniach
Ograniczenie CHECK przechodzi, gdy warunek ma wartość NULL. Jeśli trzeba zabronić wartości NULL, należy określić to jawnie:
CREATE TABLE prices (
amount NUMERIC(10,2),
CHECK (amount > 0) -- amount = NULL passes!
);
-- Better:
CREATE TABLE prices2 (
amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);NULL w JOIN ON
Pary wierszy, w których klucz złączenia ma wartość NULL, nigdy nie zostaną dopasowane — NULL = NULL daje NULL. Jeśli NULL ma być równy NULL, proszę użyć IS NOT DISTINCT FROM:
SELECT * FROM a JOIN b ON a.key IS NOT DISTINCT FROM b.key;NULL a UNIQUE
Standard SQL traktuje wartości NULL jako różne w ograniczeniach UNIQUE — można mieć wiele wierszy z wartością NULL:
CREATE TABLE invites (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE
);
INSERT INTO invites (email) VALUES (NULL), (NULL); -- both succeed!NULL a funkcje agregujące — podsumowanie
Funkcje agregujące (z wyjątkiem COUNT(*)) pomijają wartości NULL.
SELECT COUNT(*) FROM users; -- all rows
SELECT COUNT(email) FROM users; -- rows where email IS NOT NULL
SELECT COUNT(DISTINCT id) FROM users;Zawsze należy deklarować NOT NULL, gdy jest to możliwe
NOT NULL jest najprostszą i najsilniejszą gwarancją poprawności. Należy dodać je do każdej kolumny, która nigdy nie powinna być pusta.
Podsumowanie
Obsługa NULL jest największym pojedynczym źródłem trudnych do wykrycia błędów SQL.
- Wartości należy sprawdzać za pomocą
IS NULL - Do zastępowania wartości NULL należy używać
COALESCE - Do zamiany wartości zastępczej na NULL należy używać
NULLIF - Domyślnie należy stosować
NOT NULL
Szybki test
Które wyrażenie zwraca email, jeśli nie jest NULL, a w przeciwnym razie literał 'no-email'?
Często zadawane pytania
Czy lekcja „IS NULL, IS NOT NULL i COALESCE” jest bezpłatna?
Tak — pełny tekst „IS NULL, IS NOT NULL i COALESCE” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „IS NULL, IS NOT NULL i COALESCE”?
Wykrywaj wartości NULL za pomocą IS NULL, zastępuj je przy użyciu COALESCE / NULLIF i projektuj zapytania odporne na brakujące dane. Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Academy?
Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „IS NULL, IS NOT NULL i COALESCE”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?
Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wzorce LIKE i symbole wieloznaczne
- IN i NOT IN dla zbiorów
- BETWEEN dla zakresów
- IS NULL, IS NOT NULL i COALESCE