TOP 10 Najtrudniejszych zadan SQL - Egzamin INF.03
Ranking najtrudniejszych zadań z kwerend SQL z egzaminow INF.03
#1 -- inf03_2025_06_09 (Trudnosc: 8/10)
Temat: Remonty -- zlecenia i wykonawcy
Polecenie z arkusza:
Baza danych remonty zawiera cztery tabele. Tabela wykonanie laczy relacja wykonawcow i zlecenia (jedno zlecenie moze byc wykonane przez wielu wykonawcow). Tabela zlecenia opisuje zlecenia remontu przez klientow. Pole rodzaj przyjmuje wartosci malowanie lub gipsowanie.
- Zapytanie 1: wybierajace jedynie srednia liczbe pracownikow w firmach, minimalna liczbe pracownikow i maksymalna liczbe pracownikow. Kolumnom nalezy nadac nazwy (aliasy), kolejno: "srednia", "najmniej", "najwiecej"
- Zapytanie 2: wybierajace jedynie nazwy firm i liczbe pracownikow dla firm, w ktorych liczba pracownikow wynosi 40 i wiecej
- Zapytanie 3: wybierajace bez powtorzen jedynie nazwy miast, z ktorych pochodza klienci, posortowane rosnaco wedlug nazwy miasta
- Zapytanie 4: wybierajace jedynie imiona klientow oraz ceny ich zlecen tylko dla klientow z Poznania, ktorzy zamowili malowanie. Nalezy posluzyc sie relacja
- Zapytanie 5: wybierajace jedynie imiona klientow oraz nazwy firm wykonujacych dla nich zlecenia. Nalezy posluzyc sie relacja
Dlaczego najtrudniejsze: Jedyne zadanie z JOINem przez 4 tabele (klienci -> zlecenia -> wykonanie -> wykonawcy) plus 5 kwerend, funkcje agregujace AVG/MIN/MAX, DISTINCT z ORDER BY.
Na co zwrocic uwag
- Tabela posrednia
wykonanielaczy zlecenia z wykonawcami (relacja wiele-do-wielu) - Kolejnosc JOINow: musisz przejsc przez caly lancuch tabel
- 3 funkcje agregujace w jednym SELECT (AVG, MIN, MAX)
#2 -- inf03_2025_06_08 (Trudnosc: 7.5/10)
Temat: Parada smokow
Polecenie z arkusza:
Baza danych smoki zawiera tabele polaczone relacja.
- Zapytanie 1: wybierajace jedynie nazwe, dlugosc i szerokosc smoka, dla smokow z Polski
- Zapytanie 2: wybierajace niepowtarzajace sie kraje pochodzenia smokow, posortowane rosnaco wedlug kraju pochodzenia
- Zapytanie 3: wybierajace jedynie rok z tabeli parada i obliczajaca odpowiadajaca mu srednia wartosc dlugosci z tabeli smok, nazwa kolumny (alias) "Srednia dlugosc" tylko dla lat po 2005 roku. Nalezy posluzyc sie relacja i zgrupowac rekordy wzgledem roku
- Zapytanie 4: zmieniajace strukture tabeli parada, przez wstawienie nowej kolumny lokalizacja typu napisowego o maksymalnej dlugosci 100 znakow
Dlaczego trudne: JOIN przez 3 tabele (parada -> udzial -> smok) z tabela posrednia, polaczony z AVG + GROUP BY + WHERE w jednym zapytaniu.
Na co zwrocic uwagę
- Kwerenda 3 laczy az 5 koncepcji: JOIN + JOIN + WHERE + AVG + GROUP BY
- Tabela
udzialto tabela posrednia w relacji wiele-do-wielu - ALTER TABLE -- zmiana struktury tabeli (nie tylko danych)
#3 -- inf03_2026_01_05 (Trudnosc: 7.5/10)
Temat: System maturalny
Polecenie z arkusza:
Baza danych zgloszenia zawiera polaczone relacja tabele: personel, rejestr, pojazdy. Tabele opisuja rejestr zgloszen oraz przypisane do nich dane dotyczace personelu oraz pojazdow. W polu personel.status znajduja sie wpisy: 'policjant' lub 'ratownik'. W polu pojazdy.typ znajduja sie wpisy: 'K' lub 'R' oznaczajace karetke lub radiowoz.
- Zapytanie 1: wybierajace jedynie identyfikatory, imiona i nazwiska tych osob sposrod personelu, ktorych status to policjant
- Zapytanie 2: wybierajace jedynie typ i zliczajace liczbe pojazdow zgrupowanych wedlug typu (zapytanie wybiera liczbe karetek i radiowozow)
- Zapytanie 3: wybierajace jedynie te identyfikatory i nazwiska osob sposrod personelu, ktorych id nie pojawia sie w rejestrze
- Zapytanie 4: wstawiajace rekord do tabeli rejestr: identyfikator personelu: 1, identyfikator pojazdu: 14, automatycznie wpisywana aktualna data, klucz generowany automatycznie
Dlaczego trudne: Wzorzec "znajdz max z agregatu" -- AVG + GROUP BY + ORDER BY DESC + LIMIT 1 oraz nietypowa skladnia JOIN ... USING.
Na co zwrocic uwagę
- Kwerenda 4: klasyczny wzorzec "znajdz rekord z najwyzsza srednia" -- GROUP BY + ORDER BY + LIMIT
- Kwerenda 5: JOIN ... USING zamiast ON -- kiedy mozna uzyc USING?
- MIN/MAX na jednej kolumnie w jednym zapytaniu
#4 -- inf03_2026_01_10 (Trudnosc: 7.5/10)
Temat: Blog kulinarny -- przepisy i alergeny
Polecenie z arkusza:
Baza danych przepisy zawiera polaczone relacja tabele. Tabela potrawy jest w relacji n:m z tabela alergeny, za pomoca tabeli posredniczacej lista_alergenow. Tabela potrawy jest w relacji n:1 z tabela rodzaje, ktora opisuje rodzaje potraw: ciasta, dania miesne itd.
- Zapytanie 1: wybierajace jedynie nazwe, trudnosc i kalorie potrawy o identyfikatorze rownym 7
- Zapytanie 2: wybierajace jedynie nazwe potrawy i odpowiadajace jej pole rodzaj z tabeli rodzaje dla potrawy o identyfikatorze rownym 7. Nalezy posluzyc sie relacja
- Zapytanie 3: wybierajace jedynie nazwe potrawy i odpowiadajace jej nazwy alergenow dla potrawy o identyfikatorze rownym 7. Zapytanie wykorzystuje relacje n:m pomiedzy trzema tabelami
- Zapytanie 4: wybierajace jedynie pola przepis i plik dla potrawy o identyfikatorze rownym 7
Dlaczego trudne: Relacja wiele-do-wielu z tabela posrednia lista_alergenow, wymaga 3-tabelowego JOINa.
Na co zwrocic uwagę
- Relacja wiele-do-wielu: potrawy <-> alergeny przez tabele posrednia
- Kwerenda 3: dwa JOINy w jednym zapytaniu
- Warto narysowac diagram relacji zeby widzowie zrozumieli strukture
#5 -- inf03_2025_06_05 (Trudnosc: 7/10)
Temat: Drukarnia -- zamowienia zdjec
Polecenie z arkusza:
Baza danych fotografia zawiera tabele zamowienia i rodzaje_papieru. Kluczem obcym dla relacji jest pole rodzaj w tabeli zamowienia.
- Zapytanie 1: wybierajace jedynie pola plik, nr_klienta, liczba_odbitek dla zamowien na papierze matowym, z liczba odbitek wieksza od 100
- Zapytanie 2: wybierajace dla klienta o identyfikatorze 3 wartosci jego zamowien, obliczane na podstawie liczby odbitek i ceny, nazwa kolumny (alias) "Do zaplaty". Nalezy posluzyc sie relacja
- Zapytanie 3: zliczajace sume wszystkich odbitek na papierze blyszczacym
- Zapytanie 4: tworzace konto uzytkownika Anna na localhost z haslem @NNa
Dlaczego trudne: JOIN po kolumnie ktora NIE jest kluczem (rodzaj), obliczenia arytmetyczne w SELECT, CREATE USER.
Na co zwrocic uwagę:
- Kwerenda 2: JOIN po kolumnie
rodzajzamiast po ID -- to nietypowe! - Mnozenie kolumn z roznych tabel w SELECT
- CREATE USER -- administracja bazy danych
#6 -- inf03_2024_06_07 (Trudnosc: 7/10)
Temat: Wazenie pojazdow
Polecenie z arkusza:
Baza danych wazenietirow zawiera tabele wagi i lokalizacje polaczone relacja 1..n. Pole waga przechowuje wartosci wagi w tonach na jedna os pojazdu.
- Zapytanie 1: aktualizujace tabele wagi. Rekordy, w ktorych pole lokalizacje_id jest rowne: 2, 3, 4 maja zmienione date i czas na wartosci aktualne. Zapytanie ma charakter uniwersalny, zawsze zmienia wartosc na aktualna date / czas
- Zapytanie 2: wybierajace jedynie ulice z tabeli lokalizacje
- Zapytanie 3: wstawiajace do tabeli wagi rekord z danymi: lokalizacje_id: 5, waga: losowa liczba z przedzialu 1..10 (wygenerowana funkcja), rejestracja: DW12345, aktualna data (do pola dzien) i aktualny czas (do pola czas). Klucz glowny nadawany automatycznie. Zapytanie ma charakter uniwersalny, zawsze wstawia wartosc aktualnej daty i czasu
- Zapytanie 4: wybierajace jedynie pola rejestracja, waga, dzien, czas z tabeli wagi i odpowiadajace mu pole ulica z tabeli lokalizacje dla pojazdow, ktorych waga na os przekracza 5 t. Nalezy posluzyc sie relacja
Dlaczego trudne: INSERT z zagniezdzonymi funkcjami FLOOR(RAND()*10+1), UPDATE z CURRENT_DATE/CURRENT_TIME i BETWEEN.
Na co zwrocic uwagę:
- FLOOR(RAND()*10+1) -- generowanie losowej liczby calkowitej 1-10 w INSERT
- CURRENT_DATE i CURRENT_TIME -- dynamiczne wartosci
- BETWEEN w UPDATE -- zakres wartosci
#7 -- inf03_2026_01_07 (Trudnosc: 7/10)
Temat: Choroby i objawy
Polecenie z arkusza:
Baza danych pogoda zawiera polaczone relacja tabele: miejscowosc, miesiace, pomiary. Tabele opisuja pomiary temperatury dla roznych miejscowosci w roznych porach roku i miesiacach.
- Zapytanie 1: liczace srednia temperature dla miesiaca o identyfikatorze 7. Wyliczona wartosc jest zaokraglona do dwoch miejsc po przecinku
- Zapytanie 2: wstawiajace do tabeli miejscowosc wiersz z danymi "Kijow", "Ukraina". Klucz nadawany automatycznie
- Zapytanie 3: wybierajace jedynie nazwy miast i krajow z tabeli miejscowosc oraz odpowiadajace im temperatury w miesiacu o identyfikatorze 7. Nalezy posluzyc sie relacja
- Zapytanie 4: wybierajace jedynie nazwy miesiecy z tabeli miesiace oraz odpowiadajace im srednie temperatury. Nalezy posluzyc sie relacja
Dlaczego trudne: COUNT z JOINem przez tabele posrednia i GROUP BY -- zliczanie objawow per choroba.
Na co zwrocic uwagę:
- Kwerenda 4: JOIN + COUNT + WHERE + GROUP BY w jednym zapytaniu
- Relacja wiele-do-wielu: choroby <-> objawy
- COUNT na kolumnie z tabeli posredniej
#8 -- inf03_2025_01_10 (Trudnosc: 7/10)
Temat: Szachy -- zawodnicy kola szachowego
Polecenie z arkusza:
Baza danych szachy zawiera jedna tabele zawodnicy z informacjami o klasach, pseudonimach, zdobytych tytulach i rankingach. W tabeli znajduje sie rowniez pole data_zdobycia.
- Zapytanie 1: wybierajace jedynie pseudonim, tytul, ranking i klase dla rankingow wiekszych od 2787, posortowane malejaco wedlug rankingu
- Zapytanie 2: wybierajace losowo dokladnie dwa rekordy zlozone z pol pseudonim i klasa z tabeli zawodnicy
- Zapytanie 3: aktualizujace dane w kolumnie klasa. Klasa "4A" jest aktualizowana do "5A"
- Zapytanie 4: wybierajace dla zawodnikow z niepustym tytulem jedynie pseudonim i date zdobycia oraz obliczajace ile minelo dni od daty zdobycia tytulu do dnia dzisiejszego. Obliczona liczba dni powinna byc zapisana pod nazwa kolumny (aliasem) "dni"
Dlaczego trudne: Jedyne zadanie z prawdziwym podzapytaniem (subquery) w WHERE.
Na co zwrocic uwagę:
- Kwerenda 3: podzapytanie w WHERE -- SELECT wewnatrz SELECT
- Najpierw wykonuje sie wewnetrzny SELECT (MAX), potem zewnetrzny
- AVG + JOIN + GROUP BY w kwerendzie 2
- UPDATE z operacja arytmetyczna (staz + 1)
#9 -- inf03_2024_06_03 (Trudnosc: 6.5/10)
Temat: Poziomy rzek -- wodowskazy i pomiary
Polecenie z arkusza:
Baza danych rzeki zawiera tabele wodowskazy i pomiary polaczone relacja 1..n.
- Zapytanie 1: wybierajace jedynie pola nazwa, rzeka, stanAlarmowy z tabeli wodowskazy
- Zapytanie 2: wybierajace jedynie pola nazwa, rzeka, stanOstrzegawczy, stanAlarmowy z tabeli wodowskazy oraz odpowiadajace im pole stanWody z tabeli pomiary dla daty pomiaru 2022-05-05. Nalezy posluzyc sie relacja
- Zapytanie 3: wybierajace jedynie pola nazwa, rzeka, stanOstrzegawczy, stanAlarmowy z tabeli wodowskazy oraz odpowiadajace im pole stanWody z tabeli pomiary dla daty pomiaru 2022-05-05 oraz takie, dla ktorych stanWody jest wyzszy niz stanOstrzegawczy. Nalezy posluzyc sie relacja
- Zapytanie 4: wybierajace jedynie date pomiaru oraz liczace srednie stany wody z tabeli pomiary grupujac je wedlug daty pomiaru
Dlaczego trudne: Porownanie kolumn z roznych tabel po JOINie (stanWody > stanOstrzegawczy).
Na co zwrocic uwagę:
- Kwerenda 3: porownanie kolumn z ROZNYCH tabel po JOINie
- Po JOINie masz dostep do kolumn z obu tabel -- mozesz je porownywac
- AVG + GROUP BY w kwerendzie 4
#10 -- inf03_2025_06_07 (Trudnosc: 6.5/10)
Temat: Biuro turystyczne -- abonamenty i cechy
Polecenie z arkusza:
Baza danych wyprawy zawiera polaczone relacja tabele miejsca i rezerwacje.
- Zapytanie 1: wybierajace jedynie nazwy wszystkich miejscowosci posortowane rosnaco
- Zapytanie 2: wybierajace jedynie cene wycieczki do Malborka
- Zapytanie 3: wybierajace jedynie nazwe, cene i link obrazu z tabeli miejsca dla wierszy, w ktorych link obrazu rozpoczyna sie od 0 (zero)
- Zapytanie 4: wybierajace jedynie nazwy wszystkich miejsc i odpowiadajace im obliczone srednie liczby osob doroslych, zgrupowane wedlug nazw miejsc. Srednia liczba osob jest zaokraglona do liczby calkowitej. Nalezy posluzyc sie relacja
- Zapytanie 5: tworzace tabele klienci z kolumnami: id_klienta jako liczba calkowita dodatnia, klucz podstawowy, autoinkrementowany, nie moze przyjmowac wartosci NULL; imie typu tekstowego o dlugosci do 20 znakow; nazwisko typu tekstowego o dlugosci do 40 znakow; data_ur typu data
Dlaczego trudne: 3-tabelowy JOIN przez tabele posrednia + ROUND(AVG()) + LIKE z OR.
Na co zwrocic uwagę:
- 3-tabelowy JOIN: abonamenty -> szczegolyabonamentu -> cechy
- ROUND(AVG(), 2) -- zaokraglenie sredniej do 2 miejsc po przecinku
- LIKE z wieloma wzorcami polaczonymi OR
Podsumowanie
Najtrudniejsze koncepcje SQL na egzaminie INF.03:
- JOIN przez 3-4 tabele (relacje wiele-do-wielu z tabela posrednia)
- Podzapytania (subquery) w WHERE
- Funkcje agregujace z GROUP BY (AVG, COUNT, SUM + GROUP BY)
- Zagniezdzone funkcje (FLOOR(RAND()), ROUND(AVG()))
- Porownanie kolumn z roznych tabel po JOINie
- JOIN po kolumnie niebedacej kluczem
arkusze: link