Arkusz 2017, matura maj

Test
Oceń prawdziwość podanych zdań. Zaznacz P, jeśli zdanie jest prawdziwe, albo F – jeśli jest
fałszywe.
W każdym zadaniu punkt uzyskasz tylko za komplet poprawnych odpowiedzi.Po wykonaniu podanego zapytania SQL do pewnej bazy danych wyniki będą zawsze uporządkowane niemalejąco według pola nazwa.
1. SELECT nazwa, wartosc FROM dane ORDER BY wartosc, nazwa [P/F]
2. SELECT nazwa, wartosc FROM dane ORDER BY nazwa [P/F]
3. SELECT nazwa, sum(wartosc) FROM dane GROUP BY nazwa [P/F]
4. SELECT nazwa, sum(wartosc) FROM dane GROUP BY nazwa ORDER BY nazwa [P/F]
Mamy tutaj typowe polecenia SQL. Najpierw weźmy się za pytanie: zapytanie -> czy wyniki będą uporządkowane niemalejąco wg pola nazwy? Okej. Niemalejąco - wiecie, taki haczyk 🥴. Czyli rosnąco: A->Z, 1->9.
Teraz spójrzmy po kolei na zapytania:
1) SELECT nazwa, wartosc FROM dane ORDER BY wartosc, nazwa - za porządkowanie (sortowanie) odpowiada klauzula (polecenie) ORDER BY. Domyślnie sortowanie odbywa się rosnąco: można jednak po podaniu tej instrukcji i pola podać polecenie ASC i DESC - od "ascending" - rosnąco i "descending" - malejąco. Jednak powtórzmy - domyślnie, jeśli nie zostało sprecyzowane, pola posortowane zostaną rosnąco. ⬆. Okej, w tym wypadku po polach wartosc i nazwa nic nie ma, więc zostaną uporządkowane od najmniejszej, do największej. Jednak spójrzmy jeszcze raz na pytanie: "uporządkowane niemalejąco według pola nazwa" - hmm.. tutaj pojawia się jeszcze pole "wartosc", w zadaniu nie ma mowy o żadnym takim polu. Możemy więc z lekkim sercem zaznaczyć, że jest to FAŁSZ. W razie czego: zapis "ORDER BY wartosc, nazwa" nie jest błędny, oznacza on, że najpierw wynik zapytania zostanie posortowany według pola "wartosc", a dopiero potem "nazwa" (ma to znaczenie w przypadku, gdy dwa lub więcej pola miały by taką samą "wartość", a inne "nazwy")

2) SELECT nazwa, wartosc FROM dane ORDER BY nazwa - okej, tutaj sprawa wydaje się jasna. Nie ma żadnego "DESC" ani innego pola przy sortowaniu. Ani haczyka. 👌. Możemy zaznaczyć PRAWDA z lekkim sercem.

3) SELECT nazwa, sum(wartosc) FROM dane GROUP BY nazwa - hmm, tutaj sprawa się zagmatwała trochę bardziej. Mamy instrukcję GROUP BY. Co ona sprawia? Ano - zachodzi tzw. "agregacja danych". Brzmi dość dziwnie. Ale to nic skomplikowanego - po prostu dzięki temu każdy rekord (wiersz) z tabeli zostanie "podsumowany", o ile będzie miał taką samą nazwę. Znaczy to tyle, że np. kilka pól o tej samej nazwie, to zostaną one złączone w jedno pole. Tak jak Power Rangersi łączyli się w jednego hiperwielkiego Megazorda, rozumiecie? 😎 Co to daje? Przede wszystkim możemy robić podsumowania w stylu: "wylicz średnią wartości rekordów o tej samej nazwie", czy - jak tutaj "policz jaką sumę będą miały wartości dla tych samych nazw". Okej, to ustaliliśmy - ale czy będą posortowane według nazwy, czy nie? Nie mamy żadnej instrukcji ORDER BY, więc rekordy zostaną w takiej kolejności, w jakiej były w oryginalnej tabeli. Zaznaczamy FAŁSZ. 🤠

4) SELECT nazwa, sum(wartosc) FROM dane GROUP BY nazwa ORDER BY nazwa - dobra, tutaj mamy tak naprawdę to samo co wyżej, tylko dodane zostało polecenie ORDER BY. Coś mało kreatywni są w tym CKE 🤦‍♀️. Ale no, dokańczając - jest ORDER BY? jest ✓. Jest "nazwa" w instrukcji sortowania? jest ✓. Sukces. Zaznaczamy PRAWDĘ. 🥳

