Ralibajnok_2022_tavasz_idegen

Ralibajnok_2022_tavasz_idegen

I1. Adatbázis létrehozása és adatok importálása

1.1 Adatbázis létrehozása

CREATE DATABASE rali;

USE rali;

1.2 Táblák létrehozása

CREATE TABLE versenyzo (

id INT PRIMARY KEY, -- Egyedi azonosító

nev VARCHAR(100) UNIQUE -- Versenyző neve

);

CREATE TABLE bajnok (

ev INT PRIMARY KEY, -- Év (kulcs)

pilotaid INT, -- Pilóta azonosítója

navigatorid INT, -- Navigátor azonosítója

csapat VARCHAR(100), -- Csapat neve

auto VARCHAR(100), -- Versenyautó gyártója vagy típusa

FOREIGN KEY (pilotaid) REFERENCES versenyzo(id),

FOREIGN KEY (navigatorid) REFERENCES versenyzo(id)

);

1.3 Adatok importálása fájlból

LOAD DATA INFILE 'versenyzo.txt'

INTO TABLE versenyzo

FIELDS TERMINATED BY '\t'

LINES TERMINATED BY '\n'

IGNORE 1 ROWS;

LOAD DATA INFILE 'bajnok.txt'

INTO TABLE bajnok

FIELDS TERMINATED BY '\t'

LINES TERMINATED BY '\n'

IGNORE 1 ROWS;j

LOAD DATA LOCAL INFILE 'versenyzo.txt' INTO TABLE versenyzo ...

2. Csapatnevek, amelyek tartalmazzák a "Rally" szót (2rally)

SELECT DISTINCT csapat

FROM bajnok

WHERE csapat LIKE '%Rally%'

ORDER BY csapat;

Magyarázat:

  • LIKE '%Rally%' → Megkeresi azokat a csapatokat, ahol a név tartalmazza a "Rally" szót.
  • DISTINCT → Egy csapatot csak egyszer listáz ki.
  • ORDER BY csapat → Ábécé sorrendbe rendezi.

3. 2000–2010 közötti évek navigátorai (3iranyitok)

SELECT bajnok.ev, versenyzo.nev AS navigator

FROM bajnok

JOIN versenyzo ON bajnok.navigatorid = versenyzo.id

WHERE bajnok.ev BETWEEN 2000 AND 2010

ORDER BY bajnok.ev;

Magyarázat:

  • JOIN a bajnok és versenyzo táblára a navigatorid alapján.
  • WHERE bajnok.ev BETWEEN 2000 AND 2010 → Csak a 2000–2010 közötti éveket listázza ki.
  • ORDER BY bajnok.ev → Évek szerinti sorrend.

4. Kiss Ferenc pilóta navigátorai (4kiss)

SELECT bajnok.ev, versenyzo.nev AS navigator

FROM bajnok

JOIN versenyzo AS pilota ON bajnok.pilotaid = pilota.id

JOIN versenyzo AS navigator ON bajnok.navigatorid = navigator.id

WHERE pilota.nev = 'Kiss Ferenc'

ORDER BY bajnok.ev;

Magyarázat:

  • Két JOIN:
  • Az egyik a pilótára (pilotaid).
  • A másik a navigátorra (navigatorid).
  • Csak azokat az éveket listázza ki, ahol a pilóta Kiss Ferenc volt.

5. A legtöbbször bajnok pilóta (5csillag)

SELECT versenyzo.nev, COUNT(bajnok.ev) AS bajnoki_cimek

FROM bajnok

JOIN versenyzo ON bajnok.pilotaid = versenyzo.id

GROUP BY versenyzo.nev

ORDER BY bajnoki_cimek DESC

LIMIT 1;

Magyarázat:

  • COUNT(bajnok.ev) → Megszámolja, hányszor nyert bajnokságot egy pilóta.
  • GROUP BY versenyzo.nev → Pilótánként csoportosít.
  • ORDER BY bajnoki_cimek DESC → A legtöbb bajnoki címmel rendelkező pilóta kerül előre.
  • LIMIT 1 → Csak az első helyezettet adja vissza.

6. Navigátorok, bajnoki éveik és pilótáik (6versenytars)

SELECT versenyzo.nev AS navigator, bajnok.ev, pilota.nev AS pilota

FROM bajnok

JOIN versenyzo AS pilota ON bajnok.pilotaid = pilota.id

JOIN versenyzo AS navigator ON bajnok.navigatorid = navigator.id

ORDER BY navigator, bajnok.ev;

Magyarázat:

  • Mindegyik navigátorra kigyűjti:
  • a bajnoki címet szerző éveket
  • és pilótájukat
  • ORDER BY navigator, bajnok.ev →
  • Először navigátoronként rendezi a listát.
  • Utána az éveket időrendbe teszi.