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 wykonanie laczy 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 udzial to 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 rodzaj zamiast 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:

  1. JOIN przez 3-4 tabele (relacje wiele-do-wielu z tabela posrednia)
  2. Podzapytania (subquery) w WHERE
  3. Funkcje agregujace z GROUP BY (AVG, COUNT, SUM + GROUP BY)
  4. Zagniezdzone funkcje (FLOOR(RAND()), ROUND(AVG()))
  5. Porownanie kolumn z roznych tabel po JOINie
  6. JOIN po kolumnie niebedacej kluczem

arkusze: link