Bazy danych 2005/2006 — Zestaw 7 1 1. Prowadz˛acy zaj˛ecia ma

Transkrypt

Bazy danych 2005/2006 — Zestaw 7 1 1. Prowadz˛acy zaj˛ecia ma
Bazy danych 2005/2006 — Zestaw 7
1
1. Prowadzacy
˛ zaj˛ecia ma tabel˛e, w której przechowuje dane studentów oraz druga˛ tabel˛e,
w której przechowuje wyniki kolokwium. Tabele te utworzone zostały nast˛epujaco
˛ 1:
mysql> CREATE TABLE Studenci
-> (Nr TINYINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
-> Imie VARCHAR(12) NOT NULL,
-> Nazwisko VARCHAR(12) NOT NULL)
-> ENGINE=InnoDB;
Query OK, 0 rows affected (2.31 sec)
mysql> CREATE TABLE Test1
-> (Nr TINYINT UNSIGNED NOT NULL, Ocena TINYINT UNSIGNED,
-> INDEX (Nr),
-> FOREIGN KEY (Nr) REFERENCES Studenci(Nr)
-> ON DELETE CASCADE
-> ON UPDATE CASCADE)
-> ENGINE=InnoDB;
Query OK, 0 rows affected (0.56 sec)
Załóżmy, że tabele te wypełnione sa˛ pewnymi danymi, przy czym jeśli student nie pisał kolokwium, zamiast oceny ma wartość NULL lub w ogóle nie pojawia si˛e w tabeli Test1. Podać
zapytania SQL, które
(a) Zapisza˛ w tabeli z wynikami ocen˛e, jaka˛ otrzymała studentka o nazwisku Kowalska.
Uwaga: Ma to si˛e odbyć automatycznie, bez interwencji człowieka. Istnieja˛ co najmniej
dwa rozwiazania
˛
tego problemu.
(b) Wypisza˛ imiona i nazwiska studentów oraz otrzymane oceny w kolejności alfabetycznej
nazwisk.
(c) Wypisza˛ ilu studentów otrzymało poszczególne oceny.
(d) Znajda˛ nazwiska studentów, którzy nie pisali kolokwium.
(e) Zakładajac,
˛ że kolokwium jest zaliczone, jeśli student otrzymał ocen˛e > 3, wypisać list˛e
studentów, którzy zaliczyli kolokwium.
(f) To samo wraz z ocenami.
(g) Wypisać list˛e studentów, którzy nie zaliczyli kolokwium.
(h) To samo wraz z ocena,˛ jeśli jest negatywna, lub z komentarzem “nie pisał”, jeśli student
nie pisał kolokwium.
(i) Przeprowadzono kolokwium poprawkowe. Jak najprościej założyć tabel˛e Test2 o takiej
samej strukturze jak tabela Test1?
(j) Załóżmy, że tabela Test2 jest już wypełniona zgodnie z tymi samymi zasadami, co
tabela Test1. Sporzadzić
˛
list˛e nazwisk studentów wraz z ocenami z obu kolokwium.
(k) Sporzadzić
˛
list˛e studentów wraz z lepsza˛ ocena˛ z dwu kolokwiów.
(l) Sporzadzić
˛
list˛e studentów, którzy nie pisali żadnego
˛
kolokwium.
(m) Zakładajac,
˛ że ćwiczenia sa˛ zaliczone, jeśli lepsza z ocen jest > 3, sporzadzić
˛
list˛e studentów wraz z końcowa˛ (czyli lepsza)
˛ ocena.˛
(n) Sporzadzić
˛
list˛e studentów, którzy nie zaliczyli ćwiczeń wraz z lepsza˛ z negatywnych
ocen lub komentarzem “nie pisał”, jeśli student nie zaliczył żadnego z kolokwiów.
1 Prosz˛
e
na razie nie przejmować si˛e zawarta˛ tam składni
˛ a˛ kluczy obcych.
Bazy danych 2005/2006 — Zestaw 7
2
2? . Ruchoma średnia ważona. Dany jest ciag
˛ liczb {xi }N
i=1 . Ruchoma˛ średnia˛ ważona˛ definiujemy
jako
yi =
p
X
wj xi+j ,
i = p + 1, p + 2, . . . , N − p .
(1)
j=−p
Przypuśćmy, że tabela X zawiera liczby {xi }N
i=1 (wraz z indeksami), tabela W zawiera liczby
{wi }pi=−p wraz z indeksami. Tabele te nie musza˛ być posortowane, tabela X może być bardzo
duża. Napisać zapytanie SQL, które utworzy tabel˛e zawierajac
˛ a˛ ruchome średnie ważone,
obliczone zgodnie ze wzorem (1).
PFG