Egzamin praktyczny: baza w phpMyAdmin i cztery kwerendy

INF.03 · teoria
autor: redakcja · 09.09.2026
Pierwszy oceniany rezultat krok po kroku: start Apache i MySQL w XAMPP, baza egzamin w phpMyAdmin, import pliku .sql, zrzut import.jpg oraz cztery kwerendy zapisane w kwerendy.txt ze zrzutami kw1.png do kw4.png. Lekcja 13.2 kursu INF.03.
Pierw­szy z pięciu oce­nia­nych re­zul­ta­tów za­da­nia prak­tycz­ne­go to ope­ra­cje na bazie danych: uru­cho­mie­nie ser­we­ra, za­ło­że­nie bazy, import tabel z pliku i cztery kwe­ren­dy SQL. Ta lekcja pro­wa­dzi przez niego w ko­lej­no­ści, w jakiej robi się to przy kom­pu­te­rze, i po­ka­zu­je, czego arkusz wymaga w każdym z plików. Re­zul­tat zamyka się w pierw­sze pół go­dzi­ny eg­za­mi­nu i do­pie­ro po nim ma sens skrypt PHP, bo bez bazy nie ma z czym się łączyć. Skład­ni SQL nie ma tu od nowa, są od­no­śni­ki do działu SQL.

Start usług i baza o nazwie z ar­ku­sza

Za­da­nie za­czy­na się poza bazą. Zda­ją­cy loguje się na konto Egzamin, roz­pa­ko­wu­je ar­chi­wum ZIP za­bez­pie­czo­ne hasłem po­da­nym w ar­ku­szu i za­kła­da folder na­zwa­ny wła­snym nu­me­rem PESEL. Do tego fol­de­ru tra­fia­ją wszyst­kie wyniki: pliki tego re­zul­ta­tu, póź­niej wi­try­na, skryp­ty i plik przeglądarka.txt z nazwą użytej prze­glą­dar­ki. Resztę dys­cy­pli­ny plików opi­su­je lekcja o ana­to­mii za­da­nia.
Serwer uru­cha­mia XAMPP Con­trol Panel. Po­trzeb­ne są dwie usługi: MySQL, bo w nim stanie baza, oraz Apache, bo przez niego działa phpMyAdmin i póź­niej­sze strony PHP. Po klik­nię­ciu Start obie mają mieć zie­lo­ne tło i numer pro­ce­su. Czer­wo­ny ko­mu­ni­kat o porcie znaczy, że port zaj­mu­je inny pro­gram, naj­czę­ściej druga in­sta­la­cja MySQL albo usługa IIS.
Adres http://localhost/phpmyadmin otwie­ra panel, konto to root bez hasła. Za­kład­ka Bazy danych, pole z nazwą, ze­sta­wie­nie znaków utf8mb4_polish_ci, przy­cisk Utwórz. Nazwa bazy jest w ar­ku­szu i zwykle brzmi egzamin, ale w ar­ku­szu o por­ta­lu dla węd­ka­rzy baza na­zy­wa­ła się wedkowanie, więc nazwy nie zga­du­je się z pa­mię­ci. In­sta­la­cję pa­kie­tu i sam panel opi­su­je lekcja o XAMPP i phpMyAdmin.

Import pliku .sql i zrzut import.jpg

Plik z ta­be­la­mi leży w roz­pa­ko­wa­nym ar­chi­wum. Ko­lej­ność kli­ka­nia jest stała:
  • 1.
    Klik­nij nazwę nowej bazy na liście po lewej, żeby była wy­bra­na.
  • 2.
    Za­kład­ka Import, przy­cisk wyboru pliku, wskaż plik .sql.
  • 3.
    Ko­do­wa­nie utf-8, format SQL, przy­cisk Wy­ko­naj na dole strony.
  • 4.
    Sprawdź listę tabel po lewej i liczbę wier­szy w każdej z nich.
