SQL IS NOT NULL

SQL IS NOT NULL


    


DEFINICJA

Polecenie IS NOT NULL jest związane z wartością NULL, czyli z wartością nieokreśloną (nieznaną). O wartości NULL możesz więcej przeczytać tutaj. Jak sama nazwa sugeruje za pomocą IS NOT NULL możemy wyszukać wszystkie wartość które NIE są NULL-ami. Poniżej przykład filtrowania rekordów w tabeli za pomocą polecenia IS NOT NULL.


Przykład zastosowania IS NOT NULL (baza AdventureWorks) 

Wyświetl pracowników (tabela Person.Person) którzy mają drugie imię.

SELECT
     FirstName AS Imię
    ,MiddleName AS [Drugie imię]
    ,LastName AS Nazwisko
FROM
    Person.Person    
WHERE
    MiddleName IS NOT NULL
    AND (PersonType = 'EM' OR PersonType = 'SP')

Żeby uzyskać prawidłowy wynik w części WHERE musimy dodać warunek MiddleName IS NOT NULL, co można zinterpretować tak: pokaż mi wszystkie rekordy z pracownikami gdzie pole MiddleName NIE JEST PUSTE, czyli którzy pracownicy mają drugie imię.


Za pomocą IS NOT NULL możemy także filtrować wyniki zapytania do rekordów które w zdefiniowanym polu NIE mają wartości NULL, przykład poniżej.

Przykład zastosowania IS NOT NULL (baza AdventureWorks) 

Wyświetl listę produktów które były, choć raz, użyte w zamówieniach (bo wiadomo, że nie każdy produkt z asortymentu musi być zamówiony).

Na początek żeby pokazać Wam jak wykorzystując wartości NULL możemy rozwiązać ten problem.

Połączmy dwie tabele Production.Product z tabelą Sales.SalesOrderDetails za pomocą polecenie LEFT JOIN. Jeżeli produkt nie znalazł się w żadnym z zamówień w ostatniej kolumnie wyniku zapytania pojawi nam się wartość NULL a jeśli wystąpił pojawi się ID tego produktu z zamówienia (ID z kolumn 1 i 4 powinny być takie same).

Zapytanie:

SELECT
     P.ProductID
    ,P.Name
    ,P.ProductNumber
    ,D.ProductID
FROM
    Production.Product P
    LEFT JOIN Sales.SalesOrderDetail D ON P.ProductID = D.ProductID

Zrzut z częścią wyniku:

kurs sql is not null

Żeby nie zaciemniać wyników wyświetliłem tylko cztery kolumny. W ostatniej wyświetliłem ID produktu z tabeli Sales.SalesOrderDetails. Jeżeli system nie znalazł dopasowania produtku do żadnego z zamówień to wyświetla NULL a jeżeli znalazł takie dopasowanie to wyświetlane jest ID produktu z zamówienia (oczywiście ID produktu z kolumny 1 i 4 powinny być takie same).

Jeżeli teraz chcemy wyświetlić tylko te produtkty, które znajdują się w zamówieniach musimy dodać warunek: pokaż produkty które w polu ProductID (z tabeli Sales.SalesOrderDetails) ma wartość inną niż NULL, czyli nasze zapytanie przybierze formę.

SELECT
     P.ProductID
    ,P.Name
    ,P.ProductNumber
    ,D.ProductID
FROM
    Production.Product P
    LEFT JOIN Sales.SalesOrderDetail D ON P.ProductID = D.ProductID
WHERE
    D.ProductID IS NOT NULL    
GROUP BY
    P.ProductID, P.Name, P.ProductNumber, D.ProductID