Operatory i priorytety

Czas na trochę logiki bazodanowej i sposobu myślenia Oracle. Ta lekcja będzie wstępem do konstruowania bardziej rozbudowanych zapytań (niekoniecznie trudniejszych).

Logika, którą musimy poznać zanim zaczniemy brnąć dalej, opiera się na zrozumieniu kolejności wykonywanych działań, zrozumieniu co to jest NULL, oraz poznaniu operatorów.

Oczywiście nie przedstawię wszystkich operatorów dostępnych w Oracle – wszystko możemy doczytać w sieci lub manualu do Oracla zwanym ORAREF (Oracle reference manual) – te, które przedstawię są wystarczające w 80% czynności administracyjnych lub statystycznych.

Zacznijmy :)

W instrukcji SELECT mogą wystąpić dowolnie skomplikowane wyrażenia zbudowane z nazw kolumn, wywołań funkcji i ze stałych literałów. Budując różne wyrażenia łączymy poszczególne komponenty przy pomocy operatorów. Poniżej przedstawię opis niektórych operatorów dostępnych w Oracle SQL.

Operatory arytmetyczne

+ , – , * , /        – dodawanie, odejmowanie, mnożenie, dzielenie

Operator konkatenacji

||    -operator ten służy do łączenia dwu wartości tekstowych.

Operatory porównań

> , >= , = , < , <= , <> , != , ^=

Operator zakresu

x [NOT] BEETWEEN y AND z           – operator ten sprawdza czy wartość x mieści [nie mieści]  się w przedziale domkniętym <y,z>

Operator przynależności do listy

x [NOT] IN (x1, x2,…,xn)        – operator ten sprawdza, czy wartość x znajduje [nie znajduje] się na liście wartości x1,x2…

—————————————————————-

Operator wzorca

x [NOT] LIKE y

Tutaj należy się wyjaśnienie. Operator ten sprawdza czy wartość x ‚przystaje’ [nie przystaje] do maski y. Chodzi tutaj o porównanie wartości (będziemy o tym pisać szerzej w innych lekcjach). Dla przykładu jeśli wybrać z kolumny wiek wszystkich 22-latków wystarczy, że napiszemy  = ’22′ . natomiast jeżeli chcemy znaleźć nazwiska zaczynające się na ‚Oło’, musimy skorzystać z maski. Czyli porównamy sobie to tak: wybierz z tabeli ludzie imię i nazwisko ale tylko tych osób których nazwiska zaczynają się na oło. Skorzystamy z tekiego zapisu SELECT imie, nazwisko FROM ludzie where nazwisko LIKE ‚oło%’;

! w ogromnym skrócie: % zastępuje nam dowolną ilość znaków natomiast ‚_’  (podkreślenie) zastępuje dokładnie jeden znak. Bazę danych o moje nazwisko możemy więc zapytać na mnóstwo sposobów:

- o___ia%

- oł%k

- o_o_i%

PAMIĘTAJMY O CASE SENSITIVE – WIELOŚĆ LITER MA ZNACZENIE

—————————————————————-

Operator testowania wartości

x IS [NOT] NULL                            – sprawdza czy x zawiera NULL czy nie

Operatory logiczne

AND, NOT, OR     – podstawowe operatory logiczne (i, nie, lub)

Dla operatorów logicznych istnieje tabela prawdy – niektórzy mogą kojarzyć ją z logiczną tabelą prawdy, o której mówi się na matematyce w szkole podczas logiki lub teorii zbiorów. Na podstawie tej tabeli możemy określić czy nasz SQL będzie miał powodzenie czy wyświetli bzdurę tylko dla tego, że źle zapytaliśmy. Niby jest to oczywiste ale warto tabelę znać.

AND TRUE FALSE NULL
TRUE TRUE FALSE NULL
FALSE FALSE FALSE FALSE
NULL NULL FALSE NULL
OR TRUE FALSE NULL
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE NULL
NULL TRUE NULL NULL
NOT TRUE FALSE NULL
FALSE TRUE NULL
Możesz zostawić komentarz lub wysłać sygnał trackback ze swojego bloga.

Odpowiedzi: 9 do wpisu “Operatory i priorytety”

  1. jakub pisze:

    chujnia z makiem

  2. jacek pisze:

    a konstruktywnie? chujnia ponieważ?

  3. daniel pisze:

    Jaka jest różnica między operatorem != oraz ?

  4. jacek pisze:

    Witam,

    Nie istnieje operator „?”

  5. koniczynka pisze:

    good job!

  6. koniczynka pisze:

    przydałby się szczegółowy opis Operatorów porównań

  7. admin pisze:

    co dokładnie Cię interesuje?

  8. piter pisze:

    Wbrew tematowi, w artykule nie ma nic o priorytetach operatorów – tzn. czy kompilator Oracle wykona np. takie warunki:
    war1 OR war2 AND war3
    od lewej do prawej (war1, war2, war3) tak jak to jest w najbardziej ogólnym standardzie SQL czy też zrobi to tak:
    war1 OR (war2 AND war3)
    Mnie sie wydaje, a nawet jestem pewien, że zrobi to właśnie w ten drugi sposób. Warto by było opisać w artykule dlaczego.

    Myślę też, że daniel próbował spytać na czym polega różnica między operatorami: i != , czyli różne i nie równe. W zasadzie jak coś nie jest równe to jest różne, więc myślę, że ich działanie będzie takie samo.

  9. admin pisze:

    rzeczywiście nie rozwinałem tematu o priorytety – troche chciałem to przemysić do ogólnego tematu o sposobie interpretowania komend przez silnik. Ale cenna uwaga, rozwine temat tutaj. Rzeczywiście jest tak jak mówisz, dla Oracle priorytet ma suma logiczna, pozniej dopiero OR.

    Jeśli chodzi o nierówność i różność to standardem sql-92 jest <> natomiast != to składnie T-Sql z Microsoft SQL. Oczywiście juz sa takie czasy, że każda baza obsługuje te operatory (no chyba, że ktoś jest maniakiem DB2 to ma problem :)

Zostaw odpowiedź

Subskrybuj kanał RSS Follow me on Twitter!