Syntax highlighting of Archiv/Dotazovací jazyky I

{{predmet|Dotazovací jazyky I|Jaroslav Pokorný|DBI001}}
Dotazovací jazyky, povídání o SQL.

* zkouška: písemná – příklady
* zápočet: referát na semináři (po trojicích, PowerPointová prezentace), jinak psané (Word)

== Odkazy ==
* [http://kocour.ms.mff.cuni.cz/~pokorny/vyuka.html#DBI006 info u Pokorného]
* [http://urtax.ms.mff.cuni.cz/~novap2am/poznamky/dotazovaci.sxw sporadické poznámky] (OpenOffice)

== Zkoušky ==
Je dobré si úlohy skúsiť vyriešiť najprv samostatne, pre niektoré úlohy boli zverejnené aj [[Dotazovací jazyky I - řešení|riešenia]].
=== 17.1.2008 ===
Stupnica 24-21 - 1; 20-19 - 2; 18-17 - 3
*1.) Schéma:
<span style="line-height: 100%">
<font style="font-family: Courier New">
 +---------+    +---------+    +---------+
 |  Herec  |    | Hraje_v |    |  Film   |
 +---------+    +---------+    +---------+
 | HerecId | -- | HerecId |  / | FilmId  |
 | Jméno   |    | FilmId  | /  | Titul   |
 | Adresa  |    +---------+    | Režisér |
 +---------+                   +---------+
</font>
</span>
&nbsp;- vybrat všetkých hercov, ktorí hrali vo filmoch režírovaných Formanom (3b)<br>
&nbsp;- vybrat všetkých režisérov, kteří nehrali v žiadnom svojom filme (3b)

*2.) Upraviť schéma z 1.) na OR model s tým, že do databáze pribudneú aj iné osoby. Bolo potreba použiť typy a referencie s cieľom odstrániť FilmId a HerecId a vo výsledku mali byť 3 relácie (3b).
** Napísať v tomto novom shémate dotaz D3: Pre každého herca zistiť počet Formanových filmov (režírovaných Formanom) do ktorých boli obsadení.

*3.) Čosi z DIS - ako sa budú meniť ( - znižovať, + zvyšovať) P a R ak sa použije:
** Boolean operátor AND
** Boolean operátor OR
** zástupné znaky
** (spolu asi 11 vecí)

*4.) Definovať inverznú frekvenciu dokumentu (IDF)

*5.) Počítací príklad na spojenie relácií R * S: p<sub>R</sub> = 2000, b<sub>R</sub> = 20, p<sub>S</sub> = 5000, b<sub>S</sub> = 50 (1b)

*7.) (3b) Napísať postup ako z:
<font style="font-family: Courier New">
 ((R[B=C]S)[D=E]T)[A] 
</font>
pomocou aspoň troch krokov vznikne:
<font style="font-family: Courier New">
 ((T[E][E=D]S[ACD])[C=B]R)[A]
</font>
*8.) Počítací príklad na plány...

=== 31.1.2007 ===
*1) Tri relacie, urobit nad nimi dva dotazy v SQL92. (3+2 body)
*2) V SQL:1999 napisat pre dve z tych relacii ADT a na zaklade nich vytvorit tabulky, s vazbou medzi nimi. (3)
*3) Nad tymito dvomi tabulkami urobit dotaz. (2)
*4) Dva texty, vektory model.
**4a) Vytvorit maticu podla TF*IDF. (2)
**4b) Definovat kosinusovu mieru. (1)
**4c) Pre dva dotazy urcit Sim (klasicke) a zoradit dokumenty podla relevancie. (2)
*5) Pre relacie z otazky 1 su dane indexy (klastrovane a klasicke B+-stromy), ich vyska, statistiky poctu riadkov a blokovaci faktor
**5a) Nakreslit strom dotazu (akykolvek). (1)
**5b) Navrhnut optimalny plan a spocitat pocet I/O operacii. (3)
**5c) Pre tento optimalizovany dotaz nakreslit strom. (1)
**5d) Navrhnut novy optimalizovany plan, ak sa zmenia indexy. (3)
Celkom bolo 23 bodov, hodnotenie 20-23 za 1, 18-19 za 2, 16-17 za 3. Cas 90 minut.

=== 19.1.2006 ===
*1. v sql92 vyjadrite v definicii tabulky FILM ze reziser byva tam co kino, + otazka co sa stane ak je reziser bezdomovec 
*2. kina v ktorych davaju len tie filmy ktorych reziser byva na rovnakej adrese 
*3. v xml-ql najst nejake podelementy zo zadanaeho xml, xml bolo zadane :) 
*4. kina kde davaju len jeden film 
*5. kina ktore davaju vsetko co dava kino blanik 
*6. uvazujem Sim(Q,D_i)=suma(q_k*w_ik) ---> taky ten vzorecek zo slejdov potom vyjadrite nenulovy Sim pomocou bool modelu ak je vektorovy model binarny 
*7. definujte koef. uplnosti a presnosti 
*8. co su datove typy list, bag, set v sql99 
*9. uvazujte typy entit osoba(atributy meno, adresa*), hviezdicka znaci ze adresa je viac hodnotovy atribut a ukol(atributy cislo_ukolu, nazov). kazda osoba riesi niekolko ukolov, kazdy z nich v nejakej kapacite poc_h. navrhnite v sql99 odpovedajuce uzivatelske typy dat a na zaklade tychto typov definujte prislusne tabulky. a este tam potom bol jeden dotaz na ale ten si napametam :) 
*este tam boli nejake otazky na xml ... 

=== 10.2.2005 ===
zkousene okruhy: 
*SQL 92, 89 dotazy z oblasti KINO, FILM, .. celkem pohoda, jen to vymyslet 
*IO pro tabulku + co kdyz reziruje bezdomovec (viz predchozi prispevky) 
*UNION JOIN - stejena otazka jako tady byla (vyjde prazdna tabulka) 
*SQL 99 - definovat tabulku s pouzitim typu (tez definovat) a reference + napsat zadanej dotaz nad tim 
*DIS definovat miru TF*IDF (napsal jsem nejakou sumu + log a stacilo) 
*DTD napsat schema (nemel jsem tam zadny hvezdicky coz je ve vetsine pripadu blbe - elementy se pak nesmely opakovat, tak pozor na to) 
*XML-QL dotaz na vsechny podelementy elemetu 

=== 7.2.2005 ===
*1)-6) byly selecty nad danou databazi napsane prostredky SQL89:
**databaze Studio
**Dava(nazef_f,nazev_k);
**Film(nazev_f,reziser);
**Kino(nazev_k,adresa);
**D1(1 bod) Filmy, co davaji nekde. 
**D2(3 body) Filmy, co davaji vsude. 
**D3(2 body) Filmy, co nedavaji nikde. 
**D4(3 body) Kina, kde davaji vsechny filmy. 
**D5(2 body) Kina, kde davaji jen Kolju. 
**D6(3 body) Kina, kde davaji vsechny filmy rezisera Sveraka a nic jineho. 
**D7(1 bod) vyjadrit D3 pomoci SQL92 

*8) (3 body) popiste pojeti ADT v SQL99 

*9) (2 body) vyjadrete NATURAL JOIN prostredky SQL89, konkretne mame tabulky R(A,B,C) a S(D,A,C) a mame vyjadrit pomoci sql89 prikaz "SELECT B FROM R NATURAL JOIN S" 

*10) (1+2body) uvazujeme dva texty a vektorovy model dat:
**A Rano, rano, ranicko. Bude prset. Bude hodne prset. 
**B Rano bude prset. Kazde rano bude prset. 
**a) definujte TF a IDF 
**b) zkonstrujte matici dokumenty*termy zalozenou na TF*IDF 
**Uvazujte pouze vyznamova slova, nehledte na koncovky podstatnych jmen. Eventualne symbolicke logaritmy vyjadrete pouze symbolicky. 
**// slova rano a ranicko se daly brat jako jeden term, slovo "bude" zrejme neni vyznamove slovo 

*11) (2 body) K databazi Studio navrhnete DTD tak, aby byla zachovana referencni integrita mezi strukturou Dava a strukturami Film a Kino. 
Hodnocení: 16-18 bodu 3, 19-22 bodu 2, 23-26 bodu 1
=== 22.1.2005 ===
* 1. Napsat SQL selecty nad nejakym zadanym DB schematem. Vetsinou se tam pouzival EXISTS, nekde GROUP BY a HAVING, jendou se dalo urychlit pomoci EXCEPT... cele to melo byt SQL92. 
* 2. Dve tabulky T1(A,B,C) a T2(B,C,D), byly v nich i hodnoty a bylo treba napsat jak vypada RIGHT OUTER JOIN. (Bez ON, cili to byl asi NATURAL) 
* 3. Napsat SEMIJOIN tech tabulek... tak to netusim, co je. ([http://en.wikipedia.org/wiki/Relational_algebra#Semijoin semijoin])
* 4. Napsat DTD definici databaze z prikladu 1. Cili <!ATTLIST>, <!ELEMENT>... bylo treba vedet celou syntax DTD. 
* 5. Dva texty s podtrzenymi termami, dva DIS dotazy, udelat TF a IDF, udelat vahy D, pak na to poslat ty dotazy a spocitat (klasicky skalarni soucin). 
* 6. Napsat XQL2 (v praxi je to X-Path) dotaz nad zadanym XML. Bylo potreba najit vsechna tel a fax cisla osob, cili: osoba/(tel|fax)

[[Category:Databáze]]