Wartość NULL i trójstanowa logika Oracle

Dzisiaj czas na ciut trudniejsze tematy. O ile ważne w naszej pracy – o tyle ciężkie do zrozumienia i zwirtualizowania sobie zagadnienia. Jednak przy odrobinie chęci okazuje się, że nie są to czary i magia ale zwykła logika, która ułatwi nam analizę danych oraz pozwoli zrozumieć nasze dotychczasowe błędy. (poza tym później będzie jeszcze trudniej :P )

 

Zaczynamy!

 

Każde wyrażenie arytmetyczne zawierające choć jeden składnik lub czynnik z wartością pustą produkuje pusty wynik.

Wypiszemy teraz z naszej bazy, nazwy towarów oraz ceny brutto (bez używania funkcji NVL)

SELECT tow_nazwa, tow_cena *(1+ tow_podatek/100)

FROM towary;

Przyjrzyjmy się wynikom i przeanalizujmy pojawienie się NULLi.

*Zasada ta nie obowiązuje w przypadku operatora konkatenacji (złączenia), kiedy wartość NULL jest traktowana jako pusty napis o zerowej długości.*

Wypiszmy teraz jako jeden napis imię, nazwisko, nazwę i adres klientów. Całość nazwiemy „Dane klientów”

SELECT klt_imie||‚ ‚||klt_nazwisko||‚ ‚||klt_nazwa||‚ ‚||klt_adres „Dane klientów”

FROM klienci

Możemy zauważyć, że podana na początku zasada nie zawsze działa… :( Jeżeli wyrażenie logiczne zawiera wartość pustą i jeżeli pomimo to wynik wyrażenia jest jednoznaczny, to wynik jest niepusty.

Wykonując te polecenia SQL musimy przeanalizować sobie wyniki oraz czytać na głos regułki – pomoże to zrozumieć o co chodzi.

Oczywiście wspieramy się tablicą prawdy dla NULL:

NOT NULL => NULL

TRUE AND NULL => NULL

FALSE AND NULL => FALSE

TRUE OR NULL => TRUE

FALSE OR NULL => NULL

Myślimy tutaj czysto logicznie.  Pod NULL podstawiamy jednocześnie TRUE i FALSE (bo nie wiemy co to jest) i na podstawie tabeli prawdy dostajemy wyniki. Dla przykładu: FALSE i NULL to FALSE ponieważ FALSE przy operaterze AND dla zarówno FALSE jak i TRUE daje FALSE. TRUE i NULL natomiast są NULLem ponieważ dla TRUE przy operatorze AND występują zarówno TRUE i FALSE – nie wiemy więc co tam jest i dlatego dajemy NULL. Proste :)

 

Dla miłego zakończenia dzisiejszej lekcji, wypiszemy sobie domyślne realizowane kolejności operatorów.

Priorytety operatorów

Składowe złożonych wyrażeń łączone są ze sobą w kolejności zależnej od priorytetów operatorów. W przypadku operatorów o tym samym priorytecie łączenie następuje od lewej do prawej strony.

Domyślną kolejność łączenia możemy zmienić przy pomocy nawiasów.

Poniżej znajdują się operatory uszeregowane w wiersze według priorytetu łączenia, od największego do najmniejszego.

*, /, NOT

+,  -,  ||

<, <=, =, >=,  >, <>, !=, ^=, IS, IN, BETWEEN, LIKE

AND

OR

 

Możesz zostawić komentarz lub wysłać sygnał trackback ze swojego bloga.

Odpowiedzi: 2 do wpisu “Wartość NULL i trójstanowa logika Oracle”

  1. Wartość NULL i trójstanowa logika Oracle | Samouczek SQL
    roger vivier flats http://www.vivierparis.com/roger-vivier-flats-c-2.html

  2. mackage sale pisze:

    Wartość NULL i trójstanowa logika Oracle | Samouczek SQL
    mackage sale http://www.mackagesale.com/mackage-women-c-2/

Zostaw odpowiedź

Subskrybuj kanał RSS Follow me on Twitter!