Przygotowanie danych

Przed przystąpieniem do rozwiązywania zadania typu maturalnego, dotyczącego baz danych, trzeba zaimportować dane zapisane w kilku plikach .txt do wybranego programu, np. Microsoft Access lub LibreOffice Base. Opis importu danych został przedstawiony w e‑materiale: Podstawowe operacje na bazach danych, etap IIPjmYte1O1Podstawowe operacje na bazach danych, etap II.

W przykładach zaprezentowanych w tym e‑materiale potrzebne dane są już zaimportowane i gotowe do pobrania w plikach programów Microsoft Access oraz LibreOffice Base.

Zadanie 1. Loty pasażerskie

Zadanie zostało opublikowane jako zadanie 107 przez Centralną Komisję Egzaminacyjną w zbiorze zadań: „Egzamin maturalny. Informatyka. Poziom rozszerzony. Zbiór zadań”, CKE, 2015.

W plikach: Loty.txt, Pasazerowie.txt, Bilety.txt znajdują się informacje na temat lotów, pasażerów i biletów lotniczych zakupionych przez nich w biurze podróży w drugim kwartale 2014 roku. Pierwszy wiersz każdego z plików jest wierszem nagłówkowym, a dane w wierszach rozdzielone są znakami tabulacji.

W pliku Loty.txt znajduje się 1027 wierszy z informacjami o lotach pasażerskich: numerem identyfikacyjnym (kolumna id_lotu), miejscem docelowym (kolumna miejsce_docelowe), datą wylotu (kolumna data) oraz godziną wylotu (kolumna godzina).

Przykład

id_lotu

miejsce_docelowe

data

godzina

 37

Warszawa

 2014‑04‑04

 12:05

 38

Zurych

 2014‑04‑04

 13:50

 39

Londyn Stansed

 2014‑04‑04

 18:10

Plik o nazwie Pasazerowie.txt zawiera 302 wiersze z informacjami na temat pasażerów, którzy kupili bilety. Są to: identyfikator pasażera (kolumna id_pasazera), jego nazwisko (kolumna nazwisko), imię (kolumna imie), ulica, przy której mieszka, wraz z numerem domu (kolumna adres), miejscowość (kolumna miejscowosc) oraz telefon (kolumna telefon).

Przykład

id_pasazera

nazwisko

imie

adres

miejscowosc

telefon

 202

Antczak 

 Edyta

 Czerwcowa 40/6 

 Walbrzych

 735223964

 203

Karpik

 Hanna

 Drewniana 8/6

 Dzierzoniow

 312271637

W pliku Bilety.txt znajduje się 2251 wierszy z informacjami na temat zakupionych przez pasażerów biletów: numerem identyfikacyjnym lotu (kolumna id_lotu) oraz identyfikatorem pasażera (kolumna id_pasazera).

Przykład

id_lotu

id_pasazera

 142

 100

161 

420 

170 

161 

171 

155 

Wykorzystując dane zawarte w tych plikach i dostępne narzędzia informatyczne, rozwiąż poniższe zadania. Odpowiedzi do poszczególnych zadań zapisz w pliku tekstowym o nazwie Wyniki_loty_pasazerskie.txt. Wyniki do każdego zadania poprzedź numerem oznaczającym to zadanie.

Do oceny oddajesz:

  • plik tekstowy Wyniki_loty_pasazerskie.txt zawierający odpowiedzi do poszczególnych zadań (odpowiedź do każdego zadania powinna być poprzedzona jego numerem)

  • plik(i) zawierający(e) komputerową realizację twoich obliczeń

Zadanie 1.1

Podaj trzy miejsca docelowe, do których było najwięcej wylotów. W zestawieniu podaj miejsce docelowe oraz liczbę dni w których odbyły się wyloty.

Zadanie 1.2

Utwórz zestawienie, w którym podasz nazwiska i imiona pasażerów, którzy zakupili więcej niż 15 biletów, oraz liczbę biletów kupionych przez każdego z nich.

Zadanie 1.3

Utwórz zestawienie, w którym dla każdego numeru miesiąca z badanego okresu podasz liczbę biletów kupionych przez osoby z Wrocławia (Wroclaw).

