Felhasználói eszközök

Eszközök a webhelyen


oktatas:adatbazis-kezeles:feladatok_es_megoldasok

< Adatbázis-kezelés

Feladatok és megoldások

Egytáblás lekérdezések

Feladat 001

Adatok

Adott a következő személy tábla:

az nev telepules cim belepes
1 Nagy József Szolnok Nyár u. 3. 2010.03.17
2 Pár Elek Debrecen Tél u. 3 2005.01.01
3 Tér Ferenc Szolnok Kossuth u. 5. 2000.02.01
4 Dolog Károly Szeged Almás tér 2. 2007.05.01
5 Tronf Mihály Debrecen Lát u. 45. 2005.02.01
6 Ab Béla Szolnok Bach u. 91. 2000.07.01

Feladatok

Jelenítse meg azokat a dolgozókat, amelyek Szolnokon laknak

Megoldás
SELECT nev
FROM Szemely
WHERE telepules="Szolnok";

Számolja meg összesen hány személy van az Személy táblában

Megoldás
SELECT COUNT(az) AS Összesen
FROM Szemely;

Számolja meg hány szolnoki van

Megoldás
SELECT COUNT(az)
FROM Szemely
WHERE telepules="Szolnok";

Számolja meg Pár Elek hány napja van a cégnél.

Megoldás
SELECT now() - belepes AS "Napok száma"
FROM Szemely
WHERE nev="Pár Elek";

Jelenítse meg azoknak a nevét, akik februárban léptek be

Megoldás
SELECT nev
FROM Szemely
WHERE MONTH(belepes)=2;

Jelenítse meg milyen települések vannak. Egy település csak egyszer szerepeljen.

Megoldás
SELECT telepules
FROM Szemely
GROUP BY telepules;

Jelenítse meg azok nevét, akik 2003 előtt léptek be.

Megoldás
SELECT nev
FROM Szemely
WHERE belepes<#1/1/2003#;

Jelenítse meg azokat a Szegedi és Szolnoki dolgozók közül azokat, akik 2005 után jöttek a céghez.

Megoldás
SELECT nev, telepules, belepes
FROM Szemely
WHERE (telepules = "Szeged" OR 
telepules = "Szolnok")
AND belepes > #31/1/2005#;

A megoldás MS Access 2007-es szintaktika

Feladat 002

Adott a következő pácienseket tartalmazó „Személy” nevű tábla:

Személy
id nev telepules szuletes ar tuszuras
1 Nagy Emese Szolnok 1978.05.11 6500 igen
2 Kis Géza Nyíregyháza 1982.07.01 10000 nem
3 Danka Béla Szolnok 1984.02.05 12000 nem

