|
![]() | Strana 8 (IN, BETWEEN, subdotaz) | ![]() | Sbírka příkladů SQL dotazů | Strana 10 (subdotaz x JOIN) | ![]() |
Příklad 17
Zadání: Vyberte faktury firem z Prahy
Popis řešení: Zvolíme řešení se subdotazem. Subdotaz vybere firmy z Prahy:
SELECT cislo
FROM Firmy
WHERE mesto LIKE 'Praha%'
Dotaz na tabulku Faktury použije subdotaz k vybrání těch faktur, jejichž číslo firmy se nachází v subdotazu. Doslovný přepis pak vypadá takto:
SQL:
SELECT cislo, firma
FROM Faktury
WHERE firma IN (SELECT cislo
FROM Firmy
WHERE mesto LIKE 'Praha%')
Poznámky:
a) Predikát IN je zde (na rozdíl od příkladu 15) použit ve významu zjištění výskytu v odpovědi na subdotaz. Subdotaz musí obsahovat pouze jeden sloupec.
b) Stejného efektu by se dosáhlo zápisem firma=ANY (subdotaz)
místo firma IN (subdotaz)
.
c) Predikát LIKE slouží k porovnávání hodnoty sloupce MESTO se vzorem zadaným výrazem "Praha%", což je SQL zápis ve 602SQL používaného operátoru .= (řetězec začíná ...). Predikát LIKE je mnohem obecnější.
d) Již z dřívějších příkladů byste měli umět vytvořit tento dotaz i bez subdotazu:
SELECT Faktury.cislo, Faktury.firma
FROM Faktury, Firmy
WHERE Firmy.cislo=Faktury.firma
AND (Firmy.mesto.='Praha')
d) Rychlost vyhodnocení dotazu s JOINem tabulek je řádově vyšší než dotazů se subdotazem po =ANY (po IN).
![]() | Strana 8 (IN, BETWEEN, subdotaz) | ![]() | Sbírka příkladů SQL dotazů | Strana 10 (subdotaz x JOIN) | ![]() |