🎯 Cel ćwiczenia
MySQL to najpopularniejszy system zarządzania relacyjnymi bazami danych (RDBMS). W tym ćwiczeniu nauczysz się tworzyć bazy danych, tabele oraz wykonywać zapytania SQL do pobierania i modyfikowania danych.
Czego się nauczysz:
- Tworzenia baz danych i tabel
- Podstawowych zapytań SQL (SELECT, INSERT, UPDATE, DELETE)
- Filtrowania i sortowania danych
- Łączenia tabel (JOIN)
- Grupowania i agregacji danych
- Pracy z XAMPP i phpMyAdmin
📥 Pobierz bazę danych do ćwiczeń
Przygotowałem gotową bazę danych ze szkołą - uczniowie, nauczyciele, przedmioty i oceny.
Plik zawiera kompletną bazę z przykładowymi danymi do importu w phpMyAdmin
🚀 Część 1: Konfiguracja XAMPP
Krok 1: Uruchomienie XAMPP
- Otwórz XAMPP Control Panel
- Kliknij Start przy Apache
- Kliknij Start przy MySQL
- Oba powinny świecić się na zielono
Krok 2: Otwarcie phpMyAdmin
- Otwórz przeglądarkę
- Wejdź na adres:
http://localhost/phpmyadmin - Zobaczysz interfejs phpMyAdmin
- Sprawdź czy nie masz uruchomionego Skype (używa portu 80)
- Sprawdź czy antywirus nie blokuje XAMPP
- Uruchom XAMPP jako administrator
Krok 3: Import bazy danych
- W phpMyAdmin kliknij zakładkę "Import"
- Kliknij "Wybierz plik"
- Wybierz pobrany plik
szkola.sql - Kliknij "Wykonaj" na dole strony
- Baza danych szkola powinna pojawić się po lewej stronie
📊 Część 2: Struktura Bazy Danych
Baza szkola zawiera 4 tabele:
Tabela: uczniowie
| Kolumna | Typ | Opis |
|---|---|---|
| id | INT | Unikalny identyfikator (klucz główny) |
| imie | VARCHAR(50) | Imię ucznia |
| nazwisko | VARCHAR(50) | Nazwisko ucznia |
| klasa | VARCHAR(10) | Oznaczenie klasy (np. 3A) |
| data_urodzenia | DATE | Data urodzenia |
Tabela: nauczyciele
| Kolumna | Typ | Opis |
|---|---|---|
| id | INT | Unikalny identyfikator |
| imie | VARCHAR(50) | Imię nauczyciela |
| nazwisko | VARCHAR(50) | Nazwisko nauczyciela |
| przedmiot | VARCHAR(50) | Przedmiot nauczany |
Tabela: przedmioty
| Kolumna | Typ | Opis |
|---|---|---|
| id | INT | Unikalny identyfikator |
| nazwa | VARCHAR(50) | Nazwa przedmiotu |
| nauczyciel_id | INT | ID nauczyciela (klucz obcy) |
Tabela: oceny
| Kolumna | Typ | Opis |
|---|---|---|
| id | INT | Unikalny identyfikator |
| uczen_id | INT | ID ucznia (klucz obcy) |
| przedmiot_id | INT | ID przedmiotu (klucz obcy) |
| ocena | INT | Wartość oceny (1-6) |
| data | DATE | Data wystawienia oceny |
📝 Część 3: Podstawowe Zapytania SQL
Przykład 1: SELECT - Pobieranie wszystkich danych
* oznacza "wszystkie kolumny". Możesz też wybrać konkretne kolumny oddzielone przecinkami.
Przykład 2: WHERE - Filtrowanie danych
Przykład 3: ORDER BY - Sortowanie
Przykład 4: INSERT - Dodawanie danych
Przykład 5: UPDATE - Aktualizacja danych
Przykład 6: DELETE - Usuwanie danych
🔗 Część 4: Łączenie Tabel (JOIN)
Przykład 7: INNER JOIN - Łączenie tabel
📊 Część 5: Funkcje Agregujące
Przykład 8: COUNT, AVG, SUM, MIN, MAX
✏️ ZADANIA PRAKTYCZNE
Zadanie 1: Podstawowe zapytania SELECT
ŁATWYWykonaj następujące zapytania:
- Wyświetl wszystkich uczniów
- Wyświetl tylko imiona i nazwiska uczniów
- Wyświetl uczniów z klasy 2B
- Wyświetl uczniów posortowanych alfabetycznie po nazwisku
- Wyświetl 5 pierwszych uczniów (użyj LIMIT 5)
Zadanie 2: Filtrowanie i wyszukiwanie
ŁATWYNapisz zapytania które:
- Znajdą uczniów urodzonych po 2008 roku
- Znajdą uczniów z nazwiskiem zawierającym literę 'a'
- Pokażą nauczycieli matematyki
- Pokażą oceny lepsze niż 3
- Pokażą oceny z ostatnich 30 dni (użyj DATE_SUB)
Zadanie 3: Dodawanie i modyfikacja
ŚREDNIWykonaj następujące operacje:
- Dodaj siebie jako ucznia do tabeli uczniowie
- Dodaj nowego nauczyciela informatyki
- Dodaj przedmiot "Programowanie" z przypisaniem do nauczyciela
- Zmień swoją klasę na 4A
- Dodaj sobie ocenę 6 z programowania
Zadanie 4: Zapytania z JOIN
ŚREDNIStwórz zapytania które pokażą:
- Wszystkie oceny wraz z imionami i nazwiskami uczniów
- Oceny wraz z nazwami przedmiotów
- Kompletny widok: uczeń, przedmiot, ocena, data, nauczyciel
- Oceny ucznia o konkretnym ID (np. ID=1)
- Wszystkie oceny z matematyki
Zadanie 5: Funkcje agregujące i GROUP BY
ŚREDNIOblicz i wyświetl:
- Średnią ocen każdego ucznia
- Liczbę ocen dla każdego przedmiotu
- Najwyższą ocenę każdego ucznia
- Średnią ocen w każdej klasie
- Ile przedmiotów prowadzi każdy nauczyciel
Zadanie 6: Zaawansowane zapytania
TRUDNYWyzwania:
- Znajdź uczniów, którzy mają średnią powyżej 4.5
- Pokaż nauczycieli, którzy nie mają przypisanych przedmiotów (LEFT JOIN)
- Wyświetl TOP 3 uczniów z najlepszymi średnimi
- Policz ile uczniów otrzymało każdą ocenę (1-6)
- Znajdź przedmioty, z których nie ma jeszcze żadnych ocen
- Stwórz ranking klas według średniej ocen
Zadanie 7: Tworzenie własnej bazy
TRUDNYCel: Stwórz od zera bazę danych "biblioteka"
Wymagania:
- Tabela "ksiazki" (id, tytul, autor, rok_wydania, isbn)
- Tabela "czytelnicy" (id, imie, nazwisko, email, data_rejestracji)
- Tabela "wypozyczenia" (id, ksiazka_id, czytelnik_id, data_wypozyczenia, data_zwrotu)
- Dodaj klucze główne i obce
- Wstaw przykładowe dane (min. 5 książek, 5 czytelników)
- Napisz zapytania pokazujące:
- Aktualnie wypożyczone książki
- Historię wypożyczeń konkretnego czytelnika
- Najpopularniejsze książki
💡 WSKAZÓWKI I NAJLEPSZE PRAKTYKI
1. Zawsze używaj WHERE w UPDATE i DELETE
Bez klauzuli WHERE zaktualizujesz lub usuniesz WSZYSTKIE rekordy!
2. Używaj aliasów dla czytelności
3. Testuj na kopii danych
Przed wykonaniem UPDATE/DELETE na prawdziwych danych, najpierw wykonaj SELECT z tymi samymi warunkami, żeby sprawdzić co zostanie zmienione:
4. Używaj LIMIT do testowania
Gdy pracujesz z dużą ilością danych, użyj LIMIT:
Częste błędy do uniknięcia:
- ❌ Brak średnika na końcu zapytania
- ❌ Brak apostrofów wokół tekstów:
WHERE imie = Jan(powinno być'Jan') - ❌ Używanie przecinka zamiast AND w WHERE:
WHERE klasa = '1A', imie = 'Jan' - ❌ Literówki w nazwach kolumn lub tabel
- ❌ Zapominanie o PRIMARY KEY przy tworzeniu tabel
- ❌ UPDATE/DELETE bez WHERE (!!!)
📚 SQL Cheat Sheet
Podstawowe polecenia:
🔍 Operatory w WHERE
| Operator | Opis | Przykład |
|---|---|---|
| = | Równe | WHERE klasa = '3A' |
| != | Różne | WHERE klasa != '1A' |
| > | Większe | WHERE ocena > 3 |
| < | Mniejsze | WHERE ocena < 5 |
| >= | Większe lub równe | WHERE ocena >= 4 |
| LIKE | Zawiera wzorzec | WHERE nazwisko LIKE 'Kow%' |
| IN | W zbiorze wartości | WHERE klasa IN ('1A', '2A', '3A') |
| BETWEEN | W zakresie | WHERE ocena BETWEEN 3 AND 5 |
| AND | Oba warunki prawdziwe | WHERE klasa='1A' AND ocena=6 |
| OR | Jeden z warunków prawdziwy | WHERE klasa='1A' OR klasa='1B' |
📊 Typy Danych MySQL
| Typ | Opis | Przykład użycia |
|---|---|---|
| INT | Liczba całkowita | wiek, id, liczba_punktow |
| VARCHAR(n) | Tekst do n znaków | imie, nazwisko, email |
| TEXT | Długi tekst | opis, komentarz |
| DATE | Data (YYYY-MM-DD) | data_urodzenia |
| DATETIME | Data i czas | data_utworzenia |
| DECIMAL(m,d) | Liczba dziesiętna | cena, srednia |
| BOOLEAN | Prawda/Fałsz (0/1) | aktywny, zatwierdzony |
📚 DODATKOWE ZASOBY
🎓 Test Wiedzy
Pytania kontrolne - sprawdź swoją wiedzę!
- Co oznacza SQL? (Odp: Structured Query Language)
- Czym różni się SELECT od SELECT DISTINCT? (Odp: DISTINCT usuwa duplikaty)
- Co robi klucz główny (PRIMARY KEY)? (Odp: Unikalnie identyfikuje każdy rekord)
- Co to jest klucz obcy (FOREIGN KEY)? (Odp: Odniesienie do klucza głównego innej tabeli)
- Jaka jest różnica między INNER JOIN a LEFT JOIN? (Odp: INNER zwraca tylko dopasowane, LEFT wszystkie z lewej tabeli)
- Co robi funkcja COUNT(*)? (Odp: Liczy liczbę wierszy)
- Czym różni się WHERE od HAVING? (Odp: WHERE filtruje przed, HAVING po GROUP BY)
- Co oznacza AUTO_INCREMENT? (Odp: Automatyczne zwiększanie wartości)
🏆 Projekt Końcowy
Stwórz system zarządzania sklepem internetowym
Wymagania:
- Tabele: produkty, kategorie, klienci, zamowienia, szczegoly_zamowien
- Relacje między tabelami (klucze obce)
- Minimum 20 produktów w różnych kategoriach
- 10 przykładowych klientów
- 5 przykładowych zamówień
Zapytania do wykonania:
- Wyświetl wszystkie produkty z danej kategorii
- Pokaż 10 najdroższych produktów
- Wyświetl historię zamówień konkretnego klienta
- Oblicz całkowitą wartość każdego zamówienia
- Znajdź najpopularniejsze produkty (najczęściej kupowane)
- Pokaż klientów, którzy wydali najwięcej pieniędzy
- Wyświetl produkty, które nigdy nie zostały kupione
🎉 PODSUMOWANIE
Gratulacje! Po ukończeniu tego ćwiczenia powinieneś umieć:
- ✅ Tworzyć bazy danych i tabele
- ✅ Wykonywać podstawowe zapytania SQL (SELECT, INSERT, UPDATE, DELETE)
- ✅ Filtrować i sortować dane
- ✅ Łączyć dane z wielu tabel (JOIN)
- ✅ Używać funkcji agregujących
- ✅ Projektować strukturę bazy danych
- ✅ Pracować z XAMPP i phpMyAdmin
Następny krok: Naucz się łączyć MySQL z PHP, aby tworzyć dynamiczne strony internetowe!
Powodzenia w pracy z bazami danych! 🗄️🚀
💼 Dlaczego SQL jest ważny?
- SQL jest używany przez 95% firm korzystających z baz danych
- Umiejętność SQL to jedna z najczęściej wymaganych kompetencji w IT
- Prawie każda aplikacja webowa korzysta z bazy danych
- SQL jest niezależny od języka programowania
- Znajomość SQL otwiera drzwi do kariery jako Database Administrator, Data Analyst czy Backend Developer