←← →→

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 postahivatal csomagjai

SQL
Nehézség: Gondolkodtató

A helyi postahivatal egy egyszerű adatbázisban tárolja a csomagokat, az ügyfeleket és a kézbesítéseket. Készítse el a táblákat, töltse fel az adatokat, majd oldja meg a feladatokat SQL-lel.

CREATE TABLE ugyfelek (
ugyfel_id INT PRIMARY KEY,
nev VARCHAR(100) NOT NULL,
varos VARCHAR(50) NOT NULL
);

CREATE TABLE csomagok (
csomag_id INT PRIMARY KEY,
ugyfel_id INT NOT NULL,
tipusa VARCHAR(50) NOT NULL,
suly_kg DECIMAL(4,1) NOT NULL,
FOREIGN KEY (ugyfel_id) REFERENCES ugyfelek(ugyfel_id)
);

CREATE TABLE kezbesitesek (
kezbesites_id INT PRIMARY KEY,
csomag_id INT NOT NULL,
datum DATE NOT NULL,
sikeres TINYINT NOT NULL,
FOREIGN KEY (csomag_id) REFERENCES csomagok(csomag_id)
);

INSERT INTO ugyfelek (ugyfel_id, nev, varos) VALUES
(1, 'Kiss László', 'Szeged'),
(2, 'Nagy Anna', 'Budapest'),
(3, 'Tóth Erika', 'Pécs'),
(4, 'Varga Péter', 'Szeged');

INSERT INTO csomagok (csomag_id, ugyfel_id, tipusa, suly_kg) VALUES
(1, 1, 'irat', 0.5),
(2, 2, 'elektronika', 2.3),
(3, 1, 'könyv', 1.1),
(4, 3, 'ruha', 1.8),
(5, 4, 'irat', 0.4);

INSERT INTO kezbesitesek (kezbesites_id, csomag_id, datum, sikeres) VALUES
(1, 1, '2026-04-01', 1),
(2, 2, '2026-04-01', 0),
(3, 3, '2026-04-02', 1),
(4, 4, '2026-04-03', 1),
(5, 5, '2026-04-03', 0);

-- Feladatok:
-- 1. Listázza ki az összes ügyfél nevét és városát.
-- 2. Kérdezze le az összes különböző csomagtípust.
-- 3. Keresd meg azokat az ügyfeleket, akiknek sikeres kézbesítése volt.
-- 4. Írj lekérdezést, amely megadja, hány csomag tartozik ügyfelenként.


MegoldásMegoldási ötletek:
1. SELECT nev, varos FROM ugyfelek;
2. SELECT DISTINCT tipusa FROM csomagok;
3. SELECT DISTINCT u.nev FROM ugyfelek u JOIN csomagok c ON u.ugyfel_id = c.ugyfel_id JOIN kezbesitesek k ON c.csomag_id = k.csomag_id WHERE k.sikeres = 1;
4. SELECT u.nev, COUNT(*) AS csomagok_szama FROM ugyfelek u JOIN csomagok c ON u.ugyfel_id = c.ugyfel_id GROUP BY u.nev;