Pamiętajcie - tutaj niestety choć jedna błędna odpowiedź sprawia, że tracimy punkt za całe zadanie. Mało? Biorąc pod uwagę, że najczęściej do zdobycia jest 15 punktów z teorii, takie zadanie stanowi 6,66% 🤨 z wszystkich możliwych do zdobycia punktów. Jak dla mnie - sporo. To zadanie chyba nie było zbyt wymagające, prawda? 😉
Test
Oceń prawdziwość podanych zdań. Zaznacz P, jeśli zdanie jest prawdziwe, albo F – jeśli jest
fałszywe.
W każdym zadaniu punkt uzyskasz tylko za komplet poprawnych odpowiedzi.Rozważ następujące zapytanie SQL do pewnej bazy danych:
SELECT pesel, COUNT(*)
FROM samochody
WHERE pesel NOT IN (SELECT pesel FROM dokumenty_zastrzezone)
GROUP BY pesel HAVING COUNT(*) > 1
Dobra, popatrzmy co tu mamy:
- SELECT pesel, COUNT(*): wybieramy dwie wartości: pesel i COUNT(*); druga brzmi bardziej tajemniczo 🤔 Jednak żadnej magii tu nie ma - wspominaliśmy o tym w poprzednim zdaniu, jest to funkcja agregująca, czyli taka, która zbiera wszystkie wartości według kolumny (atrybutu) podanej po późniejszej instrukcji GROUP BY (w tym wypadku kolumna pesel) i potem na jej podstawie wykonuje jakieś obliczenia, np. COUNT - zliczanie, AVG - średnia czy SUM - suma. W każdym z tych przypadków nazwy te pochodzą z języka angielskiego, więc często wystarczy je po prostu przetłumaczyć, żeby zrozumieć ich sens. Tu występuje COUNT(*) - gwiazda oznacza, że zliczamy każdy wiersz, który pojawił się wraz z daną wartością kolumny pesel. Przykładowo (z uproszczeniem): jeśli będziemy mieli 5 wierszy z wartością w atrybucie pesel 123 i 2 z wartością 221, to funkcja COUNT zwróci odpowiednio wartości 5 i 2. Zrozumiałe, prawda? 😉 Trzeba jednak pamiętać, że do takich funkcji agregujących musi ‼ wystąpić grupowanie poprzez klauzule GROUP BY. 😤

- FROM samochody: z tabeli samochody 🚗

- WHERE pesel NOT IN (SELECT pesel FROM dokumenty_zastrzezone): tu się porobiło 🙆‍♀️ Ale jakoś damy radę. 💪 
WHERE oznacza warunek -> pesel NIE MOŻE wystąpić w podzapytaniu (SELECT ...). Jeśli pesel się tam znajdzie,  to nie pojawi się w ostatecznym wyniku. Trzeba jednak przeanalizować to, co znajduje się wewnątrz tych nawiasów. 
Zbyt skomplikowany proces tu nie zachodzi: wybieramy pesel z tabeli dokumenty_zastrzezone. Tak w razie czego, gdyby ktoś chciał wziąć chwilówkę na nasz zgubiony dowód. 🤠👮‍♂️

- GROUP BY pesel HAVING COUNT(*) > 1: okej, mamy nasze grupowanie, o którym mówiliśmy na początku. Jednak pojawia się jakaś klauzula HAVING. 😒 Okej, wpiszmy to w googla: co wychodzi? tłumaczeniem having jest "mający", czy "posiadający". Może coś nasuwa wam się na myśl? 💭 
Chodzi o to, że wybrane zostaną jedynie te grupy, które spełniają ten warunek -> posiadają wartość COUNT(*) większą od 1. Czyli jeśli jakiś pesel pojawi się tylko raz, zostanie on wykluczony z wyników. 🤷‍♀️

Okej, wiemy już co dokładnie znaczy każdy fragment w tym zapytaniu. Teraz zabierzmy się za nasz życiowy cel - odpowiedzi na pytania! 🥳 

1) ten sam numer PESEL może pojawić więcej niż jeden raz. [P/F]: jak wspomnieliśmy - GROUP BY grupuje wiersze w tym wypadku na podstawie peselu, więc każdy pesel może pojawić się jedynie raz. A więc jest to FAŁSZ. ☺

2) nie pojawi się żaden numer PESEL, który jest zapisany w tabeli dokumenty_zastrzezone. [P/F]: patrząc na warunek znajdujący się po WHERE, musimy przyznać rację temu zapisowi. PRAWDA.

3) otrzymasz tabelę o 2 kolumnach. [P/F]: po czym stwierdzić ile kolumn będzie miał wynik zapytania? ano, po liczbie nazw/instrukcji, które pojawiają się po klauzuli SELECT. Tutaj mamy dwa: pesel i COUNT(*). A więc możemy z pewnością stwierdzić, że jest to PRAWDA. 😇