Import zro­bio­ny bez za­zna­czo­nej bazy to naj­częst­sza po­mył­ka tego kroku: tabele po­wsta­ją poza bazą albo ope­ra­cja kończy się błędem, a skrypt PHP nie znaj­du­je póź­niej danych. Szcze­gó­ły im­por­tu i eks­por­tu są w lekcji o skryp­tach SQL.
Zrzut ekranu robi się do­pie­ro po spraw­dze­niu tabel. Arkusz żąda pliku import.jpg i wymaga, żeby było na nim widać CAŁY ekran razem z pa­skiem zadań, więc służy do tego kla­wisz PrtScr i wkle­je­nie obrazu do edy­to­ra gra­fi­ki, a nie Alt+PrtScr, który ko­piu­je samo ak­tyw­ne okno. Plik za­pi­su­je się w fol­de­rze PESEL w for­ma­cie JPG. Zrzut za­pi­sa­ny jako PNG i prze­mia­no­wa­ny na .jpg nadal jest pli­kiem PNG.

Cztery kwe­ren­dy i tabele, na któ­rych stoją

Arkusz podaje cztery po­le­ce­nia po polsku, a zda­ją­cy za­mie­nia je na SQL. Przy­kła­dy po­ni­żej stoją na dwóch ta­be­lach w re­la­cji: wycieczka z ko­lum­na­mi id, nazwa, cena i id_kraju oraz kraj z ko­lum­na­mi id i nazwa. Klucz obcy id_kraju wska­zu­je na kraj.id i to jest cała re­la­cja, o którą pyta jedna z kwe­rend. Nazwy w ar­ku­szu będą inne, kształt za­py­ta­nia ten sam.
Dwie pierw­sze kwe­ren­dy to zwykle SELECT (WYBIERZ): jedna wy­pi­su­je całą tabelę, druga zawęża ją wa­run­kiem.
1
2
SELECT * FROM wycieczka;
SELECT * FROM wycieczka WHERE cena < 2000;
Gwiazd­ka pasuje tylko tam, gdzie arkusz mówi o wszyst­kich danych albo wszyst­kich ko­lum­nach. Po­le­ce­nie „wypisz nazwę i cenę" znaczy dwie ko­lum­ny w po­da­nej ko­lej­no­ści, więc SELECT * dałby w tym miej­scu inny wynik niż za­mó­wio­ny. Ope­ra­to­ry wa­run­ku, LIKE, BETWEEN i sor­to­wa­nie opi­su­je lekcja o za­py­ta­niu SELECT.
Ko­lej­na kwe­ren­da „wy­ko­rzy­stu­je re­la­cję między ta­be­la­mi", czyli bierze dane z dwóch tabel naraz. Dwa zapisy dają ten sam wynik.
1
2
3
4
5
6
7
SELECT wycieczka.nazwa, kraj.nazwa
FROM wycieczka
INNER JOIN kraj ON wycieczka.id_kraju = kraj.id;
SELECT wycieczka.nazwa, kraj.nazwa
FROM wycieczka, kraj
WHERE wycieczka.id_kraju = kraj.id;
Pierw­szy używa INNER JOIN (ZŁĄCZENIE WEWNĘTRZNE), drugi wy­mie­nia obie tabele po FROM i wiąże je wa­run­kiem. Wa­ru­nek złą­cze­nia musi być, bo bez niego wy­cho­dzi ilo­czyn kar­te­zjań­ski, czyli każdy wiersz z każdym. Ko­lum­na o tej samej nazwie w obu ta­be­lach wymaga przed­rost­ka z nazwą tabeli, ina­czej serwer zgłosi, że nazwa jest nie­jed­no­znacz­na. Ro­dza­je złą­czeń są w lekcji o złą­cze­niach JOIN.
Za­miast jed­ne­go z za­py­tań arkusz bywa, że pyta o liczbę, sumę albo śred­nią, czyli o funk­cję agre­gu­ją­cą.
1
SELECT COUNT(*) FROM wycieczka WHERE id_kraju = 3;
Takie za­py­ta­nie zwraca jeden wiersz z jedną liczbą. Po­zo­sta­łe funk­cje, SUM, AVG, MIN i MAX, oraz gru­po­wa­nie opi­su­je lekcja o funk­cjach agre­gu­ją­cych.

Kwe­ren­da, która zmie­nia dane albo struk­tu­rę

