Ten zestaw pracuje na jednej bazie firma. Najpierw uruchom blok startowy (0), a potem wykonuj zadania 1–20, nie niszcząc tabel ani relacji.
- Środowisko: XAMPP / MySQL (phpMyAdmin → zakładka SQL).
- Blok startowy uruchamiasz raz, kolejne zadania zakładają jego wykonanie.
0Przygotowanie bazy danych (blok startowy)
Utwórz bazę danych i wszystkie wymagane tabele, aby kolejne zadania wykonywały się na jednym spójnym schemacie.
-- 0. Utworzenie bazy danych i wybranie jej
CREATE DATABASE IF NOT EXISTS firma
CHARACTER SET utf8mb4
COLLATE utf8mb4_polish_ci;
USE firma;
-- 1. Tabela Pracownicy
CREATE TABLE IF NOT EXISTS Pracownicy (
ID INT AUTO_INCREMENT PRIMARY KEY,
Imie VARCHAR(50),
Nazwisko VARCHAR(50),
Stanowisko VARCHAR(50),
Wynagrodzenie DECIMAL(10,2)
);
-- 2. Dane przykładowe do Pracownicy
INSERT INTO Pracownicy (Imie, Nazwisko, Stanowisko, Wynagrodzenie) VALUES
('Jan', 'Kowalski', 'Programista', 6000.00),
('Anna', 'Nowak', 'Tester', 5000.00),
('Piotr','Wiśniewski', 'Administrator', 5500.00);
-- 3. Tabela Projekty
CREATE TABLE IF NOT EXISTS Projekty (
ID INT AUTO_INCREMENT PRIMARY KEY,
NazwaProjektu VARCHAR(100),
Status VARCHAR(20)
);
-- 4. Dane przykładowe do Projekty
INSERT INTO Projekty (NazwaProjektu, Status) VALUES
('System ERP', 'Aktywny'),
('Aplikacja Mobilna', 'Zawieszony'),
('Strona Firmowa', 'Aktywny');
-- 5. Dodanie kolumny ID_Projekt do Pracownicy (jeśli jej nie ma)
ALTER TABLE Pracownicy
ADD COLUMN IF NOT EXISTS ID_Projekt INT NULL;
-- 6. Dodanie klucza obcego (MySQL 8)
ALTER TABLE Pracownicy
ADD CONSTRAINT IF NOT EXISTS FK_Projekt
FOREIGN KEY (ID_Projekt) REFERENCES Projekty(ID);
-- 7. Przypisanie pracowników do projektów
UPDATE Pracownicy SET ID_Projekt = 1 WHERE Nazwisko = 'Kowalski';
UPDATE Pracownicy SET ID_Projekt = 1 WHERE Nazwisko = 'Nowak';
UPDATE Pracownicy SET ID_Projekt = 3 WHERE Nazwisko = 'Wiśniewski';
1Struktura tabeli Pracownicy
Utwórz tabelę Pracownicy (MySQL, z AUTO_INCREMENT, bez typu CURRENCY).
CREATE TABLE Pracownicy (
ID INT AUTO_INCREMENT PRIMARY KEY,
Imie VARCHAR(50),
Nazwisko VARCHAR(50),
Stanowisko VARCHAR(50),
Wynagrodzenie DECIMAL(10,2)
);
2Wstawianie danych do Pracownicy
Dodaj co najmniej trzech pracowników do tabeli Pracownicy.
INSERT INTO Pracownicy (Imie, Nazwisko, Stanowisko, Wynagrodzenie) VALUES
('Jan', 'Kowalski', 'Programista', 6000.00),
('Anna', 'Nowak', 'Tester', 5000.00),
('Piotr','Wiśniewski', 'Administrator', 5500.00);
3Formularz dodawania pracownika
Stwórz formularz HTML przesyłający dane do dodaj_pracownika.php, który zapisze je w tabeli Pracownicy.
<form action="dodaj_pracownika.php" method="post">
Imię:
<input type="text" name="imie" required><br>
Nazwisko:
<input type="text" name="nazwisko" required><br>
Stanowisko:
<input type="text" name="stanowisko" required><br>
Wynagrodzenie:
<input type="number" step="0.01" name="wynagrodzenie" required><br>
<input type="submit" value="Dodaj pracownika">
</form>
4Raport pracowników z wynagrodzeniem > 5000
Wyświetl wszystkich pracowników o wynagrodzeniu większym niż 5000.
SELECT *
FROM Pracownicy
WHERE Wynagrodzenie > 5000;
5Dodanie kolumny Email
Dodaj kolumnę Email do tabeli Pracownicy.
ALTER TABLE Pracownicy
ADD COLUMN Email VARCHAR(100);
6Aktualizacja wynagrodzeń na 7000
Zmień wynagrodzenie wszystkich pracowników na 7000.
UPDATE Pracownicy
SET Wynagrodzenie = 7000.00;
7Usunięcie pracowników z niską płacą
Usuń wszystkich pracowników o wynagrodzeniu mniejszym niż 5000.
DELETE FROM Pracownicy
WHERE Wynagrodzenie < 5000.00;
8Indeks na Nazwisko
Utwórz indeks na kolumnie Nazwisko w tabeli Pracownicy.
CREATE INDEX idx_nazwisko
ON Pracownicy(Nazwisko);
9Widok z podstawowymi danymi pracowników
Stwórz widok wyświetlający tylko imię, nazwisko i stanowisko pracowników.
CREATE VIEW WidokPracownikow AS
SELECT Imie, Nazwisko, Stanowisko
FROM Pracownicy;
10Usunięcie widoku WidokPracownikow
Usuń widok WidokPracownikow (jeśli istnieje).
DROP VIEW IF EXISTS WidokPracownikow;
11Złączenie Pracownicy–Projekty
Wyświetl imię i nazwisko pracownika oraz nazwę projektu, w którym pracuje.
SELECT P.Imie, P.Nazwisko, PR.NazwaProjektu
FROM Pracownicy AS P
INNER JOIN Projekty AS PR
ON P.ID_Projekt = PR.ID;
12SUMA wynagrodzeń
Oblicz łączną sumę wynagrodzeń wszystkich pracowników.
SELECT SUM(Wynagrodzenie) AS SumaWynagrodzen
FROM Pracownicy;
13Średnia wg stanowiska
Wyświetl stanowisko i średnie wynagrodzenie dla każdego stanowiska.
SELECT Stanowisko,
AVG(Wynagrodzenie) AS SrednieWynagrodzenie
FROM Pracownicy
GROUP BY Stanowisko;
14Stanowiska z wysoką średnią płacą
Wyświetl stanowiska, dla których średnie wynagrodzenie jest większe niż 6000.
SELECT Stanowisko,
AVG(Wynagrodzenie) AS SrednieWynagrodzenie
FROM Pracownicy
GROUP BY Stanowisko
HAVING AVG(Wynagrodzenie) > 6000;
15Pracownicy powyżej średniej
Wyświetl pracowników, których wynagrodzenie jest wyższe niż średnie wynagrodzenie w firmie.
SELECT Imie, Nazwisko, Wynagrodzenie
FROM Pracownicy
WHERE Wynagrodzenie > (
SELECT AVG(Wynagrodzenie) FROM Pracownicy
);
16Projekty z/do pracowników (LEFT JOIN)
Wyświetl nazwę projektu oraz stanowisko pracownika, pokazując wszystkie projekty (nawet te bez przypisanych pracowników).
SELECT PR.NazwaProjektu, P.Stanowisko
FROM Projekty AS PR
LEFT JOIN Pracownicy AS P
ON PR.ID = P.ID_Projekt;
17Status wynagrodzenia (CASE)
Wyświetl imię, nazwisko i kolumnę StatusWynagrodzenia z wartością „Wysokie” lub „Standardowe”.
SELECT Imie,
Nazwisko,
Wynagrodzenie,
CASE
WHEN Wynagrodzenie > 6500 THEN 'Wysokie'
ELSE 'Standardowe'
END AS StatusWynagrodzenia
FROM Pracownicy;
18Usunięcie klucza obcego FK_Projekt
Usuń klucz obcy z kolumny ID_Projekt w tabeli Pracownicy.
ALTER TABLE Pracownicy
DROP FOREIGN KEY FK_Projekt;
FK_Projekt) można sprawdzić w INFORMATION_SCHEMA lub w phpMyAdmin w zakładce „Relacje”.
19Unikalne stanowiska
Wyświetl unikalne nazwy stanowisk, na których pracują pracownicy.
SELECT DISTINCT Stanowisko
FROM Pracownicy;
20Klienci i relacja 1:N z Projektami
Stwórz tabelę Klienci i połącz ją relacją 1:N z tabelą Projekty.
-- Tabela Klienci
CREATE TABLE IF NOT EXISTS Klienci (
ID INT AUTO_INCREMENT PRIMARY KEY,
Nazwa VARCHAR(100)
);
-- Dodanie kolumny ID_Klienta do Projektów
ALTER TABLE Projekty
ADD COLUMN IF NOT EXISTS ID_Klienta INT NULL;
-- Dodanie klucza obcego
ALTER TABLE Projekty
ADD CONSTRAINT IF NOT EXISTS FK_Klient
FOREIGN KEY (ID_Klienta) REFERENCES Klienci(ID);