602SQL-┌plnß dokumentace Index   Tisk  

Sbφrka dotaz∙ û str. 11

P°φklad 19

Zadßnφ: VypiÜte nßzvy firem (a p°φpadn∞ Φßstku), kterΘ majφ alespo≥ jednu fakturu za vφce ne₧ 5000,- KΦ.

Popis °eÜenφ: V tomto p°φkladu ukß₧eme pou₧itφ subdotazu v Φßsti SELECT. Subdotaz pro ka₧dΘ Φφslo faktury vrßtφ jmΘno firmy. Toto jmΘno lze pou₧φt ve v²Φtu sloupc∙ dotazu.

SQL:

    SELECT DISTINCT (SELECT nazev
                     FROM Firmy
                     WHERE Firmy.cislo=Faktury.firma) AS Nazev, castka
    FROM Faktury
    WHERE castka > 5000

Poznßmky:

a) Sloupec Nazev odpov∞di nenφ samoz°ejm∞ editovateln².

b) StejnΘho v²sledku (s mo₧nostφ editace odpov∞di ale bez Φßstky) lze dosßhnout takto:

    SELECT Firmy.nazev 
    FROM Firmy
    WHERE Firmy.cislo =ANY (SELECT Faktury.firma
                            FROM Faktury
                            WHERE castka > 5000
      AND Faktury.firma=Firmy.cislo)

c) StejnΘho v²sledku lze dosßhnout i bez subdotaz∙, pomocφ JOINu, nap°. takto:

    SELECT DISTINCT Firmy.nazev, Faktury.castka 
    FROM Faktury,Firmy
    WHERE (castka > 5000)
      AND (Firmy.cislo=Faktury.firma)

d) StejnΘho v²sledku lze dosßhnout takΘ takto:

    SELECT DISTINCT Firmy.nazev, Faktury.castka 
    FROM Firmy, (SELECT firma,castka
                 FROM Faktury
                 WHERE castka > 5000)
    WHERE Faktury.firma=Firmy.cislo

e) I kdy₧ dßvajφ dotazy stejnΘ v²sledky, poΦφtajφ se r∙zn²mi zp∙soby a jejich vyhodnocenφ trvß r∙zn∞ dlouho.

f) Pokud by nßm staΦil jen poΦet firem, je t°eba pou₧φt funkce COUNT. Otßzkou z∙stßvß umφst∞nφ klauzule DISTINCT:

    SELECT DISTINCT COUNT(Firmy.nazev) 

nedß sprßvn² v²sledek, je t°eba DISTINCT p°ed°adit COUNT:

    SELECT COUNT (DISTINCT Firmy.nazev) 
    FROM Faktury,Firmy
    WHERE (castka > 5000)
      AND (Firmy.cislo=Faktury.firma)