NULL, niewypełnione pole, próżnia – nie jest jednak różowo…


Funkcje agregujące w EXCEL oraz w SQL z pustymi /niewypełnionymi (w bazie NULL)  polami poradziły sobie dobrze. Szczególnie jest to widoczne na obliczeniach średniej w poprzednim przykładzie.
Marcinie, jednak nie zawsze jest tak różowo. Przykład pokazujący różne działanie EXCEL i SQL:

  • tabela CENY, pola ID, OPIS_TOWARU, CENA_NETTO, PODATEK
  • tabela zasilona 5 rekordami,
  • towary Piesek oraz Komer (co to jest, to wyjaśni się na końcu) nie mają wypełnionej wartości w polu PODATEK.

Twoim zadaniem Marcinie jest policzenia dla każdego towaru ceny brutto. Rozwiązanie jest w EXCEL bardzo proste: cenę netto należy pomnożyć przez (1 + PODATEK/100). Konieczność dzielenia przez 100 wynika z faktu, iż zgromadzona informacja nie jest wyrażona w procentach.  EXCEL wartości puste/niewypełnione/NULL potraktował jako zero i wyliczenia są prawidłowe, nie ma niespodzianki. EXCEL nieco za nas pomyślał.

Jeżeli tabela oraz rekordy są w bazie, to już to samo zadanie wykonane przy pomocy SQL wymaga ostrożności, brak użycia NVL dla pola PODATEK generuje inne wartości niż to zrobił EXCEL. Wszystko dokładnie jest pokazane Marcinie na obrazku.

Przykład jest nieco naciągany, dobrze zaprojektowane tabele nie powinny zawierać wartości NULL, jeżeli wyraźnie ich charakter wskazuje na konieczność podania konkretnej wartości i tak generalnie jest. Jednak nie ma co ukrywać, iż najczęściej to sami analitycy tworząc własne tabele lub w szczególności łącząc zewnętrznie dane z różnych tabel wytwarzają takie pola z wartościami NULL. 
Działanie bazy możesz przećwiczyć używając skryptu udostępnionego pod linkiem:

Siłą rzeczy musisz mieć bazę zainstalowaną i narzędzie (Klienta) do komunikowania się z nią. Ja mam  i da się to zrobić samemu na domowym komputerze. ORACLE udostępnia wersję prawie w pełni funkcjonalną, a na pewno wystarczajacą w celach szkoleniowych. O tym też będzie :-)

Marcinie, i tak zagaiłem o łączeniu tabel, zdradzę iż następna notatka będzie właśnie o tym. Dzisiejszy wieczór poświęciłem na wymyślenie przykładu. W środę będę go testował, jak przejdzie weryfikację wówczas opublikuję.

Brak komentarzy:

Prześlij komentarz