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