602SQL-Úplná dokumentace Index  

Sbírka dotazů – str. 9

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).