Poslední úpravy - Vyhledat:

SQL

O modelování

Power Designer

Oracle Data Modeler

Zdroje...

edit SideBar

SQL /

Podmínky výběru záznamů

< Sloupce ve výsledku | SQL postupně | Pořadí řádků >

Můžeme požadovat, aby se do výsledku dostaly jen záznamy, které splňují námi zadané podmínky. Podmínky mohou být kladeny na hodnotu v nějakém sloupci(poli) či na vzájemný vztah více sloupců (polí). Zapisují se do klauzule where.

Základní podmínka může mít jeden z následujících tvarů:

<pole> { = | <> | > | < | <= | >= | like } <výraz>
<pole> is [not] null
<pole> [not] between <výraz1> and <výraz2>
<pole> [not] in (<seznam_výrazů_oddělených_čárkami>)

Základní podmínky můžeme kombinovat pomocí logických operátorů and, or, not.


Příklad: Vypište čísla objednávek s dodací adresou jinou, než je kontaktní adresa zákazníka.

        select CISO as CISLO_OBJEDNAVKY
        from OBJ join ZAK on (ZAK=LOG)
        where ZAK.MEST<>OBJ.MEST or ZAK.ULIC<>OBJ.ULIC;
Pokud se některá pole z různých tabulek jmenují stejně, musíme v podmínce specifikovat, které to je.

Příklad: Vypište čísla objednávek zákazníka s loginem "bohus".

        select CISO as "číslo objednávky"
        from OBJ
        where ZAK='bohus';
V jazyku Oracle musí být textové konstanty v jednoducých apostrofech, zatímco uvozovky jsou vyhrazeny pro identifikátory databázových objektů – polí, tabulek atd.

Příklad: Vypište čísla objednávek přijatých po 1.5.2009.

        select CISO as CISLO_OBJEDNAVKY
        from OBJ
        where DAT>='01052009';
V jazyku Oracle lze datumovou hodnotu zadat jako text, v naší národní lokalizaci je to 'DDMMYYYY'.

Příklad: Vypište čísla objednávek přijatých mezi 1.1.2009 a 30.4.2009.

        select CISO as CISLO_OBJEDNAVKY
        from OBJ
        where DAT between '01012009' and '30042009';

Příklad: Vypište čísla neodeslaných objednávek.

        select CISO as CISLO_OBJEDNAVKY
        from OBJ
        where DATOD is null;
Jediný způsob, jak se dotázat na záznamy s prázdnou, tj. NULL, (resp. neprázdnou) hodnotou v nějakém poli, je operátor "is null" (resp. "is not null"). Porovnání pole = NULL nebo pole <> NULL nikdy není vyhodnoceno jako TRUE ani jako FALSE, ale vždy jen jako UNKNOWN.

Příklad: Vypište čísla objednávek s dodáním do Prahy.

        select CISO as CISLO_OBJEDNAVKY
        from OBJ
        where MEST like '%Praha%';
Porovnání like je pro textové hodnoty, lze porovnávat s tzv. "maskou". V masce mohou být zástupný symbol % za jakýkoli (i prázdný) text, a zástupný symbol _ za jeden znak. Jiná varianta pro tento příklad:
        select CISO as CISLO_OBJEDNAVKY
        from OBJ
        where PSC like '1%';

Příklad: Vypište čísla objednávek určených k osobnímu převzetí nebo rozvozu.

        select CISO as CISLO_OBJEDNAVKY
        from OBJ
        where DOPR in ('1','2');
Seznam k porovnání může být také výsledkem poddotazu (k poddotazům se tento tutoriál propracuje později).

Příklad: Vypište čísla objednávek s dodáním do Prahy, Brna nebo Vyškova
Pro tento příklad není jednoduché řešení, protože není možné "kombinovat in a like", alespoň ne v jazyce Oracle. Řešením je formulovat více podmínek s porovnáním like, a ty podmínky spojit logickým operátorem or.


Efektivita podmínek

V této kapitole nejsou zmíněny jiné podmínky, než ty základní. Je třeba kriticky zvažovat užití jiných podmínek, mohou výrazně ovlivnit rychlost zpracování dotazů.

Dále pamatujte na to, že:
  • Porovnání s konstantou nebo polem je vždy rychlejší než porovnání výrazů:
    MNOZ > SKLAD
    je rychlejší jež
    MNOZ/SKLAD > 1
  • Porovnání in je rychlejší než série porovnání na rovnost spojených podmínkami or:
    DOPR in ('1','2','4')
    je rychlejší než
    DOPR='1' or DOPR='2' or DOPR='3'
  • Porovnání between je rychlejší než kombinace <= a >= :
    DAT between '01012009' and '30042009'
    je rychlejší než
    DAT >= '01012009' and DAT <= '30042009'
  • Porovnání like "od začátku" je rychlejší než "podle vnitřku":
    MEST like 'Praha%'
    je rychlejší než
    MEST like '%Praha%'
    i v případě, že výsledek je stejný.

< Sloupce ve výsledku | SQL postupně | Pořadí řádků >

Upravit - Historie - Tisk - Poslední úpravy - Vyhledat
Poslední úprava stránky: 25.02.2015, 13:18