MySQL feladatok

Adatbázis és jogok létrehozása

Miután beléptél a MySQL szerverre a root felhasználóval, egy új üres adatbázist szükséges létrehozni, amelyben a feladat adatai lesznek tárolva. A művelet végrehajtásához az alábbi parancsot szükséges kiadni:

Megjegyzés

A SET CHARACTER SET opció segítségével az adatbázisban tárolt adatok karakter kódolásának a beállítása történik meg. Ezen opció legelterjedtebb és legáltalánosabb beállítása az utf8 érték.

A DEFAULT COLLATE opció segítségével adható meg alapértelmezett módon a táblában tárolt adatok, pontosabban karakterek, ABC szerinti rendezése. Ez az opció általában a nem-angol ABC-jű nyelvek esetén fontos beállítás. Segítségével biztosítható, hogy az adathalmazok rendezése során az `á` karakter az `a` betű után következzék. Adatbázisban tárolt magyar nyelvű adatok esetén az utf8_hungarian_ci beállítást alkalmazzák, amely speciálisan a magyar nyelv ABC-jére biztosítja a megfelelő beállításokat.

	
CREATE DATABASE `konyv_kolcsonzes`
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_hungarian_ci;
	

Miután az adatbázis létre lett hozva, (biztonsági okokból) egy olyan MySQL felhasználót szükséges létrehozni, aki csakis az előbb létrehozott konyv_kolcsonzes adatbázishoz rendelkezik hozzáféréssel. A felhasználónak szükséges megadni egy jelszót amely, amely segítségével autentikálhatja magát a belépés során. Az alábbi parancsot szükséges kiadni:

Megjegyzés

A kolcsonzes felhasználóval csakis akkor lehetséges belépni a szerverre, ha az autentikáció során hosztként a `localhost` lett megadva. Ha eme érték helyett `127.0.0.1` lett megadva, akkor sem sikerül a bejelentkezés, még helyes jelszóval sem. A MySQL szerver megkülönbözteti az összes lehetséges IP-címet és hosztnevet belépés során, ebből kifolyólag a localhost és a 127.0.0.1 nem ugyanazt a címet jelöli.

	
CREATE USER 'kolcsonzes'@'localhost'
IDENTIFIED BY 'titkosjelszo';
	

A felhasználó létrehozása után meg kell adni a jogokat, hogy mely adatbázisokhoz vagy táblákhoz férhet hozzá, illetve milyen műveleteket hajthat végre azokon. Az alábbi parancs kiadásával a létrehozott felhasználni a konyv_kolcsonzes adatbázis összes táblájához hozzá fog férni maximális joggal. Ezenkívül a többi adatbázishoz semmilyen joggal sem rendelkezik. Az említett parancs:

	
GRANT ALL PRIVILEGES ON konyv_kolcsonzes.* TO 'kolcsonzes'@'localhost';
	

Végezetül pedig egyetlen dolog maradt hátra: a felhasználónak és jogainak érvényesítése. Ehhez az alábbi parancsot kell kiadni:

	
FLUSH PRIVILEGES;
	

Ezt követően próbáljuk ki, hogy ténylegesen is be tudunk lépni a létrehozott felhasználóval. Először lépjünk ki a MySQL-ből,

	
exit
	

majd lépjünk be az újonnan létrehozott felhasználóval:

Megjegyzés

A parancs kiadása után az `Enter password:` szöveg fog megjelenni, s a kliens program kérni fogja az adott felhasználóhoz tartozó jelszót. A jelszót beírva nem jelennek meg * karakterek vagy egyéb más karakterek a konzolon, ettől függetlenül viszont a leütött billentyűk megjegyzésre kerülnek. Amint beírásra került a jelszó, egy ENTER gomb megnyomásával megtörténik a belépés.

	
# Windows-on:
mysql.exe -h localhost -u kolcsonzes -p

# macOS-en és Linux-on:
mysql -h localhost -u kolcsonzes -p
	

A sikeres belépés után az alábbi kimenet olvasható a képernyő utolsó sorában:

	
mysql>
	

