|
![]() | Strana 10 (subdotaz x JOIN) | ![]() | Sbφrka p°φklad∙ SQL dotaz∙ | Strana 12 (UNION) | ![]() |
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)
![]() | Strana 10 (subdotaz x JOIN) | ![]() | Sbφrka p°φklad∙ SQL dotaz∙ | Strana 12 (UNION) | ![]() |