Ostat­nia kwe­ren­da zwykle nic nie wy­pi­su­je, tylko zmie­nia bazę. W ar­ku­szu o biurze tu­ry­stycz­nym był to UPDATE (AKTUALIZUJ) pod­no­szą­cy cenę o 10 pro­cent.
1
UPDATE wycieczka SET cena = cena * 1.1;
Pod­wyż­ka o 10 pro­cent to mno­że­nie przez 1.1, nie do­da­nie dzie­się­ciu i nie mno­że­nie przez 0.1. Gdy arkusz ogra­ni­cza zmianę do części wier­szy, do­cho­dzi WHERE z wa­run­kiem. Gdy nie ogra­ni­cza, wa­run­ku nie ma i zmie­nia­ją się wszyst­kie wier­sze. Po­mi­nię­ty WHERE tam, gdzie arkusz go wy­ma­gał, psuje dane w całej tabeli i import trzeba po­wtó­rzyć od zera. Skład­nia jest w lekcji o INSERT, UPDATE i DELETE.
W ar­ku­szu o por­ta­lu dla węd­ka­rzy ostat­nie po­le­ce­nie do­kła­da­ło ko­lum­nę i mówiło o niej tyle, że ma przyj­mo­wać „je­dy­nie liczby z prze­dzia­łu <0, 255>". Dobór typu jest tu czę­ścią za­da­nia.
1
ALTER TABLE wycieczka ADD ocena TINYINT UNSIGNED;
Typ
Zakres war­to­ści
Kiedy z ar­ku­sza
TINYINT
-128 do 127
mała liczba, także ujemna
TINYINT UNSIGNED
0 do 255
liczby z prze­dzia­łu od 0 do 255
SMALLINT UNSIGNED
0 do 65535
rok, licz­nik od­wie­dzin
INT
około -2,1 do 2,1 mi­liar­da
klucz główny, duże liczby
DECIMAL(6,2)
liczba z dwoma miej­sca­mi po prze­cin­ku
cena, kwota
VARCHAR(30)
tekst do 30 znaków
nazwa, imię
DATE
data w po­sta­ci RRRR-MM-DD
termin, data uro­dze­nia
UNSIGNED (BEZ ZNAKU) od­bie­ra typowi war­to­ści ujemne i prze­su­wa górny koniec za­kre­su, dla­te­go sam TINYINT sięga 127, a TINYINT UNSIGNED sięga 255. Do ceny nie używa się typu FLOAT, bo liczy on przy­bli­że­nia­mi. Typy kolumn zbiera lekcja o CREATE, ALTER i DROP.

Zapis wy­ni­ków: kwe­ren­dy.txt i zrzuty kw1.png do kw4.png

Kwe­ren­dy wy­ko­nu­je się po jednej w za­kład­ce SQL w phpMyAdmin i po każdej robi zrzut ekranu. Nu­me­ra­cja plików idzie za nu­me­ra­cją po­le­ceń w ar­ku­szu: pierw­sze po­le­ce­nie to kw1.png, drugie kw2.png, i tak do kw4.png. Na zrzu­cie ma być widać treść za­py­ta­nia oraz to, co od­po­wie­dział serwer.
SELECT od­po­wia­da tabelą wy­ni­ków, więc zrzut obej­mu­je okno z wy­ni­kiem. UPDATE i ALTER TABLE nie zwra­ca­ją wier­szy, tylko ko­mu­ni­kat w ro­dza­ju „zmo­dy­fi­ko­wa­no 12 wier­szy" wraz z czasem wy­ko­na­nia, i ten ko­mu­ni­kat jest do­wo­dem wy­ko­na­nia po­le­ce­nia. Brak tabeli wy­ni­ków po UPDATE nie znaczy, że kwe­ren­da się nie udała.
Plik kwerendy.txt to zwykły plik tek­sto­wy w fol­de­rze PESEL: po jednej kwe­ren­dzie w linii, każda za­koń­czo­na śred­ni­kiem, w ko­lej­no­ści po­le­ceń z ar­ku­sza.
1
2
3
4
SELECT * FROM wycieczka;
SELECT * FROM wycieczka WHERE cena < 2000;
SELECT wycieczka.nazwa, kraj.nazwa FROM wycieczka INNER JOIN kraj ON wycieczka.id_kraju = kraj.id;
UPDATE wycieczka SET cena = cena * 1.1;
Za­pi­su­je się go w No­tat­ni­ku w ko­do­wa­niu UTF-8, żeby pol­skie znaki z wa­run­ków nie za­mie­ni­ły się w krzaki. Wy­god­niej­sza ko­lej­ność pracy jest taka: naj­pierw kwe­ren­da w pliku, potem wkle­je­nie jej do phpMyAdmin, bo plik zo­sta­je nawet wtedy, gdy prze­glą­dar­ka albo panel się za­mknie. Wszyst­kie cztery kształ­ty da się prze­ćwi­czyć wcze­śniej w placu zabaw SQL w prze­glą­dar­ce, bez sta­wia­nia XAMPP.