4) przy odpowiednich danych może pojawić się wiersz „82122302134, 1”. [P/F]: okej, mamy podany tu wynik zapytania. 🤨 „82122302134" będzie peselem, a 1 ilością wystąpień tego peselu w tabeli samochody. Jednak przypomnijmy sobie, co jest zapisane w ostatniej linijce. HAVING COUNT(*) > 1. Większe niż 1, nie równe bądź większe. Czyli minimalna ilość, jaka może się pojawić, to 2. A tu mamy... 1! A więc zaznaczamy FAŁSZ. 😎
Test
Oceń prawdziwość podanych zdań. Zaznacz P, jeśli zdanie jest prawdziwe, albo F – jeśli jest
fałszywe.
W każdym zadaniu punkt uzyskasz tylko za komplet poprawnych odpowiedzi.Pewien oszust chce rozesłać wiadomość, podszywając się pod Jana Kowalskiego, ale nie zdołał
wykraść żadnych należących do Jana haseł ani innych prywatnych informacji. Posiada jednak
klucz publiczny Jana Kowalskiego, który ten udostępnił w sieci, a także znaleziony w internecie
adres e-mail Jana. Może zatem
1. założyć konto „Jan Kowalski” w serwisie społecznościowym i stamtąd rozsyłać wiadomości. [P/F]
2. na podstawie klucza publicznego Jana Kowalskiego szybko wygenerować jego podpis cyfrowy. [P/F]
3. na podstawie klucza publicznego Jana Kowalskiego szybko obliczyć jego klucz prywatny. [P/F]
4. rozsyłać listy elektroniczne, które w nagłówku „Od:” będą miały adres e-mail Jana Kowalskiego. [P/F]
1. założyć konto „Jan Kowalski” w serwisie społecznościowym i stamtąd rozsyłać wiadomości. [P/F]: jak wiadomo, do założenie konta w społecznościówce najczęściej nie jest wymagana żadna weryfikacja tożsamości 👮‍♂️, zaznaczamy więc PRAWDA.

2. na podstawie klucza publicznego Jana Kowalskiego szybko wygenerować jego podpis cyfrowy. [P/F]: okej, czym jest "klucz publiczny" i "podpis cyfrowy"? 🧐 W skrócie: stanowią one część mechanizmów, które mają zabezpieczyć daną wiadomość przed nieuprawnionym dostępem. Definicja brzmi tak: "Do szyfrowania wiadomości, można użyć systemu kryptografii asymetrycznej. W tym systemie każdy uczestnik ma dwa różne klucze: klucz publiczny i klucz prywatny. Gdy ktoś chce przesłać zaszyfrowaną wiadomość, musi użyć swojego klucza publicznego, by wygenerować algorytm szyfrujący. Odbiorca wiadomości, by ją odszyfrować, musi użyć swojego klucza prywatnego. Nigdy nikomu nie udostępniaj swojego klucza prywatnego. Strona wysyłająca wylicza skrót podpisywanej wiadomości. Następnie szyfruje ten skrót swoim kluczem prywatnym i jako podpis cyfrowy dołącza do oryginalnej wiadomości." Trochę tego jest. 😣 Ale nie będziemy zbytnio zagłębiać się w szczegóły, my mamy jedynie ogólnikowo wiedzieć, o co chodzi. (zainteresowanych odsyłam do tej fantastycznej serii o kryptografii na youtubie, gdzie to wszystko jest świetnie wytłumaczone 😉). Ale wracając do zadania. Padło pytanie: czy na podstawie klucza publicznego może zostać wygenerowany klucz prywatny. Wracając do definicji: "...szyfruje ten skrót swoim kluczem prywatnym i jako podpis cyfrowy..." - bingo. A więc do wygenerowania podpisu cyfrowego potrzebujemy klucz prywatny. Którego nie mamy. 🙂 Możemy zaznaczyć FAŁSZ.

3. na podstawie klucza publicznego Jana Kowalskiego szybko obliczyć jego klucz prywatny. [P/F]: uhuu, wracamy do poprzedniego pytania. Jak powiedzieliśmy, są to dwa różne klucze, a dodatkowo: klucza prywatnego nigdy nie powinniśmy udostępniać. A więc jeśli tego nie możemy, publiczny (jak sama nazwa wskazuje) służy właśnie do przekazywania, aby zaszyfrowaną wiadomość można było odczytać. Wybieramy więc FAŁSZ.

4. rozsyłać listy elektroniczne, które w nagłówku „Od:” będą miały adres e-mail Jana Kowalskiego. [P/F]: hmm, tutaj nie ma już mowy o żadnych kluczach. 🤨 Dość ciekawe, ale i trudne pytanie. Nazywa się to spoofing i tak, jest możliwe. Chodzi tutaj zazwyczaj o fałszowanie adresu zwrotnego lub nadawcy, przez co wiadomości wyglądają na takie, jakby były wysłane przez nas samych. Może kiedyś już się z tym spotkaliście? 😉 Ciekawskich odsyłam do tego artykułu.