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;