Baza SQL - Turniej sportowy
Tabela: druzyny
CREATE TABLE druzyny (
id_druzyny INT PRIMARY KEY,
nazwa VARCHAR(50),
miasto VARCHAR(50)
);
INSERT INTO druzyny (id_druzyny, nazwa, miasto) VALUES
(1, 'Orły', 'Warszawa'),
(2, 'Wilki', 'Kraków'),
(3, 'Tygrysy', 'Gdańsk'),
(4, 'Lwy', 'Poznań');
Tabela: zawodnicy
CREATE TABLE zawodnicy (
id_zawodnika INT PRIMARY KEY,
imie VARCHAR(30),
nazwisko VARCHAR(30),
id_druzyny INT,
pozycja VARCHAR(20),
FOREIGN KEY (id_druzyny) REFERENCES druzyny(id_druzyny)
);
INSERT INTO zawodnicy (id_zawodnika, imie, nazwisko, id_druzyny, pozycja) VALUES
(1, 'Jan', 'Kowalski', 1, 'Napastnik'),
(2, 'Anna', 'Nowak', 1, 'Obrońca'),
(3, 'Piotr', 'Wiśniewski', 2, 'Bramkarz'),
(4, 'Katarzyna', 'Lewandowska', 2, 'Napastnik'),
(5, 'Marek', 'Zieliński', 3, 'Pomocnik'),
(6, 'Ewa', 'Kaczmarek', 4, 'Obrońca');
Tabela: mecze
CREATE TABLE mecze (
id_meczu INT PRIMARY KEY,
id_druzyny1 INT,
id_druzyny2 INT,
data_meczu DATE,
FOREIGN KEY (id_druzyny1) REFERENCES druzyny(id_druzyny),
FOREIGN KEY (id_druzyny2) REFERENCES druzyny(id_druzyny)
);
INSERT INTO mecze (id_meczu, id_druzyny1, id_druzyny2, data_meczu) VALUES
(1, 1, 2, '2025-09-01'),
(2, 3, 4, '2025-09-02'),
(3, 1, 3, '2025-09-05'),
(4, 2, 4, '2025-09-06');
Tabela: wyniki
CREATE TABLE wyniki (
id_wyniku INT PRIMARY KEY,
id_meczu INT,
gole_druzyny1 INT,
gole_druzyny2 INT,
FOREIGN KEY (id_meczu) REFERENCES mecze(id_meczu)
);
INSERT INTO wyniki (id_wyniku, id_meczu, gole_druzyny1, gole_druzyny2) VALUES
(1, 1, 3, 2),
(2, 2, 1, 1),
(3, 3, 2, 0),
(4, 4, 0, 3);
Ćwiczenia SQL - Turniej sportowy
Ćwiczenie 1: Lista drużyn
SELECT * FROM druzyny;
Ćwiczenie 2: Zawodnicy i ich drużyny
SELECT z.imie, z.nazwisko, d.nazwa AS drużyna
FROM zawodnicy z
JOIN druzyny d ON z.id_druzyny = d.id_druzyny;
Ćwiczenie 3: Wyniki meczów
SELECT m.id_meczu, d1.nazwa AS druzyna1, d2.nazwa AS druzyna2, w.gole_druzyny1, w.gole_druzyny2
FROM mecze m
JOIN druzyny d1 ON m.id_druzyny1 = d1.id_druzyny
JOIN druzyny d2 ON m.id_druzyny2 = d2.id_druzyny
JOIN wyniki w ON m.id_meczu = w.id_meczu;
Ćwiczenie 4: Drużyny, które wygrały swoje mecze
SELECT CASE
WHEN w.gole_druzyny1 > w.gole_druzyny2 THEN d1.nazwa
WHEN w.gole_druzyny2 > w.gole_druzyny1 THEN d2.nazwa
ELSE 'Remis'
END AS zwyciezca
FROM mecze m
JOIN druzyny d1 ON m.id_druzyny1 = d1.id_druzyny
JOIN druzyny d2 ON m.id_druzyny2 = d2.id_druzyny
JOIN wyniki w ON m.id_meczu = w.id_meczu;
Ćwiczenie 5: Suma goli zdobytych przez każdą drużynę
SELECT d.nazwa,
SUM(CASE WHEN m.id_druzyny1 = d.id_druzyny THEN w.gole_druzyny1
WHEN m.id_druzyny2 = d.id_druzyny THEN w.gole_druzyny2
END) AS gole
FROM druzyny d
JOIN mecze m ON d.id_druzyny = m.id_druzyny1 OR d.id_druzyny = m.id_druzyny2
JOIN wyniki w ON m.id_meczu = w.id_meczu
GROUP BY d.id_druzyny;
Ćwiczenie 6: Mecze, w których padł remis
SELECT m.id_meczu, d1.nazwa AS druzyna1, d2.nazwa AS druzyna2
FROM mecze m
JOIN druzyny d1 ON m.id_druzyny1 = d1.id_druzyny
JOIN druzyny d2 ON m.id_druzyny2 = d2.id_druzyny
JOIN wyniki w ON m.id_meczu = w.id_meczu
WHERE w.gole_druzyny1 = w.gole_druzyny2;