Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych Autor artykułu: mgr Jerzy Wałaszek |
©2015 mgr
Jerzy Wałaszek
|
Na dzisiejszej lekcji rozwiążemy zadania, które pojawiły się w
czasie matur w poprzednich latach. Zwykle zadania dotyczące baz danych
zawierają pliki tekstowe, które definiują zawartość tabel. Pliki te należy
przekopiować do katalogu /tmp. Nie jest to standardowe miejsce i w przypadku
ogólnym należy się dowiedzieć od administratora pracowni, gdzie umieszczać
pliki dla serwera mysql. Jest to szczególnie istotne w systemach linuksowych,
gdzie dostęp do odpowiednich katalogów z poziomu mysql podlega wysokim
restrykcjom ze względów bezpieczeństwa. |
||||||||||||||||||||||||||||||||||||||||||
Matura z informatyki, 2010, poziom podstawowyPliki noworodki.txt oraz mamy.txt zawierają dane o dzieciach i ich matkach. W pliku noworodki.txt każdy wiersz zawiera następujące informacje o jednym dziecku, rozdzielone znakami spacji: identyfikator, płeć (c – córka, s – syn), imię, data urodzenia, waga [g], wzrost [cm] oraz identyfikator matki.
Przykład:
1 c Agnieszka 20-lis-1999 2450 48 33
W pliku mamy.txt każdy wiersz zawiera informacje o jednej kobiecie, rozdzielone znakami spacji: identyfikator matki, imię, wiek. Przykład:
1 Agata 25
Identyfikator matki z pliku noworodki.txt odpowiada identyfikatorowi w pliku mamy.txt. Wykorzystując dane zawarte w plikach mamy.txt i noworodki.txtt oraz dostępne narzędzia informatyczne, wykonaj poniższe polecenia.
|
||||||||||||||||||||||||||||||||||||||||||
RozwiązanieZ opisu wynika, że w bazie danych będą dwie tabele o
następującej strukturze kolumn:
Tabele są połączone relacją: noworodki.id_mamy → matki.id_matki
Logujemy się na serwer mysql i tworzymy odpowiednie tabele:
Pobieramy pliki noworodki.txt do katalogu /tmp. Plik wczytujemy do tabeli w bazie danych
Sprawdź, czy dane zostały poprawnie odczytane:
Rekordów ma być 180. Pobieramy do katalogu /tmp plik mamy.txt i wczytujemy go do tabeli:
Tabela powinna zawierać 174 wiersze. |
||||||||||||||||||||||||||||||||||||||||||
a) imię i wzrost najwyższego chłopca oraz imię i wzrost najwyższej dziewczynki.Rozwiązanie uzyskamy za pomocą dwóch zapytań, które wyświetlą z tabeli noworodki zawartości dwóch kolumn: imie_dziecka oraz wzrost. W pierwszym zapytaniu zażądamy, aby pola plec zawierały s (syn), a w drugim c (córka). Wyniki będą posortowane malejąco względem kolumny wzrost. Wystarczy zatem odczytać pierwszy wiersz tabeli wynikowej:
Gdyby chodziło o wyświetlenie tylko tych dzieci, bez pozostałej reszty, to musimy wykorzystać grupowanie i funkcję agregującą MAX. Grupowanie powoduje wykonanie funkcji agregującej na wszystkich rekordach, które w danej kolumnie posiadają taką samą wartość. Zatem jeśli zgrupujemy tablicę noworodki wg kolumny plec, to powstaną dwie grupy: chłopców o polu plec równym s oraz dziewcząt o polu plec równym c. Wydajemy polecenie:
Znając maksymalny wzrost w grupie dziewcząt (c, 61) i chłopców (s,62), możemy wydać polecenia:
oraz: W zapytaniu można również wykorzystywać wynik zwrócony przez inne zapytanie. Identyczny efekt otrzymamy, każąc bazie danych wyliczyć odpowiednie wzrosty maksymalne w grupie chłopców i dziewcząt:
b) w którym dniu urodziło się najwięcej dzieci? Podaj datę i liczbę dzieci.Tutaj musimy zastosować grupowanie wg daty i policzyć liczbę rekordów w każdej z grup. Wykonamy to za pomocą funkcji agregującej COUNT(*):
Wynik odczytujemy z ostatniego wiersza.
c) imiona kobiet w wieku poniżej 25 lat, które urodziły dzieci o wadze powyżej 4000 gW zapytaniu musimy połączyć ze sobą obie tabele:
d) miona i daty urodzenia dziewczynek, które odziedziczyły imię po matceZnów łączymy tabele w zapytaniu:
e) daty, w których urodziły się bliźniętaWarunek: ta sama data urodzenia oraz ta sama matka. Musimy zatem zgrupować wyniki zapytania względem kolumn data_urodzenia i id_mamy. Następnie należy policzyć ilość rekordów w każdej grupie i wyświetlić ze zgrupowania tylko te, które mają wartość COUNT(*) większą od 1:
|
||||||||||||||||||||||||||||||||||||||||||
Matura z informatyki, 2010, poziom rozszerzonySzkoła dysponuje danymi zawartymi w trzech plikach: uczniowie.txt, oceny.txt, przedmioty.txt.
Korzystając z danych zawartych w plikach uczniowie.txt, oceny.txt, przedmioty.txt oraz z dostępnych narzędzi informatycznych wykonaj poniższe polecenia.
|
||||||||||||||||||||||||||||||||||||||||||
RozwiązanieNa podstawie
opisu umieszczonego w zadaniu, tworzymy trzy tabele:
Tabele są powiązane relacjami:
oceny.id_ucznia → uczniowie.id_ucznia
oceny.id_przedmiotu → przedmioty.id_przedmiotu
Logujemy się do mysql i wpisujemy:
Pliki uczniowie.txt, oceny.txt, przedmioty.txt kopiujemy do katalogu /tmp i wczytujemy do tabel:
a) liczba uczniów mieszkających na ulicy Worcella i SportowaPo prostu zliczamy rekordy z tabeli uczniowie, w których pole ulica jest równe Worcella lub Sportowa:
b) oceny ucznia Jana Augustyniaka z języka polskiegoTworzymy zapytanie z trzech tabel:
c) liczba chłopców i dziewcząt w poszczególnych klasachTutaj wykorzystujemy funkcję agregującą SUM(), funkcję warunkową IF() oraz grupowanie rekordów wg id_klasy. Funkcja SUM() zlicza dla każdego rekordu danej klasy to, co jest umieszczone w jej nawiasach. Umieścimy tam funkcję warunkową IF(). Posiada ona trzy argumenty: IF(warunek,w1,w2). Funkcja wyznacza wartość logiczną warunku. Jeśli otrzyma prawdę, to zwraca jako wynik w1. Inaczej zwraca jako wynik w2. Tworzymy następujące zapytanie:
d) zestawienie średnich ocen klasy 2aTutaj wykorzystujemy funkcję agregującą AVG(), która oblicza średnią arytmetyczną. Zaokrąglenie do dwóch miejsc po przecinku uzyskamy za pomocą funkcji ROUND(x,2). Rekordy muszą być zgrupowane wg przedmiotów. Wyniki będą sortowane malejąco wg średnich ocen. W zapytaniu musimy połączyć wszystkie trzy tabele, ponieważ informację o ocenie i klasie uzyskujemy poprzez tabelę uczniowie.
e) osoby z 2c, które w kwietniu 2009 otrzymały ocenę ndstPonieważ w wynikach zapytania musimy umieścić ucznia oraz przedmiot, w zapytaniu należy użyć wszystkich trzech tabel. Miesiąc odczytamy z pola data za pomocą funkcji MONTH(d), która zwraca numer miesiąca (1 = styczeń, 2 = luty,...). Rok odczytamy za pomocą YEAR(d).
f) nazwisko, imię, klasa oraz średnia ocen osoby, która osiągnęła najwyższą średnią ocen w całej szkoleRozwiązanie polega na wyświetleniu listy uczniów posortowaną wg rosnących średnich i odczytanie ostatniego rekordu:
|
I Liceum Ogólnokształcące |
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe