Baza SQL "sklep" - Struktura i dane
Tabela: produkty
CREATE TABLE produkty (
id_produktu INT PRIMARY KEY,
nazwa VARCHAR(50),
cena DECIMAL(10,2)
);
INSERT INTO produkty (id_produktu, nazwa, cena) VALUES
(1, 'Mysz', 50.00),
(2, 'Klawiatura', 120.00),
(3, 'Monitor', 800.00),
(4, 'Pendrive', 40.00),
(5, 'Słuchawki', 200.00);
Tabela: klienci
CREATE TABLE klienci (
id_klienta INT PRIMARY KEY,
imie VARCHAR(30),
nazwisko VARCHAR(30)
);
INSERT INTO klienci (id_klienta, imie, nazwisko) VALUES
(1, 'Jan', 'Kowalski'),
(2, 'Anna', 'Nowak'),
(3, 'Piotr', 'Wiśniewski');
Tabela: zamowienia
CREATE TABLE zamowienia (
id_zamowienia INT PRIMARY KEY,
id_klienta INT,
data_zamowienia DATE,
FOREIGN KEY (id_klienta) REFERENCES klienci(id_klienta)
);
INSERT INTO zamowienia (id_zamowienia, id_klienta, data_zamowienia) VALUES
(1, 1, '2025-09-01'),
(2, 2, '2025-09-05'),
(3, 1, '2025-09-10');
Tabela: zamowienia_produkty
CREATE TABLE zamowienia_produkty (
id_zamowienia INT,
id_produktu INT,
ilosc INT,
PRIMARY KEY(id_zamowienia, id_produktu),
FOREIGN KEY (id_zamowienia) REFERENCES zamowienia(id_zamowienia),
FOREIGN KEY (id_produktu) REFERENCES produkty(id_produktu)
);
INSERT INTO zamowienia_produkty (id_zamowienia, id_produktu, ilosc) VALUES
(1, 1, 2),
(1, 4, 1),
(2, 2, 1),
(2, 5, 2),
(3, 3, 1),
(3, 5, 1);
Ćwiczenia do bazy "sklep"
Ćwiczenie 1: Lista wszystkich produktów
SELECT * FROM produkty;
Ćwiczenie 2: Klienci zamawiający więcej niż jeden produkt
SELECT k.imie, k.nazwisko, COUNT(zp.id_produktu) AS liczba_produktow
FROM klienci k
JOIN zamowienia z ON k.id_klienta = z.id_klienta
JOIN zamowienia_produkty zp ON z.id_zamowienia = zp.id_zamowienia
GROUP BY k.id_klienta
HAVING liczba_produktow > 1;
Ćwiczenie 3: Łączna wartość zamówienia nr 1
SELECT SUM(p.cena * zp.ilosc) AS wartosc_zamowienia
FROM zamowienia_produkty zp
JOIN produkty p ON zp.id_produktu = p.id_produktu
WHERE zp.id_zamowienia = 1;
Ćwiczenie 4: Produkty kupowane przez Jana Kowalskiego
SELECT p.nazwa, zp.ilosc
FROM klienci k
JOIN zamowienia z ON k.id_klienta = z.id_klienta
JOIN zamowienia_produkty zp ON z.id_zamowienia = zp.id_zamowienia
JOIN produkty p ON zp.id_produktu = p.id_produktu
WHERE k.imie = 'Jan' AND k.nazwisko = 'Kowalski';
Ćwiczenie 5: Najdroższy produkt w zamówieniach
SELECT p.nazwa, p.cena
FROM produkty p
JOIN zamowienia_produkty zp ON p.id_produktu = zp.id_produktu
ORDER BY p.cena DESC
LIMIT 1;
Ćwiczenie 6: Średnia cena wszystkich zamówień
SELECT AVG(p.cena * zp.ilosc) AS srednia_wartosc
FROM zamowienia_produkty zp
JOIN produkty p ON zp.id_produktu = p.id_produktu;