Zadanie 1.4

Utwórz zestawienie, w którym podasz imiona i nazwiska pasażerów, którzy kupili bilety do dowolnego lotniska w Londynie na samoloty, których wyloty odbyły się między 8:00 a 10:00. Zestawienie posortuj rosnąco według kolejności alfabetycznej nazwisk.

Rozwiązania zadań w programie Microsoft Access

Plik z danymi do pobrania:

RY6VDHx5C8XYL

Przycisk do pobrania pliku ZIP z treścią zadania.

Plik ZIP o rozmiarze 362.25 KB w języku polskim

Tabele PasazerowieBilety oraz LotyBilety są powiązane relacjami typu jeden do wielu:

R1DpbPT2ULvmq
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Rozwiązanie zadania 1.1

Aby wyszukać trzy miejsca docelowe, do których wyloty odbyły się w największą liczbę dni, wykorzystamy dane zawarte w tabeli Loty.

Utwórzmy najpierw kwerendę pomocniczą, dzięki niej wyświetlimy wszystkie miejsca docelowe odbytych lotów wraz z datami. W widoku projektu z tabeli Loty wybieramy kolejno pole miejsce_docelowe oraz pole data, ustalając w obu przypadkach sortowanie rosnące:

REi8iXIWOn2hW
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Po uruchomieniu kwerendy otrzymujemy tabelę wynikową z 1027 rekordami:

RwKD5BKPUIdkk
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Ponieważ niektóre wyloty do określonej lokalizacji (np. zaznaczone na powyższym zrzucie) odbyły się więcej niż jednokrotnie danego dnia, a w zadaniu nie powinniśmy zliczać powtórzeń – musimy znaleźć sposób na ich wyeliminowanie. Możemy w tym celu wykorzystać słowo kluczowe DISTINCTDISTINCTDISTINCT, które umieszczone bezpośrednio po poleceniu SELECT w zapisie zapytania w języku SQL pozwoli uzyskać unikalne rekordy:

  • SELECT DISTINCT Loty.miejsce_docelowe, Loty.data

  • FROM Loty

  • ORDER BY Loty.miejsce_docelowe, Loty.data

Po uruchomieniu kwerendy otrzymujemy tabelę złożoną z 983 rekordów, ponieważ  teraz każdy wylot dotyczy już tylko jednej daty:

RkxQ564pTqnGg
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Ten sam efekt, który otrzymaliśmy przy modyfikacji kwerendy w widoku SQL, możemy również uzyskać za pomocą grupowania:

R1Q6VxzFxgPfM
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Teraz należy przygotować zestawienie z podsumowaniem liczby wylotów, które odbyły się do określonej lokalizacji. Możemy w tym celu bieżącą kwerendę zapisać i potraktować jako źródło danych dla nowej kwerendy, w której za pomocą funkcji agregującej Policz, zastosowanej w kolumnie data (z sortowaniem malejącym), zostaną zliczone różne dni wylotów do określonych miejsc docelowych:

Rucb1Btp7sq7f
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Po uruchomieniu kwerendy otrzymujemy tabelę składającą się z 30 rekordów tworzących zestawienie miejsc docelowych wylotów uporządkowanych w kolejności od najliczniejszych:

RtlRzHrEcRnWk
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Ponieważ w zadaniu chodzi o trzy miejsca, do których wyloty odbyły się w największą liczbę dni, w widoku projektu precyzujemy kwerendę, wybierając opcję Zwróć z wartością 3:

R1SR7iFov6mWp
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Po uruchomieniu kwerendy otrzymujemy tabelę składającą się z trzech rekordów prezentujących miejsca docelowe, do których wyloty odbyły się w największą liczbę dni:

RAIEQdwBudImn
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Rozwiązanie zadania 1.2

W celu przygotowania zestawienia zawierającego nazwiska i imiona pasażerów, którzy zakupili więcej niż 15 biletów, oraz liczbę biletów kupionych przez każdego z nich, wykorzystamy dane zawarte w tabelach Pasażerowie oraz Bilety.

