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

Vissza