SQL wartość NULL

SQL wartość NULL


    


DEFINICJA

NULL jest reprezentacją nieznanych danych/wartości. Jest bardzo często mylone, przez początkujących programistów, z wartością zero. Wartości te nie są równoważne. NULL mówi nam o tym, że nie znamy danej wartości. Żeby wartość taka znalazła się w bazie to przy tworzeniu tabel musimy pamiętać o tym, żeby "powiedzieć bazie", że takie wartości mogą się w danej kolumnie pojawić. Poniżej przykład tworzenia nowej tabeli z kolumnami w SQL SERVER za pomocą kreatora, zobaczymy tam checkbox którego zaznaczenie zezwana na przechowywanie wartości NULL w danej kolumnie.

kurs sql null sql server

Możemy "ręcznie" utworzyć tabelę i zdefiniowac które kolumny mogą a które nie mogą przechowywac wartości NULL. Poniżej przykład kodu który utworzy nam tabelę "pracownicy". Zdefiniujemy w nim, że pola ID, Imię i Nazwisko nie mogą przechowywać wartości NULL bo chyba nie ma takiej osoby która nie miałaby imienia i nazwiska, ale nie każdy ma drugie imię i tutaj zdefiniujemy, że kolumna ta może przechowywać wartości NULL.

CREATE TABLE PRACOWNICY
(
   ID integer NOT NULL,
   Imie varchar(30) NOT NULL,
   Drugie_imie varchar (30),
   Nazwisko varchar (30) NOT NULL
);

Z wartością NULL spotkamy się głównie w dwóch przypadkach. Pierwszy przypadek to taki, jak opisałem wyżej, że w samej tabeli znajdą się wartości NULL (obrazek poniżej, przykład tabeli "Employees" z treningowej bazy Northwind).

kurs sql null sql server

A drugi przypadek jest taki, że NULL może nam się pojawić przy zapytaniach do bazy np. przy różnego rodzaju łączeniach tabel kiedy wymuszamy połączenie konkretnego typu np. LEFT JOIN i system nie może we wszytkich przypadkach dopasować danych "po obu stronach". W sytuacji kiedy system nie znajdzie dopasowania wartości w to miejsce wstawi NULL.

Z wartością NULL związane są dwa polecenie IS NULL i IS NOT NULL. Jak sama nazwa wskazuje kiedy chcemy znaleść wartości NULL korzystamy z IS NULL a jeżeli chcemy "wyłączyć" wartości NULL (czyli wskazać wszystkie wartości oprócz NULL) to korzystamy z IS NOT NULL.