Adatbázis kiválasztása

A bejelentkezés után listázd ki, hogy mely adatbázisokhoz rendelkezel hozzáféréssel:

	
SHOW DATABASES;
	

Eredményül valami ehhez hasonló kimenetet kell, hogy láss:

	
+--------------------+
| Database             |
+--------------------+
| information_schema |
| konyv_kolcsonzes   |
+--------------------+
2 rows in set (0.01 sec)
	

Ezután lépjünk bele a `konyv_kolcsonzes` adatbázisba:

	
USE `konyv_kolcsonzes`;
	

s listázzuk ki a benne lévő táblákat:

	
SHOW TABLES;
	

A parancs kimenete az alábbi:

	
Empty set (0.01 sec)
	

Ebből a kimenetből látható, hogy még egyetlen egy tábla sem létezik az adatbázisban.

Táblák feltöltése adatokkal

Ahhoz, hogy ki tudjuk próbálni a parancsokat, először néhány táblát szükséges létrehozni, majd ezeket a táblákat adatokkal feltölteni.

Először hozzuk létre a konyvek nevű táblát:

	
CREATE TABLE `konyvek` (
	`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
	`cim` varchar(255) NOT NULL DEFAULT '',
	`szerzo` varchar(100) NOT NULL DEFAULT '',
	`kiadas_eve` int(10) unsigned NOT NULL DEFAULT '0',
	PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
	

A tábla létrehozása után pedig vegyük fel az adatokat:

	
INSERT INTO
		`konyvek` (`id`, `cim`, `szerzo`, `kiadas_eve`)
VALUES
	(1, 'Harry Potter és a Halál ereklyéi', 'J.K. Rowling', 2007),
	(2, 'Harry Potter és a Tűz Serlege', 'J.K. Rowling', 2000),
	(3, 'Twilight - Alkonyat', 'Stephenie Meyer', 2005),
	(4, 'A ​Gyűrűk Ura', 'J. R. R. Tolkien', 1955),
	(5, 'A ​szürke ötven árnyalata', 'E.L. James', 2011),
	(6, 'A Da Vinci-kód', 'Dan Brown', 2003),
	(7, 'A ​lány a vonaton', 'Paula Hawkins', 2015),
	(8, 'Az alkimista', 'Paulo Coelho', 1988),
	(9, 'Galaxis útikalauz stopposoknak', 'Douglas Adams', 1979),
	(10 ,'A ​kis herceg', 'Antoine de Saint-Exupéry', 1943);
	

Ezután hozzuk létre a konyvtarak nevű táblát:

	
CREATE TABLE `konyvtarak` (
	`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
	`nev` varchar(150) NOT NULL DEFAULT '',
	`cim` varchar(200) NOT NULL DEFAULT '',
	PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
	

majd töltsük fel adatokkal:

	
INSERT INTO
		`konyvtarak` (`id`, `nev`, `cim`)
VALUES
	(1, 'Egyetemi Könyvtár és Levéltár', 'Veszprém, Wartha Vince u. 1.'),
	(2, 'Lipták Gábor Városi Könyvtár', 'Balatonfüred, Kossuth Lajos u. 35.'),
	(3, 'Eötvös Károly Megyei Könyvtár', 'Veszprém, Komakút tér 3.'),
	(4, 'Országos Széchényi Könyvtár', 'Budapest, Szent György tér 4-6.'),
	(5, 'Fővárosi Szabó Ervin Könyvtár', 'Budapest, Szabó Ervin tér 1'),
	(6, 'Magyar Tudományos Akadémia Könyvtára',
							'Budapest, Széchenyi István tér 9.');
	

Most hozzunk létre egy olyan konyvek__konyvtarak nevű kapcsoló táblát, amely a konyvek és a konyvtarak táblákban lévő rekordokat kapcsolja össze:

	
CREATE TABLE `konyvek__konyvtarak` (
	`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
	`id__konyvek` int(10) unsigned DEFAULT '0',
	`id__konyvtarak` int(10) unsigned DEFAULT '0',
	PRIMARY KEY (`id`),
	KEY `fk_konyvek__konyvtarak_konyvek` (`id__konyvek`),
	KEY `fk_konyvek__konyvtarak_konyvtarak` (`id__konyvtarak`),
	CONSTRAINT `fk_konyvek__konyvtarak_konyvek`
		FOREIGN KEY (`id__konyvek`)
		REFERENCES `konyvek` (`id`)
			ON DELETE SET NULL
			ON UPDATE NO ACTION,
	CONSTRAINT `fk_konyvek__konyvtarak_konyvtarak`
		FOREIGN KEY (`id__konyvtarak`)
		REFERENCES `konyvtarak` (`id`)
			ON DELETE SET NULL
			ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
	

s töltsük fel adatokkal:

	
INSERT INTO
		`konyvek__konyvtarak` (`id`, `id__konyvek`, `id__konyvtarak`)
VALUES
	(1, 1, 1),   (2, 1, 3),   (3, 1, 4),   (4, 2, 2),
	(5, 2, 3),   (6, 2, 5),   (7, 3, 1),   (8, 3, 4),
	(9, 3, 5),   (10, 3, 6),  (11, 4, 2),  (12, 4, 4),
	(13, 4, 6),  (14, 5, 1),  (15, 5, 2),  (16, 5, 4),
	(17, 5, 6),  (18, 6, 2),  (19, 6, 3),  (20, 6, 5),
	(21, 7, 1),  (22, 7, 3),  (23, 7, 4),  (24, 7, 5),
	(25, 7, 6),  (26, 8, 2),  (27, 8, 4),  (28, 8, 6),
	(29, 9, 1),  (30, 9, 2),  (31, 9, 3),  (32, 9, 4),
	(33, 10, 2), (34, 10, 5), (35, 10, 6);
	

Hozzuk létre az olvasok nevű táblát, amely azon emberek adatait tartalmazza, akik kikölcsönözték valamely könyvet:

	
CREATE TABLE `olvasok` (
	`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
	`nev` varchar(150) NOT NULL DEFAULT '',
	`nem` enum('F','N') DEFAULT NULL,
	`kor` tinyint(3) unsigned NOT NULL DEFAULT '0',
	PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
	

majd töltsük fel adatokkal:

	
INSERT INTO
		`olvasok` (`id`, `nev`, `nem`, `kor`)
VALUES
	(1, 'Kiss János', 'F', 31),
	(2, 'Nagy Tímea', 'N', 17),
	(3, 'Kovács Elemér', 'F', 22),
	(4, 'Horváth Zsüliett', 'N', 19),
	(5, 'Nagysándor József', 'F', 26),
	(6, 'Varga Elemér', 'F', 20),
	(7, 'Rácz Júlia', 'N', 27),
	(8, 'Szűcs Nóra', 'N', 21),
	(9, 'Sipos Tamás', 'F', 30),
	(10, 'Nagy Nándor', 'F', 35),
	(11, 'Kiss János', 'F', 21),
	(12, 'Rácz Júlia', 'N', 16),
	(13, 'Vígh Andrea', 'N', 28),
	(14, 'Vígh Zsuzsanna', 'N', 26);
	

Végezetül pedig hozzuk létre a konyvek__olvasok táblát, amely a kikölcsönzött könyveket tartalmazza:

	
CREATE TABLE `konyvek__olvasok` (
	`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
	`id__konyvek` int(11) unsigned NULL,
	`id__olvasok` int(11) unsigned NULL,
	`kolcsonzes_datuma` date DEFAULT NULL,
	PRIMARY KEY (`id`),
	KEY `fk_konyvek__olvasok_olvasok` (`id__olvasok`),
	KEY `fk_konyvek__olvasok_konyvek` (`id__konyvek`),
	CONSTRAINT `fk_konyvek__olvasok_olvasok`
		FOREIGN KEY (`id__olvasok`)
		REFERENCES `olvasok` (`id`)
			ON DELETE SET NULL
			ON UPDATE NO ACTION,
	CONSTRAINT `fk_konyvek__olvasok_konyvek`
		FOREIGN KEY (`id__konyvek`)
		REFERENCES `konyvek` (`id`)
			ON DELETE SET NULL
			ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
	

majd töltsük fel adatokkal:

	
INSERT INTO
		`konyvek__olvasok`
			(`id`, `id__konyvek`, `id__olvasok`, `kolcsonzes_datuma`)
VALUES
	(1, 1, 2, '2012-04-12'),         (2, 1, 4, '2011-05-28'),
	(3, 1, 10, '2016-01-20'),     (4, 2, 1, '2005-04-21'),
	(5, 2, 9, '2001-01-02'),         (6, 3, 1, '2008-09-26'),
	(7, 3, 4, '2010-10-10'),         (8, 3, 5, '2011-12-19'),
	(9, 3, 8, '2015-02-17'),         (10, 4, 3, '2014-04-19'),
	(11, 4, 4, '2016-05-24'),     (12, 4, 7, '2015-01-31'),
	(13, 4, 9, '2015-07-02'),     (14, 5, 1, '2011-03-22'),
	(15, 5, 2, '2011-03-31'),     (16, 5, 5, '2015-08-23'),
	(17, 5, 11, '2016-02-17'),   (18, 6, 3, '2003-12-28'),
	(20, 6, 6, '2007-04-17'),     (21, 6, 10, '2008-11-09'),
	(22, 6, 12, '2011-07-28'),   (23, 7, 1, '2015-09-20'),
	(24, 7, 8, '2015-11-30'),     (25, 7, 11, '2016-01-23'),
	(26, 7, 12, '2016-04-17'),   (27, 8, 1, '2000-12-10'),
	(28, 8, 3, '2001-01-16'),     (29, 8, 6, '2003-05-21'),
	(30, 8, 7, '2003-10-26'),     (31, 8, 8, '2005-06-03'),
	(32, 8, 10, '2008-10-22'),   (33, 8, 12, '2008-11-10'),
	(34, 9, 2, '2004-10-15'),     (35, 9, 2, '2005-08-30'),
	(36, 9, 4, '2005-03-24'),     (37, 9, 5, '2006-04-15'),
	(38, 9, 9, '2007-10-10'),     (39, 9, 10, '2008-12-01'),
	(40, 9, 11, '2008-10-26'),   (41, 9, 12, '2008-06-04'),
	(42, 10, 1, '2000-01-04'),   (43, 10, 4, '2001-05-17'),
	(44, 10, 7, '2001-08-24'),   (45, 10, 8, '2001-10-18'),
	(46, 10, 11, '2001-12-30');
	

A létrehozott adatbázis szerkezete:

Az adatbázis szerkezete

Ezennel el is készültünk az adatbázis létrehozásával és a táblák feltöltésével. Következhetnek az adatbázis műveletek...

Egyszerű lekérdezések

Listázd ki az olvasók összes adatát:

	
SELECT
	*
FROM
	`olvasok`;
	

Listázd ki az olvasók neveit és életkorait:

	
SELECT
	`nev`, `kor`
FROM
	`olvasok`;
	

Listázd ki az olvasók neveit `Név`, míg életkorait `Életkor` néven:

	
SELECT
	`nev` as `Név`,
	`kor` as `Életkor`
FROM
	`olvasok`;
	

Listázd ki az olvasók neveit és életkorait név szerint növekvő, míg életkor szerint csökkenő sorrendben:

	
SELECT
	`nev`, `kor`
FROM
	`olvasok`
ORDER BY
	`nev` ASC,
	`kor` DESC;
	

Listázd ki az `olvasok` táblában lévő első 3 rekord összes adatát:

	
SELECT
	*
FROM
	`olvasok`
LIMIT
	3;

# vagy:

SELECT
	*
FROM
	`olvasok`
LIMIT
	0, 3;
	

Listázd ki az `olvasok` táblában lévő második 3 (4., 5. és 6.) rekord összes adatát:

	
SELECT
	*
FROM
	`olvasok`
LIMIT
	3, 3;
	

Listázd ki az `olvasok` táblában lévő harmadik 3 (7., 8. és 9.) rekord összes adatát:

	
SELECT
	*
FROM
	`olvasok`
LIMIT
	6, 3;
	

Rendezd név szerint növekvő sorrendbe az olvasókat, s írasd ki az első 3 olvasó nevét:

	
SELECT
	`nev`
FROM
	`olvasok`
ORDER BY
	`nev` ASC
LIMIT
	3;
	

Írasd ki a nőnemű olvasók neveit:

	
SELECT
	`nev`
FROM
	`olvasok`
WHERE
	`nem` = 'N';
	

Írasd ki a 25 évnél idősebb olvasók neveit és életkorait:

	
SELECT
	`nev`, `kor`
FROM
	`olvasok`
WHERE
	`kor` > 25;
	

Írasd ki a 20 évnél fiatalabb nőnemű olvasók neveit és életkorait életkor szerint csökkenő sorrendben:

	
SELECT
	`nev`, `kor`
FROM
	`olvasok`
WHERE
		`kor` < 20
	AND `nem` = 'N'
ORDER BY
	`kor` DESC;
	

Listázd ki a 20 évnél fiatalabb nők vagy 30 évnél idősebb férfiak nevét:

	
SELECT
	`nev`
FROM
	`olvasok`
WHERE
		( `kor` < 20 AND `nem` = 'N' )
	OR
		( `kor` > 30 AND `nem` = 'F' );
	

Listázd ki azoknak az olvasóknak a neveit, akik neve tartalmaz 'i' betűt:

	
SELECT
	`nev`
FROM
	`olvasok`
WHERE
	`nev` LIKE '%i%';
	

Listázd ki azoknak az olvasóknak a neveit, akik neve 'N' betűvel kezdődik:

	
SELECT
	`nev`
FROM
	`olvasok`
WHERE
	`nev` LIKE 'N%';
	

Listázd ki azoknak az olvasóknak a neveit, akik neve 'r' betűre végződik:

	
SELECT
	`nev`
FROM
	`olvasok`
WHERE
	`nev` LIKE '%r';
	

Listázd ki, hogy hány darab olvasó található az adatbázisban:

	
SELECT
	COUNT(*) AS `olvasók száma`
FROM
	`olvasok`;
	

Listázd ki életkor alapján csoportosítva, hogy hány (darab) olvasó található az adatbázisban:

	
SELECT
	`kor` AS `életkor`,
	COUNT(*) AS `olvasók száma`
FROM
	`olvasok`
GROUP BY
	`kor`;
	

Több táblás lekérdezések

Listázd ki, hogy melyik olvasó melyik könyvet kölcsönözte ki:

	
SELECT
	`olvasok`.`nev` AS `olvasó neve`,
	`konyvek`.`cim` AS `kikölcsönzött könyv címe`
FROM
	`olvasok`
INNER JOIN
	`konyvek__olvasok`
		ON `konyvek__olvasok`.`id__olvasok` = `olvasok`.`id`
INNER JOIN
	`konyvek`
		ON `konyvek`.`id` = `konyvek__olvasok`.`id__konyvek`;

# ugyanez alias-ok használatával egyszerűsítve picit:
SELECT
	`o`.`nev` AS `olvasó neve`,
	`k`.`cim` AS `kikölcsönzött könyv címe`
FROM
	`olvasok` `o`
INNER JOIN
	`konyvek__olvasok` `ok`
		ON `ok`.`id__olvasok` = `o`.`id`
INNER JOIN
	`konyvek` `k`
		ON `k`.`id` = `ok`.`id__konyvek`;
	

Listázd ki név szerint növekvő, míg cím szerint csökkenő sorrendben, hogy melyik olvasó melyik könyvet kölcsönözte ki:

	
SELECT
	`olvasok`.`nev` AS `olvasó neve`,
	`konyvek`.`cim` AS `kikölcsönzött könyv címe`
FROM
	`olvasok`
INNER JOIN
	`konyvek__olvasok`
		ON `konyvek__olvasok`.`id__olvasok` = `olvasok`.`id`
INNER JOIN
	`konyvek`
		ON `konyvek`.`id` = `konyvek__olvasok`.`id__konyvek`
ORDER BY
	`olvasok`.`nev` ASC,
	`konyvek`.`cim` DESC;
	

Listázd ki, hogy melyik olvasó melyik könyvet mikor kölcsönözte ki, kölcsönzés dátuma szerint növekvő sorrendben:

	
SELECT
	`olvasok`.`nev` 							AS `olvasó neve`,
	`konyvek`.`cim` 							AS `kikölcsönzött könyv címe`,
	`konyvek__olvasok`.`kolcsonzes_datuma` 	AS `kikölcsönzés dátuma`
FROM
	`olvasok`
INNER JOIN
	`konyvek__olvasok`
		ON `konyvek__olvasok`.`id__olvasok` = `olvasok`.`id`
INNER JOIN
	`konyvek`
		ON `konyvek`.`id` = `konyvek__olvasok`.`id__konyvek`
ORDER BY
	`konyvek__olvasok`.`kolcsonzes_datuma` ASC;
	

Listázd ki, hogy melyik olvasó hány darab könyvet kölcsönzött ki:

	
SELECT
	`olvasok`.`nev` AS `olvasó neve`,
	COUNT(`konyvek`.`cim`) AS `kikölcsönzött könyvek száma`
FROM
	`olvasok`
INNER JOIN
	`konyvek__olvasok`
		ON `konyvek__olvasok`.`id__olvasok` = `olvasok`.`id`
INNER JOIN
	`konyvek`
		ON `konyvek`.`id` = `konyvek__olvasok`.`id__konyvek`
GROUP BY
	`olvasok`.`nev`;
	

Listázd ki az ÖSSZES olvasót, hogy hány darab könyvet kölcsönzött ki:

Megjegyzés

Ha az ÖSSZES rekordot szükséges kilistázni, akkor minden esetben LEFT vagy RIGHT JOIN-t használunk azért, mert előfordulhatnak olyan rekordok, amelyeknek nincsen párjuk a másik táblában. Ez esetben az INNER JOIN csak azokat a rekordokat jeleníti meg, amelyeknek van párjuk, míg a LEFT és RIGHT JOIN-ok pedig a megadott tábla összes rekordját adják vissza.

Információ

Látható, hogy az előző lekérdezéshez képest mindössze annyi módosítás történt, hogy az INNER JOIN-ok LEFT JOIN-ra lettek átírva, ezáltal rögtön megjelenik az eredményben 2 olyan olvasó, aki az előző lekérdezés eredményében nem szerepelt, mert egyetlen egy könyvet sem kölcsönzött ki.

Figyelem

Fontos megjegyezni, hogy LEFT vagy RIGHT JOIN-t használva megszámlálás (COUNT()) esetén nem szabad COUNT(*)-ot írni, mert ez esetben a sorok darabszámát fogja megszámolni. Ilyenkor egy olyan oszlop nevét szükséges megadni, amelynek értéke lehet NULL a JOIN művelet során.

Próbáld ki az alábbi lekérdezést egyszer COUNT(`konyvek`.`cim`), egyszer pedig COUNT(*) megszámlálással, s nézd meg az utolsó 2 rekord kikölcsönzött könyvek darabszáma oszlop értékeit.

	
SELECT
	`olvasok`.`nev` AS `olvasó neve`,
	COUNT(`konyvek`.`cim`) AS `kikölcsönzött könyvek száma`
FROM
	`olvasok`
LEFT JOIN
	`konyvek__olvasok`
		ON `konyvek__olvasok`.`id__olvasok` = `olvasok`.`id`
LEFT JOIN
	`konyvek`
		ON `konyvek`.`id` = `konyvek__olvasok`.`id__konyvek`
GROUP BY
	`olvasok`.`nev`;
	

Listázd ki, hogy Horváth Zsüliett által kikölcsönzött könyvek mely könyvtárakban érhetőek el:

	
SELECT
	`konyvtarak`.`nev` AS `könyvtár neve`
FROM
	`olvasok`
INNER JOIN
	`konyvek__olvasok`
		ON `konyvek__olvasok`.`id__olvasok` = `olvasok`.`id`
INNER JOIN
	`konyvek`
		ON `konyvek`.`id` = `konyvek__olvasok`.`id__konyvek`
INNER JOIN
	`konyvek__konyvtarak`
		ON `konyvek__konyvtarak`.`id__konyvek` = `konyvek`.`id`
INNER JOIN
	`konyvtarak`
		ON `konyvtarak`.`id` = `konyvek__konyvtarak`.`id__konyvtarak`
WHERE
	`olvasok`.`nev` = 'Horváth Zsüliett';
	

Listázd ki, hogy melyik könyvtárban kölcsönözhetőek ki Harry Potter könyvek:

	
SELECT
	`konyvtarak`.`nev` AS `könyvtár neve`,
	`konyvek`.`cim` AS `könyv címe`
FROM
	`konyvtarak`
INNER JOIN
	`konyvek__konyvtarak`
		ON `konyvek__konyvtarak`.`id__konyvtarak` = `konyvtarak`.`id`
INNER JOIN
	`konyvek`
		ON `konyvek`.`id` = `konyvek__konyvtarak`.`id__konyvek`
WHERE
	`konyvek`.`cim` LIKE '%Harry Potter%';
	

Adatok felvétele

Vegyél fel egy új olvasót, akinek a neve Döme István, a neme férfi, az életkora pedig 25:

Megjegyzés

Amint látható, a 2. sorban nem lett megadva az elsődleges kulcs oszlopának (id) neve, illetve az utolsó sorban nem lett megadva annak érték. Ezzel biztosítható az, hogy az adatbázis-kezelő rendszer automatikusan generálja ki az elsődleges kulcs értékét, amely garantáltan egyedi (unique) lesz, tehát az az érték csak egyetlen egyszer fog szerepelni az adott táblában.

	
INSERT INTO
	`olvasok` (`nev`, `nem`, `kor`)
VALUES
	('Döme István', 'F', 25);
	

Adatok módosítása

Módosítsd Az alkimista című könyv szerzőjének nevét 'P. Coelho'-ra:

	
UPDATE
	`konyvek`
SET
	`konyvek`.`szerzo` = 'P. Coelho'
WHERE
	`konyvek`.`cim` = 'Az alkimista';
	

Növeld meg az összes 26 éves olvasó életkorát 2 évvel:

	
UPDATE
	`olvasok`
SET
	`olvasok`.`kor` = `olvasok`.`kor` + 2
WHERE
	`olvasok`.`kor` = 26;
	

Módosítsd az összes 2000-ben kikölcsönzött könyv kikölcsönzési dátumát '1999-12-31'-re:

	
UPDATE
	`konyvek__olvasok`
SET
	`konyvek__olvasok`.`kolcsonzes_datuma` = '1999-12-31'
WHERE
		`konyvek__olvasok`.`kolcsonzes_datuma` >= '2000-01-01'
	AND
		`konyvek__olvasok`.`kolcsonzes_datuma` <= '2000-12-31';
	

Módosítsd Nagysándor József olvasó nevét 'Nagysanyi Jozef'-ra, az életkorát pedig 30-ra:

	
UPDATE
	`olvasok`
SET
	`olvasok`.`nev` = 'Nagysanyi Jozef',
	`olvasok`.`kor` = 30
WHERE
	`olvasok`.`nev` = 'Nagysándor József';
	

Adatok törlése

Töröld ki Vígh Zsuzsanna olvasót:

	
DELETE FROM
	`olvasok`
WHERE
	`olvasok`.`nev` = 'Vígh Zsuzsanna';
	

Töröld ki az összes olvasót:

	
DELETE FROM
	`olvasok`;