←← →→

C99.hu

Egy gondolkodtató gyakorló feladatokból álló gyűjtemény. Főbb témák a nyelvspecifikus programozás és a matematika.

Főoldal

A gimnázium könyvtára

SQL
Nehézség: Könnyű

Az iskola könyvtárában szeretnék nyilvántartani a könyveket, a diákokat és a kölcsönzéseket. A feladatok a matura előkészítéséhez gyakori SQL műveleteket gyakoroltatnak.

CREATE TABLE konyvek (
konyv_id INT PRIMARY KEY,
cim VARCHAR(150) NOT NULL,
szerzo VARCHAR(100) NOT NULL,
tema VARCHAR(50) NOT NULL
);

CREATE TABLE diakok (
diak_id INT PRIMARY KEY,
nev VARCHAR(100) NOT NULL,
osztaly VARCHAR(10) NOT NULL
);

CREATE TABLE kolcsonzesek (
kolcsonzes_id INT PRIMARY KEY,
diak_id INT NOT NULL,
konyv_id INT NOT NULL,
kiadas_datum DATE NOT NULL,
vissza_datum DATE,
FOREIGN KEY (diak_id) REFERENCES diakok(diak_id),
FOREIGN KEY (konyv_id) REFERENCES konyvek(konyv_id)
);

INSERT INTO konyvek (konyv_id, cim, szerzo, tema) VALUES
(1, 'Toldi', 'Arany János', 'irodalom'),
(2, 'Az ember tragédiája', 'Madách Imre', 'irodalom'),
(3, 'Programozási alapok', 'Nagy Anna', 'informatika'),
(4, 'Földrajz atlasz', 'Kiss Béla', 'földrajz');

INSERT INTO diakok (diak_id, nev, osztaly) VALUES
(1, 'Szabó Eszter', '11.A'),
(2, 'Tóth Máté', '12.B'),
(3, 'Varga Luca', '11.A'),
(4, 'Németh Bence', '10.C');

INSERT INTO kolcsonzesek (kolcsonzes_id, diak_id, konyv_id, kiadas_datum, vissza_datum) VALUES
(1, 1, 1, '2026-01-10', '2026-01-20'),
(2, 2, 3, '2026-01-11', NULL),
(3, 1, 4, '2026-01-12', NULL),
(4, 3, 1, '2026-01-13', '2026-01-23'),
(5, 4, 2, '2026-01-14', NULL);

-- Feladatok:
-- 1. Listázd ki az összes könyv címét és témáját.
-- 2. Keresd meg azokat a diákokat, akik kölcsönöztek már legalább egy könyvet.
-- 3. Írd ki, hány könyvet kölcsönzött minden diák.
-- 4. Keresd meg az összes olyan könyvet, amelyet még nem vittek vissza.


MegoldásMegoldási ötletek:
1. SELECT cim, tema FROM konyvek;
2. SELECT DISTINCT d.nev FROM diakok d JOIN kolcsonzesek k ON d.diak_id = k.diak_id;
3. SELECT d.nev, COUNT(*) AS kolcsonzesek_szama FROM diakok d JOIN kolcsonzesek k ON d.diak_id = k.diak_id GROUP BY d.nev;
4. SELECT cim FROM konyvek WHERE konyv_id IN (SELECT konyv_id FROM kolcsonzesek WHERE vissza_datum IS NULL);