Projektujemy kwerendę, w której z tabeli Pasazerowie wybieramy kolejno pole id_pasażera, pole nazwisko oraz pole imie (wybór pola id_pasażera jest konieczny, ponieważ w zadaniu nie podano informacji, że w tabeli Pasazerowie nie występuje dwóch/dwoje lub więcej pasażerów o tym samym imieniu i nazwisku), natomiast z tabeli Bilety – pole identyfikator. Grupujemy dane według pola id_pasażera, pola nazwisko oraz pola imie, a także stosujemy funkcję Policz dla pola identyfikator z ustalonym kryterium >15:

RlWpz8H4IWwG0
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

W rezultacie otrzymujemy tabelę składającą się z rekordów tworzących zestawienie imion i nazwisk pasażerów, którzy zakupili więcej niż 15 biletów:

R3r2HZG9wUS3i
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Rozwiązanie zadania 1.3

Aby utworzyć zestawienie, w którym dla każdego numeru miesiąca zostanie podana liczba biletów kupionych przez osoby z Wrocławia, wykorzystamy dane zawarte w tabelach Pasazerowie, Bilety oraz Loty.

Projektując kwerendę, z tabeli Pasazerowie wybieramy pole miejscowosc, z tabeli Loty – pole data, a z tabeli Bilety - pole id_pasazera. Ponieważ potrzebujemy informacji o miesiącu, uzyskamy ją na podstawie daty za pomocą dostępnej funkcji MonthMonthMonth. Grupujemy dane według miesięcy oraz stosujemy funkcję Policz dla pola id_pasazera:

R136GSMfNQLo1
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Ważne!

Listę dostępnych funkcji w programie Microsoft Access uzyskamy poprzez skorzystanie z tzw. Konstruktora wyrażeń:

RXQ4gqoHNpSQQ
RUhXhb8hoLgtY
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Po uruchomieniu kwerendy otrzymujemy tabelę składającą się z rekordów tworzących zestawienie liczby biletów zakupionych w kolejnych miesiącach przez osoby z Wrocławia (pole miejscowosc zostało ukryte):

R4FRqLl4EhDRI
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Rozwiązanie zadania 1.4

W celu przygotowania zestawienia zawierającego nazwiska i imiona pasażerów, którzy kupili bilety do dowolnego lotniska w Londynie na samoloty z wylotami między 8:00 a 10:00, wykorzystamy dane zawarte w tabelach Pasazerowie oraz Loty.

Projektujemy kwerendę, w której z tabeli Pasazerowie wybieramy kolejno pole nazwisko oraz pole imie, natomiast z tabeli Loty – pole godzina oraz pole miejsce_docelowe:

R1JOxPd2VDQuM
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Ważne!

Projektując kwerendę odnoszącą się do pól w tabelach Pasazerowie oraz Loty, uwzględniamy również tabelę Bilety. Tabela ta łączy rekordy reprezentujące poszczególnych klientów lotniska z rekordami oznaczającymi wyloty do konkretnych miejsc docelowych określonego dnia o ustalonej godzinie. Gdybyśmy w projektowanej kwerendzie pominęli tabelę Bilety, nie otrzymalibyśmy poprawnego wyniku, ponieważ rekordy z tabeli Pasazerowie utraciłyby połączenie z odpowiadającymi im rekordami z tabeli Loty.

Po uruchomieniu kwerendy otrzymujemy tabelę składającą się z rekordów tworzących zestawienie nazwisk i imion pasażerów, którzy kupili bilety do dowolnego lotniska w Londynie na samoloty startujące między 8:00 a 10:00:

RuCzySdBtYrt6
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Rozwiązania zadań w programie LibreOffice Base

Plik z danymi do pobrania:

RtXt5uizlPywd

Przycisk do pobrania pliku ZIP z treścią zadania.

Plik ZIP o rozmiarze 169.24 KB w języku polskim

Tabele PasazerowieBilety oraz LotyBilety są powiązane relacjami typu jeden do wielu:

R1XCsbkgXAcOh
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Rozwiązanie zadania 1.1

Aby wyszukać trzy miejsca docelowe, do których wyloty odbyły się w największą liczbę dni, wykorzystamy dane zawarte w tabeli Loty.

