<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=%2FCw11</id>
	<title>/Cw11 - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=%2FCw11"/>
	<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=/Cw11&amp;action=history"/>
	<updated>2026-04-17T07:29:32Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=/Cw11&amp;diff=2052&amp;oldid=prev</id>
		<title>Jarekz: Utworzono nową stronę &quot;= TI:WTBD/Ćwiczenia 11 =  Na tych ćwiczeniach omawialiśmy zadania ze Sprawdzianu 1, i kontynuowaliśmy trenowanie SQL na danych o rozkładzie zajęć -- przykład...&quot;</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=/Cw11&amp;diff=2052&amp;oldid=prev"/>
		<updated>2015-05-23T15:05:10Z</updated>

		<summary type="html">&lt;p&gt;Utworzono nową stronę &amp;quot;= &lt;a href=&quot;/edu/index.php/TI:WTBD&quot; title=&quot;TI:WTBD&quot;&gt;TI:WTBD&lt;/a&gt;/Ćwiczenia 11 =  Na tych ćwiczeniach omawialiśmy zadania ze Sprawdzianu 1, i kontynuowaliśmy trenowanie SQL na danych o rozkładzie zajęć -- przykład...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= [[TI:WTBD]]/Ćwiczenia 11 =&lt;br /&gt;
&lt;br /&gt;
Na tych ćwiczeniach omawialiśmy zadania ze Sprawdzianu 1, i kontynuowaliśmy trenowanie SQL na danych o rozkładzie zajęć -- przykłady zapytań z wielokrotnymi złączeniami.&lt;br /&gt;
&lt;br /&gt;
== Definicja danych bazy ''plan'' (plan zajęć) ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
create table PRZEDMIOTY (KOD primary key, &lt;br /&gt;
                         NAZWA, &lt;br /&gt;
                         OPIS);&lt;br /&gt;
create table ZAJECIA_CYKLI (ID int primary key, &lt;br /&gt;
                            PRZ_KOD references PRZEDMIOTY, &lt;br /&gt;
                            CDYD_KOD, &lt;br /&gt;
                            TZAJ_KOD, &lt;br /&gt;
                            LICZBA_GODZIN int);&lt;br /&gt;
create table TERMINY (ID int primary key, &lt;br /&gt;
                      DZIEN_TYGODNIA, &lt;br /&gt;
                      GODZINA_POCZATKU int, &lt;br /&gt;
                      MINUTA_POCZATKU int, &lt;br /&gt;
                      GODZINA_KONCA int, &lt;br /&gt;
                      MINUTA_KONCA int);&lt;br /&gt;
create table BUDYNKI (KOD primary key, &lt;br /&gt;
                      NAZWA, &lt;br /&gt;
                      DLUGOSC_GEO real, &lt;br /&gt;
                      SZEROKOSC_GEO real);&lt;br /&gt;
create table SALE (ID int primary key, &lt;br /&gt;
                   LICZBA_MIEJSC int, &lt;br /&gt;
                   BUD_KOD references BUDYNKI, &lt;br /&gt;
                   NUMER, &lt;br /&gt;
                   TYP);&lt;br /&gt;
create table TERMINY_GRUP (ID int primary key, &lt;br /&gt;
                           CZESTOTLIWOSC, &lt;br /&gt;
                           GR_NR, &lt;br /&gt;
                           TRM_ID int references TERMINY, &lt;br /&gt;
                           SL_ID int references SALE, &lt;br /&gt;
                           ZAJ_CYK_ID int references ZAJECIA_CYKLI);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Przykłady zapytań ==&lt;br /&gt;
