logo

SQL | Pogojni izrazi

Sledijo pogojni izrazi v SQL

    Izraz CASE: omogoča uporabo stavkov IF-THEN-ELSE, ne da bi morali priklicati procedure.
    V preprostem izrazu CASE SQL išče prvi par WHEN……THEN, za katerega je izraz enak primerjalnemu_izrazu, in vrne return_expr. Če zgornji pogoj ni izpolnjen, obstaja klavzula ELSE, SQL vrne else_expr. V nasprotnem primeru vrne NULL.
    Za return_expr in else_expr ne moremo določiti dobesedne ničelne vrednosti. Vsi izrazi (izraz, primerjalni_izraz, povratni_izraz) morajo biti istega podatkovnega tipa.
    Sintaksa:

     CASE expr WHEN comparison_expr1 THEN return_expr1 [ WHEN comparison_expr2 THEN return_expr2 . . . WHEN comparison_exprn THEN return_exprn ELSE else_expr] END>

    primer:



       Input : SELECT first_name, department_id, salary, CASE department_id WHEN 50 THEN 1.5*salary WHEN 12 THEN 2.0*salary ELSE salary END 'REVISED SALARY' FROM Employee;>

      Izhod:

    Pojasnilo : V zgornjih stavkih SQL je vrednost department_id dekodirana. Če je 50, potem se plača 1,5-kratnik, če je 12, potem se plača 2-kratnik, drugače ni spremembe plače. Funkcija DECODE : olajša pogojne poizvedbe z opravljanjem dela stavka CASE ali IF-THEN-ELSE.
    Funkcija DECODE dekodira izraz na podoben način kot logika IF-THEN-ELSE, ki se uporablja v različnih jezikih. Funkcija DECODE dekodira izraz, potem ko ga primerja z vsako iskalno vrednostjo. Če je izraz enak iskanju, se vrne rezultat.
    Če je privzeta vrednost izpuščena, je vrnjena ničelna vrednost, če se iskalna vrednost ne ujema z nobeno vrednostjo rezultata.
    Sintaksa:

     DECODE (col/expression, search1, result1 [, search2, result2,........,] [, default])>
     Input : SELECT first_name, department_id, salary, DECODE(department_id, 50, 1.5*salary, 12, 2.0*salary, salary) 'REVISED SALARY' FROM Employee;>

    Izhod:

    Pojasnilo: V zgornjih stavkih SQL se testira vrednost department_id. Če je 50, potem se plača 1,5-kratnik, če je 12, potem se plača 2-kratnik, drugače ni spremembe plače.

    COALESCE : vrne prvi neničelni argument. Nič je vrnjena le, če so vsi argumenti ničelni. Pogosto se uporablja za zamenjavo privzete vrednosti za ničelne vrednosti, ko so podatki pridobljeni za prikaz.
    OPOMBA: Enako kot izrazi CASE tudi COALESCE ne bo ovrednotil argumentov desno od prvega najdenega neničelnega argumenta.
    Sintaksa:

     COALESCE( value [, ......] )>
     Input: SELECT COALESCE(last_name, '- NA -') from Employee;>

    Izhod:

    Pojasnilo: - NA - bo prikazano na mestu, kjer je priimek null, sicer bodo prikazani ustrezni priimki. NAJVEČJI: Vrne največjo vrednost s seznama poljubnega števila izrazov. Primerjava je občutljiva na velike in male črke. Če podatkovni tipi vseh izrazov na seznamu niso enaki, se ostali vsi izrazi pretvorijo v podatkovni tip prvega izraza za primerjavo in če ta pretvorba ni mogoča, bo SQL vrgel napako.
    OPOMBA: Vrne ničelno vrednost, če je kateri koli izraz na seznamu ničelni.
    Sintaksa:

     GREATEST( expr1, expr2 [, .....] )>
    •  Input: SELECT GREATEST('XYZ', 'xyz') from dual;>
       Output: GREATEST('XYZ', 'xyz') xyz>

      Pojasnilo: ASCII vrednost malih abeced je večja.

    •  Input: SELECT GREATEST('XYZ', null, 'xyz') from dual; Output: GREATEST('XYZ', null, 'xyz') ->

      Pojasnilo: Ker je null prisoten, bo null prikazan kot izhod (kot je omenjeno v zgornjem opisu).

    IFNULL: Če izraz1 ni NULL, vrne izraz1; sicer vrne izraz2. Vrne številsko ali nizovno vrednost, odvisno od konteksta, v katerem se uporablja.
    Sintaksa:

     IFNULL( expr1, expr2 )>
    •  Input: SELECT IFNULL(1,0) FROM dual;>
       Output: - 1>

      Pojasnilo: Ker noben izraz ni nič.

    •  Input: SELECT IFNULL(NULL,10) FROM dual; Output: -- 10>

      Pojasnilo: Ker je izraz1 enak nič, se prikaže izraz2.

    IN: preveri, ali je vrednost prisotna v nizu vrednosti in se lahko uporablja z WHERE, CHECK in ustvarjanjem pogledov.
    OPOMBA: Enako kot izraza CASE in COALESCE tudi IN ne bo ovrednotil argumentov desno od prvega najdenega neničelnega argumenta.
    Sintaksa:

     WHERE column IN ( x1, x2, x3 [,......] )>
     Input: SELECT * from Employee WHERE department_id IN(50, 12);>

    Izhod:

    Pojasnilo: Vsi podatki Zaposlenih so prikazani z ID oddelka 50 ali 12.

    NAJMANJ: vrne najmanjšo vrednost s seznama poljubnega števila izrazov. Primerjava je občutljiva na velike in male črke. Če podatkovni tipi vseh izrazov na seznamu niso enaki, se ostali vsi izrazi pretvorijo v podatkovni tip prvega izraza za primerjavo in če ta pretvorba ni mogoča, bo SQL vrgel napako.
    OPOMBA: vrne null, če je kateri koli izraz na seznamu ničelni.

    Sintaksa:

     LEAST( expr1, expr2 [, ......] )>
    •  strong>Vnos: IZBERI NAJMANJ('XYZ', 'xyz') iz dvojnega; Izhod: NAJMANJ('XYZ', 'xyz') XYZ>

      Pojasnilo: ASCII vrednost velikih črk je manjša.

    •  Input: SELECT LEAST('XYZ', null, 'xyz') from dual; Output: LEAST('XYZ', null, 'xyz') ->

      Pojasnilo: Ker je null prisoten, bo null prikazan kot izhod (kot je omenjeno v zgornjem opisu).

    NULLIF: Vrne ničelno vrednost, če je vrednost1=vrednost2, sicer vrne vrednost1.
    Sintaksa:

     NULLIF( value1, value2 )>

    primer:

     Input: SELECT NULLIF(9995463931, contact_num) from Employee;>

    Izhod:

Pojasnilo: Za zaposlenega, katerega številka se ujema z dano številko, se prikaže NULL. Za ostale zaposlene je vrnjena vrednost1.