Utwórzmy najpierw kwerendę pomocniczą, za pomocą której wyświetlimy wszystkie miejsca docelowe odbytych lotów wraz z datami. W widoku projektu z tabeli Loty wybieramy kolejno pole miejsce_docelowe oraz pole data, ustalając w obu przypadkach sortowanie rosnące:

R1OtKM1Xp1ijj
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Po uruchomieniu kwerendy otrzymujemy tabelę wynikową z 1027 rekordami:

R1K8VO02OVG1x
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Ponieważ niektóre wyloty do określonej lokalizacji (np. zaznaczone na powyższym zrzucie) odbyły się więcej niż jednokrotnie danego dnia, a w zadaniu nie powinniśmy zliczać powtórzeń, musimy znaleźć sposób na ich wyeliminowanie. Możemy w tym celu wykorzystać słowo kluczowe DISTINCTDISTINCTDISTINCT, które umieszczone bezpośrednio po poleceniu SELECT w zapisie zapytania w języku SQL pozwoli uzyskać unikalne rekordy:

  • SELECT DISTINCT Loty.miejsce_docelowe, Loty.data

  • FROM Loty

  • ORDER BY Loty.miejsce_docelowe, Loty.data

Po uruchomieniu kwerendy otrzymujemy tabelę złożoną z 983 rekordów, ponieważ każdy wylot dotyczy teraz już tylko jednej daty:

RsJCZ9rtyBOsS
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Ten sam efekt, który otrzymaliśmy, modyfikując kwerendę w widoku SQL, możemy również uzyskać za pomocą grupowania:

RokH489zyhucc
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Należy teraz przygotować zestawienie z podsumowaniem liczby wylotów, które odbyły się do określonej lokalizacji. Możemy w tym celu zapisać bieżącą kwerendę i potraktować ją jako źródło danych dla nowej kwerendy, w której – za pomocą funkcji agregującej Liczba, zastosowanej w kolumnie data (z sortowaniem malejącym) – zostaną zliczone różne dni wylotów do określonych miejsc docelowych:

R1cNSsSlZs97t
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Ważne!

Gdyby program LibreOffice Base zgłaszał problem z sortowaniem, należy je wyłączyć w kwerendzie pomocniczej:

RlVUOdJZDzmTK
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Po uruchomieniu kwerendy otrzymujemy tabelę składającą się z 30 rekordów tworzących zestawienie miejsc docelowych wylotów, uporządkowanych od najliczniejszych:

Regj8TEuvAKFX
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Ponieważ w zadaniu chodzi o trzy miejsca, do których wyloty odbyły się w największą liczbę dni, w widoku projektu precyzujemy kwerendę, wybierając opcję Ograniczenie z wartością 3:

R15wzKPaGYN1y
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Po uruchomieniu kwerendy otrzymujemy tabelę składającą się z trzech rekordów prezentujących miejsca docelowe, do których wyloty odbyły się w największą liczbę dni:

R1UC9gFJYs5UR
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Rozwiązanie zadania 1.2

W celu przygotowania zestawienia zawierającego nazwiska i imiona pasażerów, którzy zakupili więcej niż 15 biletów, oraz liczbę biletów kupionych przez każdego z nich, wykorzystamy dane zawarte w tabelach Pasazerowie oraz Bilety.

Projektujemy kwerendę, w której z tabeli Pasazerowie wybieramy kolejno pole id_pasazera, pole nazwisko oraz pole imie (wybór pola id_pasazera jest konieczny, ponieważ w zadaniu nie podano informacji, że w tabeli Pasazerowie nie występuje dwóch/dwoje lub więcej pasażerów o tym samym imieniu i nazwisku), natomiast z tabeli Bilety – pole identyfikator. Grupujemy dane według pola id_pasazera, pola nazwisko oraz pola imie, a także stosujemy funkcję Liczba dla pola identyfikator z ustalonym kryterium >15:

R1OJ6oRTIsqLT
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

W rezultacie otrzymujemy tabelę składającą się z rekordów tworzących zestawienie imion i nazwisk pasażerów, którzy zakupili więcej niż 15 biletów:

R1CMJEcS8KWVa
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Rozwiązanie zadania 1.3