A táblázatban tároljuk a páciens azonosítóját (id), a nevét (név, a települést ahol lakik (telepules), az árat amit legutóbb fizetett (ar), és lehet-e tűszúrással kezelni (tuszuras)

Készítse el a következő lekérdezéseket:

Jelenítse meg az összes mezőt, az összes rekorddal:

Megoldás
SELECT * FROM Személy;

Jelenítse meg csak a nevek és a település mezőket:

Megoldás
SELECT nev, telepules
FROM Személy;

Jelenítse meg csak a település és az ár mezőket mezőket:

Megoldás
SELECT telepules, ar
FROM Személy;

Szolnokiak nevei:

Megoldás
SELECT nev
FROM Személy
WHERE telepules="Szolnok";

Jelenítse meg azok neveit és települését, akik többet fizetnek mint 10000:

Megoldás
SELECT nev, telepules
FROM Személy
WHERE ar>10000;

Jelenítse meg ki hány éves?

Megoldás
SELECT nev, YEAR(now()) - YEAR(szuletes)
FROM Személy;

Mai dátum:

Megoldás
SELECT now();

Mai dátum év része

Megoldás
SELECT YEAR(now());

Mai dátum hónap része:

Megoldás
SELECT MONTH(now());

A mai dátum nap része:

Megoldás
SELECT DAY(now());

Jelenítése meg mindenki nevét és életkorát:

Megoldás
SELECT nev, YEAR(now()) - YEAR(szuletes)
FROM Személy;

Számolja meg hány páciens van:

Megoldás
SELECT COUNT(az)
FROM Személy;

Számolja meg hány páciens van Szolnokról:

Megoldás
SELECT COUNT(az)
FROM Személy
WHERE telepules="Szolnok";

Hány embert lehet tűszúrással gyógyítani?

Megoldás
SELECT COUNT(az)
FROM Személy
WHERE tuszuras=TRUE;

Mennyi volt a bevétel a páciensektől eddig összesen?

Megoldás
SELECT SUM(ar)
FROM Személy;

Mennyi volt a bevétel a páciensektől eddig összesen? A fejléc „Összbevétel” legyen!

Megoldás
SELECT SUM(ar) AS Összbevétel
FROM Személy;

Mennyi az átlagbevétel Budapestről?

Megoldás
SELECT avg(ar)
FROM Személy
WHERE telepules="Budapest";

Mennyi az átlagbevétel Budapestről? A fejléc „Budapesti átlagbevétel” legyen!

Megoldás
SELECT avg(ar) AS "Budapesti átlagbevétel"
FROM Személy
WHERE telepules="Budapest";

Jelenítse meg azok neveit akik Szolnokról valók és tűszúrással gyógyíthatók!

Megoldás
SELECT nev 
FROM Személy
WHERE telepules="Szolnok" AND
          tuszuras=TRUE;

Jelenítse meg milyen településekről vannak páciensek. Egy név csak egyszer szerepeljen.

Megoldás
SELECT telepules
FROM Személy
GROUP BY telepules;

Csoportosítjuk település szerint az eredményt.

Jelenítse meg a 1970 előtt születettek neveit és településüket.

Megoldás
SELECT nev, telepules
FROM személy
WHERE személy.szuletes<#1/1/1970#;

Feladat 003

Adott az alábbi adatbázis.

create database surubt;
use surubt;
create table dolgozok (
	az int not null primary key auto_increment,
	nev varchar(30),
	telepules varchar(30),
	cim varchar(30),
	szuletes date,
	belepes date,
	fizetes double,
	diploma boolean
);
 
insert into dolgozok
(nev, telepules, cim, szuletes, belepes, fizetes, diploma)
values
("Nagy József", "Szolnok", "Tél u. 23.", "1975-08-25", "2004-03-01", 570000, 1),
("Pék Réka", "Miskolc", "Árny u. 29", "1977-02-03", "2006-04-01", 389000, 1),
("Kis Mária", "Debrecen", "Vértes u. 20.", "1981-04-01", "2005-03-27", 680000, 1),
("Érdek Júlia", "Szeged", "Bíró u. 25.", "1982-03-08", "2008-09-01", 190000, 0),
("Boros Evelin", "Szolnok", "Barát u. 78.", "1988-02-22", "2001-01-01", 850000, 0),
("Lórem Kinga", "Szeged", "Pilisi út 17.", "1973-08-02", "2000-01-01", 878000, 1),
("Fix Béla", "Szolnok", "Burkus u. 80.", "1991-11-05", "2008-01-01", 351000, 1);

Hozza létre az adatbázist.

dolgozok
az nev telepules cim szuletes belepes fizetes diploma
1 Nagy József Szolnok Tél u. 23. 1975-08-25 2004-03-01 570000 1
2 Pék Réka Miskolc Árny u. 29. 1977-02-03 2006-04-01 389000 1
3 Kis Mária Debrecen Vértes u. 20. 1981-04-01 2005-03-27 680000 1
4 Érdek Júlia Szeged Bíró u. 25. 1982-03-08 2008-09-01 190000 0
5 Boros Evelin Szolnok Barát u. 78. 1988-02-22 2001-01-01 850000 0
6 Lórem Kinga Szeged Pilisi út 17. 1973-08-02 2000-01-01 878000 1
7 Fix Béla Szolnok Burkus u. 80. 1991-11-05 2008-01-01 351000 1

Írassa ki a legkésőbb belépett, szolnoki dolgozó nevét.

Megoldás
select nev from dolgozok
where belepes =
(
select max(belepes) from dolgozok
where telepules="Szolnok")
select nev
from dolgozok
where telepules = "Szolnok"
order by belepes desc
limit 1;

Feladat 004

Adott a következő dolgozók nevű tábla.

Dolgozók
Az Név Anyja neve Település Lakcím Születés Belépés Fizetés Jutalom
1 Nagy József Marsh Eszer Szolnok Tél u. 23. 1975-08-25 2004-03-01 570000 5000
2 Pék Réka Sargéj Tímea Miskolc Árny u. 29. 1977-02-03 2006-04-01 389000 10000
3 Kis Mária Immell Márta Debrecen Vértes u. 20. 1981-04-01 2005-03-27 680000 5000
4 Érdek Júlia Haller Fruzsina Szeged Bíró u. 25. 1982-03-08 2008-09-01 190000 15000
5 Boros Evelin Csömöri Nikolett Szolnok Barát u. 78. 1988-02-22 2001-01-01 850000 5000
6 Lórem Kinga Gory Nikolett Szeged Pilisi út 17. 1973-08-02 2000-01-01 878000 15000
7 Fix Béla Pritchard Lili Szolnok Burkus u. 80. 1991-11-05 2008-01-01 351000 5000

Kérdezzük le a települések neveit:

Megoldás
SELECT  Település
FROM Dolgozók
GROUP BY Település

vagy

SELECT  DISTINCT Település
FROM Dolgozók

Számoljuk meg hány település van.

Megoldás
SELECT COUNT(*)
AS "Települések száma"
FROM
(SELECT  DISTINCT Település
FROM Dolgozók) AS alap

vagy:

SELECT COUNT(*)
AS "Települések száma"
FROM
(SELECT  Település
FROM Dolgozók
GROUP BY Település) AS alap

Hány éves az első dolgozó?

Megoldás
SELECT YEAR(now()) - YEAR(születés)
FROM Dolgozók
WHERE Az = 1

Hány éves a legfiatalabb dolgozó?

Megoldás
SELECT YEAR(now()) - YEAR(MAX(születés))
FROM Dolgozók

Feladat 005

Adott a következő dolgozók nevű tábla.

Szemelyek
az nev telepules lakcim szuletes belepes fizetes jutalom
1 Perkel Ibolya Miskolc Tornyosi út 75. 1989-07-12 2013-02-01 1800000 560000
2 Talon Ferenc Hatvan Árkos utca 43. 1995-03-02 2015-01-01 1540000 560000

Válaszoljon az alábbi kérdésekre.

1.) Mennyi jutalmat kapnak az adonyi és keceli dolgozók? Összesen.