&lt;br /&gt;
Mamy na ogół do czynienia z przykładami zapytań ''sparametryzowanych'', tzn. o wyniku zależnym od wartości jednego lub więcej parametrów, które należy podać (jako wartości literalne). Np. w przykładzie 4 parametrami są kod przedmiotu i kod cyklu dydaktycznego. Poniżej w miejsce konkretnych wartości tych parametrów stawiamy znaki zapytania; gdy użyjemy tekstu takiego zapytania jako argumentu wywołania np. metody ''cursor.execute()'', przekazując jako drugi argument -- sekwencję składającą się z konkretnych wartości parametrów, to w miejsce znaków zapytania zostaną podstawione kolejne elementy tej sekwencji, z zachowaniem reguł składni SQL (np. apostrofy wokół stałych napisowych).&lt;br /&gt;
&lt;br /&gt;
1. Podać kod i nazwę wszystkich budynków uwzględnionych w bazie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
select KOD, NAZWA from BUDYNKI order by KOD;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
2. Podać ID, NUMER i LICZBA_MIEJSC dla wszystkich sal dydaktycznych (TYP='D') w budynku o danym kodzie, według malejącej liczby miejsc&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
select ID, NUMER, LICZBA_MIEJSC from SALE where TYP='D' and BUD_KOD=?&lt;br /&gt;
order by LICZBA_MIEJSC desc;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
3. Podać KOD i NAZWA przedmiotów, dla których odbywają się jakieś zajęcia w danym cyklu (np. '2011Z')&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
select KOD, NAZWA from PRZEDMIOTY where exists (&lt;br /&gt;
        select 1 from ZAJECIA_CYKLI where PRZ_KOD=p.KOD and CDYD_KOD=?);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
4. Podać terminy (dzień tygodnia, czas początku i końca) oraz miejsca (numer sali) dla wszystkich zajęć przedmiotu o danym kodzie odbywających się w danym cyklu&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
select z.TZAJ_KOD, tg.GR_NR,&lt;br /&gt;
    t.GODZINA_POCZATKU, t.MINUTA_POCZATKU,&lt;br /&gt;
    t.GODZINA_KONCA, t.MINUTA_KONCA, &lt;br /&gt;
    s.NUMER, b.NAZWA&lt;br /&gt;
from TERMINY_GRUP tg &lt;br /&gt;
    join TERMINY t on t.ID=tg.TRM_ID&lt;br /&gt;
    join ZAJECIA_CYKLI z on z.ID=tg.ZAJ_CYK_ID&lt;br /&gt;
    join SALE s on s.ID=tg.SL_ID&lt;br /&gt;
    join BUDYNKI b on b.KOD=s.BUD_KOD&lt;br /&gt;
where z.PRZ_KOD=?&lt;br /&gt;
    and z.CDYD_KOD=?;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
5. Podać rozkład zajęć (czas początku i końca zajęć, typ zajęć i przedmiot) odbywających się w danej sali, w danym dniu tygodnia i cyklu dydaktycznym&lt;br /&gt;
   Ćwiczenie dla czytelnika :)&lt;br /&gt;
6. Podać liczbę godzin zajęć, jakie tygodniowo odbywają się w danej sali (w danym cyklu dydaktycznym)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
select s.ID, s.NUMER, &lt;br /&gt;
    sum((t.GODZINA_KONCA - t.GODZINA_POCZATKU)*60&lt;br /&gt;
        + t.MINUTA_KONCA - t.MINUTA_POCZATKU) / 60. as GODZINY_ZAJEC&lt;br /&gt;
from TERMINY_GRUP tg &lt;br /&gt;
    join TERMINY t on t.ID=tg.TRM_ID&lt;br /&gt;
    join ZAJECIA_CYKLI z on z.ID=tg.ZAJ_CYK_ID&lt;br /&gt;
    join SALE s on s.ID=tg.SL_ID&lt;br /&gt;
where s.ID=?&lt;br /&gt;
    and z.CDYD_KOD=?&lt;br /&gt;
group by s.ID, s.NUMER;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integracja z Pythonem ==&lt;br /&gt;
# Napisać procedurę, która formatuje zbiór wynikowy w postaci czytelnie się prezentującej na terminalu&lt;br /&gt;
# Napisać program, który obsługuje kilka spośród powyższych zapytań (sparametryzowanych), biorąc jako argumenty -- hasło (umowne określenie zapytania) i jego parametry (np. kod przedmiotu, którego rozkład chcemy poznać itp.), a zbiór wynikowy prezentuje z wykorzystaniem powyższej procedury&lt;/div&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
</feed>