Wartość specjalna NULL

Wartość nieokreślona null:

Jawne określenie typów w polach tabeli powoduje, że niosą informację. Nawet wartości powszechnie uznane za puste. Pusty ciąg znaków to ciąg o długości 0. Wartość liczbowa niczego to zero. Czasem zachodzi konieczność zapisania rekordu, który nie będzie miał konkretnej wartości w danym polu. Będzie wymagana wartość nieokreślona – null. Ma szczególne zastosowanie dla kluczy obcych. Relacje oparte o klucze obce wymagają, aby wartość z jednej tabeli była obecna w drugiej. Wartość null pozwala na dodanie wpisu, dla którego taka relacja nie obowiązuje.

Tworzenie tabeli dopuszczającej wartości null:

Tworząc nową tabelę, dokonuje się wyboru: czy i które pola będą dopuszczać wartości null. Jeśli podczas tworzenia tabeli nie zostanie to jawnie zadeklarowane, to zazwyczaj wartość null będzie dopuszczana.

Jeśli pole ma dopuszczać wartość null wystarczy dodać do definicji pola null w kwerendzie create table. Aby pole wykluczało wartości null wystarczy dodać not null.

Używając alter table można zmienić dopuszczalność wartości nieokreślonych.

Przykład:

Dla tabeli:

create table uoms(
	id_uom int identity primary key,
	name varchar(100) not null,
	symbol varchar(5) not null,
	multiplier numeric(10,3) not null,
	base_id_uom int null
	constraint FK_base_id_uom foreign key (base_id_uom) references uoms(id_uom)
)

Podczas tworzenia tabeli jawnie określono, aby tylko pole base_id_uom dopuszczało wartość null. Jest równocześnie kluczem obcym wskazującym na inne rekordy id_uom w tej tabeli.

Wypełniając tabelę kodem:

insert into uoms(name, symbol, multiplier, base_id_uom) select 'metr', 'm', 1, null
insert into uoms(name, symbol, multiplier, base_id_uom) select 'centymetr', 'cm', 0.01, 1

Zobaczymy w polu base_id_uom wartość null dla rekordu id_uom = 1

Wartość null w tabeli.

W przypadku, gdy do tabeli spróbujemy dodać wartość null tam, gdzie jest to niedozwolone dostaniemy błąd. Np. Dla Ms SQL Serwer będzie on wyglądał następująco:

Cannot insert the value NULL into column X, table Y column does not allow nulls. INSERT fails.

Praca z wartością null:

Aby sprawdzić pole w rekordzie, czy zawiera wartość null wystarczy użyć konstrukcji is null, is not null. Innym sposobem jest użycie funkcji IsNull(), która w braku wartości zwraca wartość podaną jako drugi parametr lub jej odpowiedników.

Przykład:

Dla zawartości tabeli uoms:

Zawartość tabeli uoms

Możemy sprawdzić, które wartości mają null w polu base_id_uom używając kodu:

select * from uoms where base_id_uom is null

Otrzymamy wyniki:

Wynik zapytania: select * from uoms where base_id_uom is null

Odwrotny wynik można uzyskać poniższym zapytaniem select:

select * from uoms where base_id_uom is not null

Rezultat:

Rezultat zapytania: select * from uoms where base_id_uom is not null

Taki sam rezultat uzyskamy używając:

select * from uoms where base_id_uom <> ''

Ponieważ operator porównania dla wartości null zwraca wartość null. Dla innych wartości zostanie zwrócona wartość logiczna porównania.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *