0Pricing
SQL Academy · Lekcja

NULL: trzecia wartość logiczna

Opanuj znaczenie NULL, dowiedz się, dlaczego NULL nie jest równe niczemu (nawet samemu sobie) oraz jak logika trójwartościowa wpływa na klauzule WHERE.

NULL: trzecia wartość logiczna to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 3 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.

Czym jest NULL?

NULL oznacza dane nieznane lub brakujące. Nie jest zerem, pustym ciągiem ani wartością false. Oznacza jawny brak wartości.

NULL nie jest równe niczemu (nawet samemu sobie)

To reguła, która sprawia trudność każdemu:

SELECT NULL = NULL;       -- NULL (not true!)
SELECT NULL = 0;          -- NULL
SELECT NULL = '';        -- NULL
SELECT NULL <> 1;         -- NULL

Używaj IS NULL i IS NOT NULL

Aby sprawdzić, czy wartość to NULL, trzeba użyć specjalnych predykatów IS NULL i IS NOT NULL:

SELECT email FROM users WHERE deleted_at IS NULL;       -- active users
SELECT email FROM users WHERE deleted_at IS NOT NULL;   -- deleted users

Logika trójwartościowa

Logika wartości logicznych w SQL ma TRZY wartości: TRUE, FALSE i UNKNOWN (NULL).

ABA AND BA OR B
TRUENULLNULLTRUE
FALSENULLFALSENULL
NULLNULLNULLNULL

WHERE odrzuca wiersze, dla których predykat ma wartość NULL

Jeśli dla danego wiersza wyrażenie WHERE x = 5 ma wartość NULL (ponieważ x ma wartość NULL), ten wiersz NIE zostanie zwrócony. Zachowywane są tylko wiersze, dla których predykat ma wartość TRUE.

-- Suppose age is NULL for some users:
SELECT * FROM users WHERE age >= 18;
-- Users with NULL age are NOT returned, even though we
-- don't actually know they're under 18.

Pułapka NULL w NOT IN

To zapytanie zwróci ZERO wierszy, jeśli dowolne imię w podzapytaniu ma wartość NULL:

SELECT * FROM users
WHERE name NOT IN (SELECT excluded_name FROM blocklist);
-- If blocklist has a NULL row, the whole NOT IN evaluates to NULL
-- → no rows returned

-- Safer:
SELECT * FROM users u
WHERE NOT EXISTS (
  SELECT 1 FROM blocklist b WHERE b.excluded_name = u.name
);

COALESCE: zastępowanie NULL wartością domyślną

COALESCE zwraca pierwszy argument, który nie ma wartości NULL:

SELECT id, COALESCE(full_name, email, 'Anonymous') AS display_name
FROM users;

-- If full_name is NULL, use email; if that's NULL too, use 'Anonymous'.

NULLIF: odwrotne działanie

NULLIF(a, b) zwraca NULL, gdy a = b, a w przeciwnym razie wartość a. Jest przydatne do traktowania wartości specjalnych, takich jak '' lub 0, jako NULL.

SELECT NULLIF(price, 0) FROM products;
-- Returns NULL when price is 0, useful for AVG() that should ignore zeros.

NULL w funkcjach agregujących

Funkcje agregujące (z wyjątkiem COUNT(*)) pomijają wartości NULL:

-- Suppose:  prices = [10, 20, NULL, 30]
SELECT COUNT(*)     FROM products;  -- 4 (counts rows)
SELECT COUNT(price) FROM products;  -- 3 (counts non-NULL prices)
SELECT AVG(price)   FROM products;  -- 20  (60 / 3, not 60 / 4)
SELECT SUM(price)   FROM products;  -- 60

Sortowanie wartości NULL

Domyślnie PostgreSQL umieszcza wartości NULL na końcu przy sortowaniu rosnącym i na początku przy sortowaniu malejącym. Można to zmienić:

SELECT * FROM users ORDER BY last_login_at DESC NULLS LAST;

Przechowywanie NULL a pusty ciąg

Dla każdej kolumny należy zdecydować: czy '' jest prawidłową wartością? Jeśli nie, należy użyć NULL do oznaczenia „braku wartości”. Jeśli tak, NULL oznacza coś innego (np. „jeszcze nie zapytano”).

Należy zachować spójność — nie należy używać obu wartości w tej samej kolumnie.

Podsumowanie

NULL jest odrębną wartością logiczną.

  • Sprawdzaj za pomocą IS NULL, nigdy za pomocą = NULL
  • Filtry WHERE zachowują tylko wiersze o wartości TRUE
  • Funkcje agregujące pomijają wartości NULL
  • COALESCE jest Twoim sprzymierzeńcem

Szybkie sprawdzenie

Co zwraca SELECT NULL = NULL;?

Często zadawane pytania

Czy lekcja „NULL: trzecia wartość logiczna” jest bezpłatna?

Tak — pełny tekst „NULL: trzecia wartość logiczna” 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 „NULL: trzecia wartość logiczna”?

Opanuj znaczenie NULL, dowiedz się, dlaczego NULL nie jest równe niczemu (nawet samemu sobie) oraz jak logika trójwartościowa wpływa na klauzule WHERE. Ć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 3 z 4.

Ile czasu zajmuje lekcja „NULL: trzecia wartość logiczna”?

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. Czym jest RDBMS i dlaczego tabele mają znaczenie
  2. Klucze główne i unikatowość
  3. NULL: trzecia wartość logiczna
  4. Przegląd typów danych: INT VARCHAR DATE BOOLEAN
← Powrót do SQL Academy