Megoldás
SELECT SUM(jutalom)
FROM Szemelyek
WHERE telepules="Adony"
OR telepules="Kecel"

2.) Mennyi jutalmat és fizetést kapnak battonyai, mátészalkai és csorvási dolgozok, összesen? A jutalom és fizetés is legyen összesítve, egyetlen lekérdezésben.

Megoldás
SELECT SUM(fizetes+jutalom) 
FROM Szemelyek
WHERE telepules="Battonya"
OR telepules="Mátészalka"
OR telepules="Csorvás"

3.) Mennyi jutalmat és fizetést kapnak nagyatádi, nyírábrányi és kenderesi dolgozok, településenként összesen?

Megoldás
SELECT telepules, SUM(jutalom+fizetes) AS "Összes LÓVÉ"
FROM Szemelyek
WHERE telepules="Nagyatád"
OR telepules="Nyírábrány"
OR telepuels="Kenderes"
GROUP BY telepules

4.) Mi az életkorok átlaga az összes dolgozóknak? Évre?

Megoldás
SELECT now()
SELECT YEAR(now())
SELECT YEAR(szuletes)
FROM Szemelyek
SELECT YEAR(now())-YEAR(szuletes)
FROM Szemelyek
SELECT avg(YEAR(now())-YEAR(szuletes)) AS "Születések átlag"
FROM Szemelyek

5.) Írass ki azoknak a hatvani dolgozóknak a nevét fizetését és jutalmát, akik idősebbek 60 évnél.

Megoldás
SELECT nev, fizetes, jutalom
FROM Szemelyek 
WHERE telepules = "Hatvan"
AND YEAR(now())-YEAR(szuletes) > 60

Kéttáblás lekérdezés

101 feladat

Jelenítse meg az összes zeneszámot és előadót.

Megoldás
select zeneszamok.cim
from zeneszamok inner join eloadok
on zeneszamok.eloadoAz=eloadok.az;

A művelethez a két táblát össze kell kapcsolni. A „from zeneszamok inner join eloadok” rész azt mondja, hogy a zeneszamok táblát összekapcsolom az „eloadok” táblával. Az „on zeneszamok.eloadoAz=eloadok.az;” rész azt mondja meg, hogy melyik két mezőt kapcsolom össze a két táblában. A zeneszamok táblában az „eloadoAz” idegen kulcs. Az „eloadok” táblában az „az” mező elsődleges kulcs. Ezeket kapcsoljuk össze.

102 feladat

Kérdezze le a „Lovas” című könyv szerzőjének telefonszámát.

Megoldás
select telefon
from konyvek inner join szerzok
on konyvek.szerzoAz = szerzok.az
where cim="Lovas"

103 feladat

Kérdezze le „Barna Ferenc” nevű tulajdonosnak, hány darab ingatlana van.

Megoldás
select count(*)
from ingatlanok inner join szemelyek
on ingatlanok.szemelyAz = szemelyek.az
where nev="Barna Ferenc"

Három táblás

201 feladat

Adott a következő adatbázis:

Kérdezze le Szabó János milyen projektekben vesz részt.

Megoldás
select projektek.nev, projektek.leiras
 
from (dolgozok inner join dolgozokProjektek
on dologozok.az = dolgozokProjektek.dolgozoAz) 
inner join projektek
on dolgozokProjektek.projektekAz = projektek.az
 
where dolgozok.nev = "Szabó József"

Az on direktívában a táblanevek rövidíthetők, ha a inner join előtt és után megadunk egy álnevet:

select projektek.nev, projektek.leiras
 
from (dolgozok a inner join dolgozokProjektek b
on a.az = b.dolgozoAz) 
inner join projektek c
on b.projektekAz = c.az
 
where dolgozok.nev = "Szabó József"

202 feladat

Milyen beteghez tartozik a 35 számú recept?

Megoldás
select nev
from paciensek a 
inner join kezelesek b on a.az = b.paciensekAz
inner join receptek c on b.az = c.kezelesAz
where receptek.az = 35;
oktatas/adatbazis-kezeles/feladatok_es_megoldasok.txt · Utolsó módosítás: 2019/12/22 23:47 szerkesztette: admin