
Halhatatlanok_2024_tavasz_közéHalhatatlanok
Halhatatlanok_2024_tavasz_középszint_idegen
1. A MySQL szerverhez csatlakozás
- Nyisd meg a terminált vagy parancssort
- Windows: Használj CMD-t vagy PowerShellt.
- Csatlakozz a MySQL szerverhez Írd be a következő parancsot (például root felhasználóval):
bash
mysql -u root -p
Ezután a rendszer kéri a jelszót. Írd be a jelszót (a karakterek nem jelennek meg biztonsági okokból), majd nyomd meg az Enter-t. Ha a hitelesítés sikeres, a MySQL prompt megjelenik (például mysql>).
1. Adatbázis létrehozása és kiválasztása
A következő parancsokkal hozod létre az tarsasag adatbázist, majd váltsz át arra:
sql
CREATE DATABASE tarsasag;
USE tarsasag;
2. Táblák létrehozása
Mivel az importálás során a fájlok neve megegyezik a táblanevekkel, először hozzuk létre a táblákat a fájlok szerkezetének megfelelően.
A. kategoria tábla
A kategoria tábla mezői:
- id: szám típus (INT), ez a tábla elsődleges kulcsa.
- nev: művészeti foglalkozás neve (szöveg), pl. VARCHAR(255).
A tábla létrehozása:
sql
CREATE TABLE kategoria (
id INT PRIMARY KEY,
nev VARCHAR(255) NOT NULL
);
B. tag tábla
A tag tábla mezői:
- id: díjazott művész azonosítója (INT), elsődleges kulcs.
- ev: díjazás éve (INT).
- katid: a művész foglalkozási kategóriájának azonosítója (INT). Jól jöhet, ha ezt idegen kulcsként hivatkozod a kategoria táblára.
- nev: a művész neve (VARCHAR).
A tábla létrehozása (opcionálisan beállítva az idegen kulcs kapcsolatot):
sql
CREATE TABLE tag (
id INT PRIMARY KEY,
ev INT NOT NULL,
katid INT NOT NULL,
nev VARCHAR(255) NOT NULL,
CONSTRAINT fk_kategoria FOREIGN KEY (katid) REFERENCES kategoria(id)
);
Megjegyzés: Ha nem szeretnél idegen kulcsot beállítani, elhagyhatod a CONSTRAINT fk_kategoria ... részt.
3. Adatok importálása a szöveges állományokból
Feltételezzük, hogy a fájlok neve:
- kategoria.txt
- tag.txt
Fontos:
- A fájlok elérési útját a rendszerednek megfelelően add meg a parancsokban!
- Győződj meg arról, hogy a MySQL szerver számára engedélyezett az adott könyvtárból való importálás (a secure_file_priv beállításra figyelj).
A. kategoria tábla importálása
sql
LOAD DATA INFILE '/path/to/kategoria.txt'
INTO TABLE kategoria
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(id, nev);
B. tag tábla importálása
sql
LOAD DATA INFILE '/path/to/tag.txt'
INTO TABLE tag
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(id, ev, katid, nev);
Cseréld le a /path/to/ részt a fájlok tényleges elérési útjára!
Az alábbiakban láthatod a megoldásokat a kért feladatokra. Feltételezzük, hogy a tarsasag adatbázisban a két tábla a következőképpen néz ki:
- tag: • id (INT, elsődleges kulcs) • ev (INT, a díjazás éve) • katid (INT, hivatkozás a kategoria táblára) • nev (VARCHAR, a művész neve)
- kategoria: • id (INT, elsődleges kulcs) • nev (VARCHAR, a foglalkozás neve)
A következő lekérdezések megoldják az egyes feladatokat:
2. (2dij2022)
Feladat: Sorolja fel ábécérendben lekérdezés segítségével a 2022-ben kitüntetettek nevét! (Ez azt jelenti, hogy a tag táblából az ev értéke 2022, és csak a nev oszlopot szeretnénk.)
sql
-- (2dij2022)
SELECT nev
FROM tag
WHERE ev = 2022
ORDER BY nev ASC;
3. (3szinesz)
Feladat: Készítsen lekérdezést, amely megadja azoknak a nevét és foglalkozását, akiknek a foglalkozásneve tartalmazza a "színész" szórészletet! (Itt a tag és kategoria táblákat kell összekapcsolni, majd a kategoria.nev alapján szűrni.)
sql
-- (3szinesz)
SELECT t.nev, k.nev AS foglalkozas
FROM tag t
JOIN kategoria k ON t.katid = k.id
WHERE k.nev LIKE '%színész%';
4. (4tobben)
Feladat: Mely években kapták meg a díjat nyolcnál többen? Lekérdezés segítségével jelenítse meg ezeket az éveket és a díjazottak számát!
sql
-- (4tobben)
SELECT ev, COUNT(*) AS db
FROM tag
GROUP BY ev
HAVING COUNT(*) > 8;
5. (5szakmadb)
Feladat: Adja meg lekérdezés segítségével, hogy az egyes foglalkozásnevekhez hány művész tartozik! (Itt ismét a tag és kategoria táblát kell összekapcsolni, és csoportosítani a foglalkozás neve alapján.)
sql
-- (5szakmadb)
SELECT k.nev AS foglalkozas, COUNT(*) AS db
FROM tag t
JOIN kategoria k ON t.katid = k.id
GROUP BY k.nev;
6. (6zenthe)
Feladat: Sorolja fel lekérdezés segítségével "Zenthe Ferenc" színésszel együtt azoknak a nevét és foglalkozását, akik vele azonos évben kapták a díjat!
Először azonosítjuk azt az évet (vagy éveket), amikor "Zenthe Ferenc" díjat kapott, majd kiválasztjuk azoknak a díjazottak adatait, akikben ugyanaz az év szerepel.
sql
-- (6zenthe)
SELECT t.nev, k.nev AS foglalkozas
FROM tag t
JOIN kategoria k ON t.katid = k.id
WHERE t.ev IN (
SELECT ev FROM tag WHERE nev = 'Zenthe Ferenc'
);
Készítette: A COPILOT
