🎮 Turniej E-sportowy - Grupowanie danych i użytkownicy SQL

Nowy zestaw ćwiczeń dla uczniów – praca z danymi i uprawnieniami MySQL


Ćwiczenia SQL – Grupowanie danych i użytkownicy


Ćwiczenie 1 – Grupowanie danych

Cel: Nauka korzystania z funkcji grupujących i klauzuli GROUP BY.

Zadanie: Utwórz tabelę sprzedaz z kolumnami id, produkt, ilosc, cena, data_sprzedazy.

Wstaw przykładowe dane, a następnie wykonaj zapytania:

SELECT produkt, SUM(ilosc) AS suma_ilosci
FROM sprzedaz
GROUP BY produkt;

SELECT produkt, AVG(cena) AS srednia_cena
FROM sprzedaz
GROUP BY produkt;

SELECT produkt, COUNT(*) AS liczba_transakcji
FROM sprzedaz
GROUP BY produkt
HAVING COUNT(*) > 2;

Wskazówka: Użyj klauzuli HAVING do filtrowania wyników po grupowaniu.

Ćwiczenie 2 – Użytkownicy i uprawnienia

Cel: Zrozumienie, jak tworzyć użytkowników i nadawać im uprawnienia w MySQL.

Zadanie: Utwórz nowego użytkownika bazy danych, nadaj mu określone uprawnienia i przetestuj ich działanie.

CREATE USER 'uczen'@'localhost' IDENTIFIED BY 'haslo123';

GRANT SELECT, INSERT ON sklep.* TO 'uczen'@'localhost';

REVOKE INSERT ON sklep.* FROM 'uczen'@'localhost';

SHOW GRANTS FOR 'uczen'@'localhost';

DROP USER 'uczen'@'localhost';

Wskazówka: Użyj SHOW GRANTS, aby sprawdzić przyznane uprawnienia. Pamiętaj, że tylko administrator (root) może zarządzać użytkownikami.


🧠 Utrwalanie wiedzy: Połącz oba tematy – spróbuj utworzyć użytkownika, który ma prawo wykonywać zapytania grupujące w wybranej bazie danych.

I. Grupowanie danych (GROUP BY, HAVING, funkcje agregujące)

Ćwiczenie 1: Liczba rozegranych meczów przez każdą drużynę

Opis: Wyświetl nazwy drużyn oraz liczbę rozegranych przez nie meczów.

Rezultat: tabela z kolumnami Drużyna | Liczba_meczy
SELECT d.nazwa AS Drużyna, COUNT(*) AS Liczba_meczy
FROM mecze m
JOIN druzyny d ON d.id = m.druzynaA_id OR d.id = m.druzynaB_id
GROUP BY d.nazwa;

Ćwiczenie 2: Średnia liczba fragów dla każdej drużyny

Opis: Policz średni wynik uzyskany przez każdą drużynę.

Rezultat: tabela z kolumnami Drużyna | Średni_wynik
SELECT d.nazwa AS Drużyna,
AVG(
  CASE 
    WHEN d.id = m.druzynaA_id THEN wynikA
    WHEN d.id = m.druzynaB_id THEN wynikB
  END
) AS Średni_wynik
FROM mecze m
JOIN druzyny d ON d.id IN (m.druzynaA_id, m.druzynaB_id)
GROUP BY d.nazwa;

Ćwiczenie 3: Drużyny, które rozegrały więcej niż 2 mecze

Rezultat: tabela z drużynami, które brały udział w więcej niż 2 meczach
SELECT d.nazwa, COUNT(*) AS Mecze
FROM mecze m
JOIN druzyny d ON d.id IN (m.druzynaA_id, m.druzynaB_id)
GROUP BY d.nazwa
HAVING Mecze > 2;

Ćwiczenie 4: Najwyższy i najniższy wynik w turnieju

Rezultat: kolumny Max_wynik i Min_wynik
SELECT MAX(GREATEST(wynikA, wynikB)) AS Max_wynik,
MIN(LEAST(wynikA, wynikB)) AS Min_wynik
FROM mecze;

Ćwiczenie 5: Suma fragów w każdym dniu turnieju

Rezultat: tabela z kolumnami Data | Suma_fragów
SELECT data_meczu, SUM(wynikA + wynikB) AS Suma_fragów
FROM mecze
GROUP BY data_meczu
ORDER BY data_meczu;

II. Użytkownicy i uprawnienia (MySQL GRANT / REVOKE)

Ćwiczenie 6: Utworzenie użytkownika administratora turnieju

Rezultat: komunikat o poprawnym utworzeniu użytkownika
CREATE USER 'admin_turnieju'@'localhost' IDENTIFIED BY 'CS2Master!';

Ćwiczenie 7: Nadanie pełnych uprawnień do bazy turniej

Rezultat: użytkownik może modyfikować wszystkie tabele w bazie
GRANT ALL PRIVILEGES ON turniej.* TO 'admin_turnieju'@'localhost';

Ćwiczenie 8: Użytkownik „sędzia” z prawem tylko do odczytu

CREATE USER 'sedzia'@'localhost' IDENTIFIED BY 'csjudge!';
GRANT SELECT ON turniej.* TO 'sedzia'@'localhost';

Ćwiczenie 9: Drużynowy użytkownik z ograniczonym dostępem

CREATE USER 'team_user'@'localhost' IDENTIFIED BY 'team123!';
GRANT SELECT ON turniej.mecze TO 'team_user'@'localhost';
GRANT SELECT ON turniej.druzyny TO 'team_user'@'localhost';

Ćwiczenie 10: Cofnięcie wszystkich uprawnień

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'team_user'@'localhost';