0Pricing
SQL Academy · Lekcja

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, always

COALESCE: 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

  1. Wzorce LIKE i symbole wieloznaczne
  2. IN i NOT IN dla zbiorów
  3. BETWEEN dla zakresów
  4. IS NULL, IS NOT NULL i COALESCE
← Powrót do SQL Academy