Aby utworzyć zestawienie, w którym dla każdego numeru miesiąca zostanie podana liczba biletów kupionych przez osoby z Wrocławia, wykorzystamy dane zawarte w tabelach Pasazerowie, Bilety oraz Loty.

Projektując kwerendę, z tabeli Pasazerowie wybieramy pole miejscowosc, z tabeli Loty – pole data, a z tabeli Bilety - pole id_pasazera. Ponieważ potrzebny jest nam miesiąc, uzyskamy go na podstawie daty za pomocą dostępnej funkcji MonthMonthMonth. Grupujemy dane według miesięcy, a także stosujemy funkcję Liczba dla pola id_pasazera:

R16F3qJrLUBmY
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Po uruchomieniu kwerendy otrzymujemy tabelę składającą się z rekordów tworzących zestawienie liczby biletów zakupionych w kolejnych miesiącach przez osoby z Wrocławia (pole miejscowosc zostało ukryte):

R4L5dVqNFgoOF
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Rozwiązanie zadania 1.4

W celu przygotowania zestawienia zawierającego nazwiska i imiona pasażerów, którzy kupili bilety do dowolnego lotniska w Londynie na samoloty wylatujące między 8:00 a 10:00, wykorzystamy dane zawarte w tabelach Pasażerowie oraz Loty.

Projektujemy kwerendę, w której z tabeli Pasazerowie wybieramy kolejno pole nazwisko oraz pole imie, natomiast z tabeli Loty – pole godzina oraz pole miejsce_docelowe:

RkmqDdHN0MEWZ
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Ważne!

Projektując kwerendę odnoszącą się do pól w tabelach Pasazerowie oraz Loty, musimy uwzględnić również tabelę Bilety. Tabela ta łączy rekordy reprezentujące poszczególnych klientów lotniska z rekordami oznaczającymi wyloty do konkretnych miejsc docelowych określonego dnia o ustalonej godzinie. Gdybyśmy w projektowanej kwerendzie pominęli tabelę Bilety, nie otrzymalibyśmy poprawnego wyniku, ponieważ rekordy z tabeli Pasazerowie utraciłyby połączenie z odpowiadającymi im rekordami z tabeli Loty.

Po uruchomieniu kwerendy otrzymujemy tabelę składającą się z rekordów tworzących zestawienie nazwisk oraz imion pasażerów, którzy kupili bilety do dowolnego lotniska w Londynie na samoloty wylatujące między 8:00 a 10:00:

R12Rnratv6KL5
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Ważne!

W przypadku wystąpienia problemów podczas uruchamiania kwerendy w programie LibreOffice Base, np. gdyby pojawił się błąd o treści:

RN2jppefdbuqx
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

- przeprowadź następujące czynności:

1. w widoku Kwerendy kliknij prawym przyciskiem myszy zapisaną kwerendę:

R138bkcxkFSan
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

2. wybierz opcję Edycja w widoku SQL:

R1IiDh3s1FllO
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

3. usuń zaznaczone fragmenty (składające się z kropki i dziewięciu zer), dotyczące kryterium związanego z zadanym przedziałem czasowym:

R11CogFEDaeTk

4. upewnij się, czy zapytanie w zaznaczonych miejscach ma postać taką, jak na przedstawionej ilustracji:

RVnrlz8MvmFUS
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

5. uruchom kwerendę:

R1YzKcgNkdjs3
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Odpowiedzi do zadań

R1SCVZvEn5wYx

Przycisk do pobrania pliku TXT z wynikiem do zadań.

Plik TXT o rozmiarze 1.05 KB w języku polskim

Słownik

DISTINCT
DISTINCT

słowo kluczowe w języku SQL, które umieszczone bezpośrednio po poleceniu SELECT umożliwia uzyskanie unikalnych rekordów w wyniku zwrócenia odpowiedzi na zapytanie skierowane do bazy danych

Month
Month

funkcja zwracająca numer miesiąca (1‑12) na podstawie daty podanej jako argument; jedna z wielu dostępnych funkcji wbudowanych, dostępnych zarówno w programie Microsoft Access, jak i LibreOffice Base