Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

IS NOT NULL

Termin Definicja
IS NOT NULL

IS NOT NULL to operator Transact-SQL sprawdzający, czy dana wartość jest wypełniona, czyli różna od pustej.

Znaczenie operatora IS NOT NULL w Transact-SQL

IS NOT NULL jest predykatem języka Transact-SQL używanym w Microsoft SQL Server do sprawdzania, czy wyrażenie nie ma wartości NULL. Wynik predykatu jest prawdziwy wtedy, gdy badana kolumna, zmienna, stała lub obliczone wyrażenie zawiera jakąkolwiek wartość inną niż NULL. Operator nie porównuje danych z konkretnym tekstem, liczbą ani datą, lecz rozpoznaje specjalny stan oznaczający brak wartości albo brak znanej wartości.

Podstawowa postać zapytania wygląda następująco: WHERE nazwa_kolumny IS NOT NULL. Przykładowo zapytanie SELECT id, numer_seryjny FROM Urzadzenia WHERE numer_seryjny IS NOT NULL; zwróci rekordy, w których kolumna numer_seryjny ma wartość zapisaną w bazie. W Transact-SQL nie należy zastępować tego warunku konstrukcją nazwa_kolumny <> NULL, ponieważ zwykłe operatory porównania nie sprawdzają wartości NULL w ten sposób. Do testowania obecności wartości służą predykaty IS NULL oraz IS NOT NULL.

Różnica między NULL a pustym tekstem

NULL nie jest tym samym co pusty łańcuch znaków '', tekst zawierający spację, liczba zero ani wartość logiczna 0. Jeżeli kolumna typu znakowego zawiera pusty tekst, warunek IS NOT NULL uzna ją za wypełnioną, ponieważ pusty tekst nadal jest zapisaną wartością, a nie stanem NULL. Dlatego zapytanie WHERE opis IS NOT NULL może zwrócić również rekord z pustym opisem.

Jeżeli aplikacja ma znaleźć tekst rzeczywiście zawierający znaki, potrzebny jest dodatkowy warunek dopasowany do typu danych. Dla kolumny znakowej można użyć na przykład WHERE opis IS NOT NULL AND opis <> ''. Taki warunek nadal dopuści tekst składający się wyłącznie ze spacji. W razie potrzeby można sprawdzić także długość po usunięciu spacji, na przykład przez LEN(opis) > 0, pamiętając, że funkcja LEN w SQL Server nie uwzględnia końcowych spacji. Operator IS NOT NULL odpowiada więc wyłącznie za wykrycie braku wartości NULL; nie przeprowadza walidacji jakości ani treści danych.

Filtrowanie, łączenie i obliczenia z użyciem predykatu

Predykat często występuje w zapytaniach filtrujących rekordy przed dalszym przetwarzaniem. Można go łączyć z innymi warunkami za pomocą AND i OR, na przykład: WHERE data_zakonczenia IS NOT NULL AND status = 'zamknięte'. W ten sposób można wybrać tylko te wiersze, dla których zakończenie operacji zostało zapisane, a jednocześnie status ma określoną wartość. Warunek może dotyczyć także wyniku funkcji lub obliczenia, np. WHERE NULLIF(kod, '') IS NOT NULL, co pozwala potraktować pusty tekst jako brak wartości zwracany przez NULLIF.

W instrukcjach JOIN sprawdzanie IS NOT NULL pomaga odróżnić rekordy z dopasowaniem od rekordów bez powiązanego wiersza. Przykład SELECT k.id, z.numer FROM Klienci AS k LEFT JOIN Zgloszenia AS z ON z.klient_id = k.id WHERE z.id IS NOT NULL; wybiera klientów, dla których istnieje powiązane zgłoszenie. Ten sam warunek zastosowany do kolumny z tabeli przyłączanej może jednak zmienić praktyczny efekt LEFT JOIN i ograniczyć wynik do rekordów posiadających dopasowanie, dlatego miejsce predykatu ma znaczenie. Warto również pamiętać, że funkcje agregujące, takie jak COUNT(kolumna), pomijają wartości NULL, podczas gdy COUNT(*) liczy wiersze niezależnie od zawartości kolumn. Sam fakt, że kolumna jest filtrowana przez IS NOT NULL, nie oznacza jeszcze, że jej wartość jest poprawna biznesowo.

Kontrola danych i diagnostyka zapytań w SQL Server

IS NOT NULL jest używany zarówno w bieżących zapytaniach, jak i w kontroli jakości danych. Pozwala znaleźć rekordy, które mają uzupełnione pola opcjonalne, sprawdzić skutki importu albo wykryć nieoczekiwane wartości w tabeli. Przykładowo SELECT COUNT(*) FROM Komputery WHERE adres_ip IS NOT NULL; policzy wiersze, w których kolumna adres_ip nie jest ustawiona na NULL. Nie dowodzi to jednak, że zapisany adres jest poprawnym adresem IP, ponieważ predykat nie analizuje formatu ani zakresu wartości.

W projektowaniu tabel SQL Server można ograniczyć występowanie NULL przez zdefiniowanie kolumny jako NOT NULL. Takie ograniczenie działa na poziomie struktury tabeli i wymaga, aby każdy nowy lub zmieniany wiersz otrzymał wartość zgodną z typem kolumny, chyba że kolumna ma wartość domyślną zastosowaną przez instrukcję INSERT. Jeżeli kolumna pozostaje opcjonalna, zapytania powinny świadomie obsługiwać oba przypadki: obecność wartości przez IS NOT NULL i jej brak przez IS NULL. Przy analizie wolnego działania zapytania trzeba dodatkowo sprawdzić plan wykonania, statystyki i indeksy, ponieważ sam operator jest tylko elementem predykatu, a szybkość filtrowania zależy od całej konstrukcji zapytania, rozkładu danych i dostępnych indeksów.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę