Gyakorlatok CDTárra

Kapcsolódj a szerver cd_catalog adatbázisához!

Milyen táblák vannak az adatbázisban?

SHOW TABLES;
+-----------------+
| Tables_in_cdtar |
+-----------------+
| albumok         |
| eloadok         |
| szamok          |
+-----------------+

Milyen szerkezetűek ezek?

DESC eloadok;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| nev      | varchar(64) | NO   |     | NULL    |                |
| alapitva | int(11)     | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
DESC albumok;
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| album     | varchar(255) | NO   |     | NULL    |                |
| eloado_id | int(11)      | NO   | MUL | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+
DESC szamok;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| album_id | int(11)     | NO   | MUL | NULL    |                |
| sorszam  | int(11)     | NO   |     | NULL    |                |
| cim      | varchar(64) | NO   |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

Listázd az előadókat!

SELECT  * FROM eloadok;
+----+-------------------+----------+
| id | nev               | alapitva |
+----+-------------------+----------+
|  1 | Zámbó Jimmy       |     1972 |
|  2 | Pendulum          |     2002 |
|  3 | Prodigy           |     1990 |
|  4 | Infected Mushroom |     1996 |
|  5 | Omega             |     1968 |
+----+-------------------+----------+

Listázd a lemezeket!

SELECT  * FROM albumok;
+----+------------------------+-----------+
| id | album                  | eloado_id |
+----+------------------------+-----------+
|  1 | Csak egy vallomás      |         1 |
|  2 | Karácsony Jimmyvel     |         1 |
|  3 | Hold Your Colour       |         2 |
|  4 | Immersion              |         2 |
|  5 | Everybody in the Place |         3 |
|  6 | Experience             |         3 |
|  7 | Invaders Must Die      |         3 |
|  8 | World's on Fire        |         3 |
|  9 | Return to the Sauce    |         4 |
| 10 | Gammapolisz            |         5 |
+----+------------------------+-----------+

Hány szám van a gyűjteményünk CD-in?

SELECT count(id) AS db FROM szamok;
+-----+
| db  |
+-----+
| 116 |
+-----+

Listázd a lemezeket és előadóit!

SELECT album, nev FROM eloadok, albumok WHERE albumok.eloado_id=eloadok.id;
+------------------------+-------------------+
| album                  | nev               |
+------------------------+-------------------+
| Csak egy vallomás      | Zámbó Jimmy       |
| Karácsony Jimmyvel     | Zámbó Jimmy       |
| Hold Your Colour       | Pendulum          |
| Immersion              | Pendulum          |
| Everybody in the Place | Prodigy           |
| Experience             | Prodigy           |
| Invaders Must Die      | Prodigy           |
| World's on Fire        | Prodigy           |
| Return to the Sauce    | Infected Mushroom |
| Gammapolisz            | Omega             |
+------------------------+-------------------+

Megoldás LEFT JOIN-nal:

SELECT album, nev
FROM eloadok
LEFT JOIN albumok ON albumok.eloado_id=eloadok.id;

+------------------------+-------------------+
| album                  | nev               |
+------------------------+-------------------+
| Csak egy vallomás      | Zámbó Jimmy       |
| Karácsony Jimmyvel     | Zámbó Jimmy       |
| Hold Your Colour       | Pendulum          |
| Immersion              | Pendulum          |
| Everybody in the Place | Prodigy           |
| Experience             | Prodigy           |
| Invaders Must Die      | Prodigy           |
| World's on Fire        | Prodigy           |
| Return to the Sauce    | Infected Mushroom |
| Gammapolisz            | Omega             |
+------------------------+-------------------+

Listázd a lemezeket és a rajtuk levő számokat!

SELECT albumok.album, szamok.cim FROM albumok, szamok WHERE szamok.album_id=albumok.id;

+------------------------+------------------------------------------------------+
| album                  | cim                                                  |
+------------------------+------------------------------------------------------+
| Csak egy vallomás      | Csak Egy Vallomás                                    |
| Csak egy vallomás      | A Világ Lassan Útra Kész                             |
| Csak egy vallomás      | Volt Egy Lány                                        |
| Csak egy vallomás      | Éjek Asszonya                                        |
| Csak egy vallomás      | Várlak                                               |
| Csak egy vallomás      | I Love You                                           |
| Csak egy vallomás      | Ave Maria                                            |
| Csak egy vallomás      | Gondolj Egy Régi Dalra                               |
| Csak egy vallomás      | Dalolj Gitár                                         |
| Csak egy vallomás      | Kisfiam (Legszebb Könnyek)                           |
| Csak egy vallomás      | Vándor Vagyok Ezen A Földön                          |
| Csak egy vallomás      | Valahol Bús Dal Szól                                 |
| Karácsony Jimmyvel     | Csendes Éj                                           |
| Karácsony Jimmyvel     | Szent Karácsony Éjjel                                |
...
| Gammapolisz            | A száműzött                                          |
| Gammapolisz            | Hajnal a város felett                                |
| Gammapolisz            | Arc nélküli ember                                    |
| Gammapolisz            | Ezüst eső                                            |
| Gammapolisz            | Gammapolis II.                                       |
+------------------------+------------------------------------------------------+

Hány száma van az egyes eloadoknak?

SELECT album_id FROM szamok;
+----------+
| album_id |
+----------+
|        1 |
|        1 |
|        1 |
|        1 |
|        1 |
|        1 |
...
|       10 |
|       10 |
|       10 |
|       10 |
|       10 |
+----------+
116 rows in set (0.000 sec)
SELECT count(album_id), album_id FROM szamok GROUP BY album_id;
+-----------------+----------+
| count(album_id) | album_id |
+-----------------+----------+
|              12 |        1 |
|              12 |        2 |
|              14 |        3 |
|              14 |        4 |
|              12 |        5 |
|              11 |        6 |
|              10 |        7 |
|              12 |        8 |
|              11 |        9 |
|               8 |       10 |
+-----------------+----------+
SELECT
    count(album_id), album_id, albumok.album
FROM
    szamok
LEFT JOIN albumok ON album_id=albumok.id
GROUP BY album_id;
+-----------------+----------+------------------------+
| count(album_id) | album_id | album                  |
+-----------------+----------+------------------------+
|              12 |        1 | Csak egy vallomás      |
|              12 |        2 | Karácsony Jimmyvel     |
|              14 |        3 | Hold Your Colour       |
|              14 |        4 | Immersion              |
|              12 |        5 | Everybody in the Place |
|              11 |        6 | Experience             |
|              10 |        7 | Invaders Must Die      |
|              12 |        8 | World's on Fire        |
|              11 |        9 | Return to the Sauce    |
|               8 |       10 | Gammapolisz            |
+-----------------+----------+------------------------+
SELECT
    count(album_id), albumok.album
FROM
    szamok
LEFT JOIN albumok ON album_id=albumok.id
GROUP BY album_id;

+-----------------+------------------------+
| count(album_id) | album                  |
+-----------------+------------------------+
|              12 | Csak egy vallomás      |
|              12 | Karácsony Jimmyvel     |
|              14 | Hold Your Colour       |
|              14 | Immersion              |
|              12 | Everybody in the Place |
|              11 | Experience             |
|              10 | Invaders Must Die      |
|              12 | World's on Fire        |
|              11 | Return to the Sauce    |
|               8 | Gammapolisz            |
+-----------------+------------------------+
SELECT
    count(album_id) as db, albumok.album, eloadok.nev
FROM
    szamok
LEFT JOIN albumok ON album_id=albumok.id
LEFT JOIN eloadok ON albumok.eloado_id=eloadok.id
GROUP BY album_id
ORDER BY nev, cim;

+----+------------------------+-------------------+
| db | album                  | nev               |
+----+------------------------+-------------------+
| 11 | Return to the Sauce    | Infected Mushroom |
|  8 | Gammapolisz            | Omega             |
| 14 | Immersion              | Pendulum          |
| 14 | Hold Your Colour       | Pendulum          |
| 12 | World's on Fire        | Prodigy           |
| 10 | Invaders Must Die      | Prodigy           |
| 12 | Everybody in the Place | Prodigy           |
| 11 | Experience             | Prodigy           |
| 12 | Csak egy vallomás      | Zámbó Jimmy       |
| 12 | Karácsony Jimmyvel     | Zámbó Jimmy       |
+----+------------------------+-------------------+

Adatok bevitele

Adatok beszúrása az INSERT INTO SQL paranccsal történik:

INSERT INTO eloadok (nev, alapitva) VALUES ('Omega',1962);

Ellenőrizzük, hogy valóban rögzítettük-e:

SELECT * FROM eloadok;

Vegyünk fel a CD-k táblába egy Omega lemezt:

INSERT INTO albumok (album, eloado_id) VALUES ('Gammapolisz',5);

Majd vegyünk fel számokat is:

INSERT INTO szamok (sorszam, cim, album_id) VALUES (1, 'Start ', 10);
INSERT INTO szamok (sorszam, cim, album_id) VALUES (2, 'Nyári éjek asszonya', 10);

Egy Excel tükk

Nagy tömegű adat bevitelét lehetővé tevő INSERT INTO utasítások előállítására az Excel is használható. Az adatok:

Start – Gammapolis I.
Nyári éjek asszonya
Őrültek órája
A száműzött
Hajnal a város felett
Arc nélküli ember
Ezüst eső
Gammapolis II.

A végeredmény:

Az alkalmazott képlet:

="INSERT INTO szamok (sorszam, cim, album_id) VALUES (" & A3 & ", '" & B3 & "', 10);"

A kinyert SQL mondatok:

INSERT INTO szamok (sorszam, cim, album_id) VALUES (1, 'Start – Gammapolis I.', 10);
INSERT INTO szamok (sorszam, cim, album_id) VALUES (2, 'Nyári éjek asszonya', 10);
INSERT INTO szamok (sorszam, cim, album_id) VALUES (3, 'Őrültek órája', 10);
INSERT INTO szamok (sorszam, cim, album_id) VALUES (4, 'A száműzött', 10);
INSERT INTO szamok (sorszam, cim, album_id) VALUES (5, 'Hajnal a város felett', 10);
INSERT INTO szamok (sorszam, cim, album_id) VALUES (6, 'Arc nélküli ember', 10);
INSERT INTO szamok (sorszam, cim, album_id) VALUES (7, 'Ezüst eső', 10);
INSERT INTO szamok (sorszam, cim, album_id) VALUES (8, 'Gammapolis II.', 10);

Adatok módosítása

Adatok módosítását a UPDATE utasítással végezzük.

Módosítsuk a 120-as ID-jű szám címét Gammapolisz 3-ra!

UPDATE szamok SET cim='Gammapolisz 3' WHERE id=120;

Egy képzeletbeli dolgozók táblában adjunk 10%-os béremelést a 20 évnél fiatalabb nőknek!

UPDATE dolgozok SET ber = ber * 1.1 WHERE nem = 'no' AND kor < 20;

Ugyanebben a táblában a béremelés mellett adjunk 100.000 Ft jutalmat is!

UPDATE dolgozok SET ber = ber * 1.1, jutalom=100000 WHERE nem = 'no' AND kor < 20;

Adatok törlése

A törlés utasítása a DELETE, szintaxisa nagyon hasonló a SELECT-hez.

Töröljük a 120-as ID-jű számot!

DELETE FROM szamok WHERE id=120;

Gyakorlatok

Hány zenekar van most az adatbázisban?

SELECT count(nev) FROM eloadok;

Hány O-val kezdődő nevű van?

SELECT nev FROM eloadok WHERE nev like 'O%';

Listázd a eloadókat nevük szerint visszafelé rendezve!

SELECT nev FROM eloadok ORDER BY nev DESC;

A Legrégebben alapított zenekar neve (inkább a második, a beágyazott SELECT-et alkalmazó megoldást érdemes megtanulni):

SELECT nev FROM eloadok ORDER BY alapitva limit 1;
SELECT nev FROM eloadok WHERE alapitva=(SELECT min(alapitva) FROM eloadok);

Listázzuk a CD-ket és előadóikat!

SELECT album, nev
FROM albumok, eloadok
WHERE albumok.eloado_id = eloadok.id
ORDER BY nev;

Hány lemeze van az eloadóknak?

SELECT count(eloado_id), id
FROM albumok
GROUP BY eloado_id;

Ne zenekar id-t, hanem előadót írjuk ki:

SELECT count(eloado_id) AS darab, nev
FROM albumok, eloadok
WHERE albumok.eloado_id=eloadok.id
GROUP BY nev
ORDER BY darab;

Hány szám van az egyes lemezeken?

SELECT count(album_id), id FROM szamok GROUP BY album_id;

Lássuk ezt a lemezek címeivel!

SELECT
count(album_id), albumok.album
FROM szamok, albumok
WHERE szamok.album_id=albumok.id
GROUP BY album_id;

Jelenítsd meg az előadók nevei is!

SELECT
count(album_id) as darab, albumok.album, eloadok.nev
FROM szamok, albumok, eloadok
WHERE
    szamok.album_id=albumok.id AND
    eloadok.id=albumok.eloado_id
GROUP BY album_id
ORDER BY nev;

Hány számunk van egy-egy előadótól?

SELECT
count(album_id) as darab, eloadok.nev
FROM szamok, albumok, eloadok
WHERE
    szamok.album_id=albumok.id AND
    eloadok.id=albumok.eloado_id
GROUP BY eloadok.id
ORDER BY nev;