Gdzie traci się punkty

  • Baza za­ło­żo­na pod inną nazwą niż podana w ar­ku­szu. Skrypt PHP łączy się z nazwą z ar­ku­sza, więc ta po­mył­ka prze­wra­ca także ostat­ni re­zul­tat.
  • Import wy­ko­na­ny bez za­zna­czo­nej bazy: tabele po­wsta­ją w złym miej­scu albo wcale.
  • import.jpg obej­mu­ją­cy samo okno prze­glą­dar­ki, pod­czas gdy arkusz żąda całego ekranu z pa­skiem zadań.
  • Zrzut za­pi­sa­ny w innym for­ma­cie, niż mówi nazwa: PNG prze­mia­no­wa­ny na import.jpg albo JPG na­zwa­ny kw1.png.
  • SELECT * tam, gdzie arkusz wy­mie­nia kon­kret­ne ko­lum­ny, oraz wy­bra­ne ko­lum­ny tam, gdzie arkusz prosi o wszyst­kie dane.
  • Kwe­ren­da na dwóch ta­be­lach na­pi­sa­na bez wa­run­ku łą­czą­ce­go: wynik to ilo­czyn kar­te­zjań­ski.
  • UPDATE bez WHERE przy po­le­ce­niu ogra­ni­czo­nym do części wier­szy oraz WHERE do­pi­sa­ny tam, gdzie arkusz każe zmie­nić wszyst­kie wier­sze.
  • Pod­wyż­ka o 10 pro­cent za­pi­sa­na jako do­da­nie dzie­się­ciu za­miast mno­że­nia przez 1.1.
  • Typ nowej ko­lum­ny do­bra­ny na oko, na przy­kład INT przy prze­dzia­le od 0 do 255.
  • Kwe­ren­dy w kwerendy.txt bez śred­ni­ków, w innej ko­lej­no­ści niż po­le­ce­nia albo za­pi­sa­ne w pliku edy­to­ra tekstu za­miast w zwy­kłym pliku tek­sto­wym.
  • Pliki zo­sta­wio­ne na pul­pi­cie za­miast w fol­de­rze o nazwie PESEL. Poza tym fol­de­rem nie tra­fia­ją na płytę i nie pod­le­ga­ją ocenie.

Ściąga

Krok
Co zrobić
Plik do fol­de­ru PESEL
1
XAMPP Con­trol Panel: Start dla Apache i MySQL
brak
2
http://localhost/phpmyadmin, konto root, hasło puste
brak
3
Nowa baza o nazwie z ar­ku­sza (zwykle egzamin), utf8mb4_polish_ci
brak
4
Za­znacz bazę, za­kład­ka Import, plik .sql, ko­do­wa­nie utf-8, Wy­ko­naj
brak
5
Sprawdź tabele i wier­sze, zrzut całego ekranu z pa­skiem zadań
import.jpg
6
Kwe­ren­da: SELECT * FROM tabela;
kw1.png
7
Kwe­ren­da: SELECT z wa­run­kiem WHERE
kw2.png
8
Kwe­ren­da: dwie tabele złą­czo­ne po kluczu obcym
kw3.png
9
Kwe­ren­da: UPDATE albo ALTER TABLE ... ADD z do­bra­nym typem
kw4.png
10
Cztery kwe­ren­dy, po jednej w linii, każda ze śred­ni­kiem
kwerendy.txt
Pobierz ściągę PDF
ZAWODNIK
egzamin zawodowy INF.02 · INF.03 · INF.04
Serwer Discord
Egzaminy zawodowe IT/Matury/Studia
@yastor
© 2026 Zawodnik · by Yastor
Arkusze i zasady oceniania pochodzą z CKE. Serwis nie jest powiązany z Centralną Komisją Egzaminacyjną.