create database tanker character set utf8 collate utf8_hungarian_ci; use tanker; create table szemelyek ( az int not null primary key auto_increment, nev varchar(50), telepules varchar(50), cim varchar(50), belepes date ); insert into szemelyek (nev, telepules, cim, belepes) values ('Nagy József', 'Szolnok', 'Nyár u. 3.', '2010-03-17'), ('Pár Elek', 'Debrecen', 'Tél u. 3.', '2005-01-01'), ('Tér Ferenc', 'Szolnok', 'Kossuth u. 5.', '2000-02-01'), ('Dolog Károly', 'Szeged', 'Almás tér 2', '2007-05-01'), ('Tronf Mihály', 'Debrecen', 'Lát u. 45.', '2005-02-01'), ('Ab Béla', 'Szolnok', 'Bach u. 91', '2000-07-01');
Egy cég a dolgozóit a „szemelyek” nevű táblában tartja nyilván. A táblában minden dolgozónak van egy azonosítója, nyilván van tartva a neve, a település és cím ahol lakik, és mikor lépett be a céghez.
szemelyek | ||||
---|---|---|---|---|
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 |
Jelenítse meg azokat a dolgozókat, amelyek Szolnokon laknak.
SELECT nev FROM szemelyek WHERE telepules="Szolnok";
Számolja meg, összesen, hány személy van a szemelyek táblában.
SELECT COUNT(az) AS Összesen FROM szemelyek;
Számolja meg, hány szolnoki személy van.
SELECT COUNT(az) FROM szemelyek WHERE telepules="Szolnok";
Számolja meg, Pár Elek hány napja van a cégnél.
SELECT now() - belepes AS "Napok száma" FROM szemelyek WHERE nev="Pár Elek";
Jelenítse meg, azoknak a nevét, akik februárban léptek be.
SELECT nev FROM szemelyek WHERE MONTH(belepes)=2;
Jelenítse meg, milyen települések vannak. Egy település csak egyszer szerepeljen.
SELECT telepules FROM szemelyek GROUP BY telepules;
Jelenítse meg, azok nevét, akik 2003 előtt léptek be.
SELECT nev FROM szemelyek WHERE belepes<"2003-1-1";
MS Access:
SELECT nev FROM szemelyek WHERE belepes<#1/1/2003#;
Jelenítse meg, a szegedi és szolnoki dolgozók közül azokat, akik 2005 után jöttek a céghez.
SELECT nev, telepules, belepes FROM szemelyek WHERE (telepules = "Szeged" OR telepules = "Szolnok") AND belepes > "2005-12-31";
MS Access
SELECT nev, telepules, belepes FROM szemelyek WHERE (telepules = "Szeged" OR telepules = "Szolnok") AND belepes > #31/12/2005#;
A MS Access megoldás az MS Access 2007-es szintaktikája.
Adott a következő pácienseket tartalmazó „Személy” nevű tábla:
szemelyek | |||||
---|---|---|---|---|---|
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 |
create table szemelyek ( id int not null primary key auto_increment, nev varchar(50), telepules varchar(50), szuletes date, ar double, tuszuras boolean ); insert into szemelyek (nev, telepules, szuletes, ar, tuszuras) values ('Nagy Emese', 'Szolnok','1978-05-11', 6500,1), ('Kis Géza', 'Nyíregyháza','1982-07-01', 10000,1), ('Danka Béla', 'Szolnok','1984-02-05', 12000,1);
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:
SELECT * FROM szemelyek;
Jelenítse meg, csak a nevek és a település mezőket:
SELECT nev, telepules FROM szemelyek;
Jelenítse meg, csak a település és az ár mezőket:
SELECT telepules, ar FROM szemelyek;
Jelenítse meg, a szolnokiak neveit:
SELECT nev FROM szemelyek WHERE telepules="Szolnok";
Jelenítse meg, azok neveit és települését, akik többet fizetnek mint 10000:
SELECT nev, telepules FROM szemelyek WHERE ar>10000;
Jelenítse meg, ki hány éves?
SELECT nev, YEAR(now()) - YEAR(szuletes) FROM szemelyek;
Jelenítse meg, a mai dátumot:
SELECT now();
Jelenítse meg, a mai dátum év részét:
SELECT YEAR(now());
Mai dátum hónap része:
SELECT MONTH(now());
A mai dátum nap része:
SELECT DAY(now());
Jelenítése meg, mindenki nevét és életkorát:
SELECT nev, YEAR(now()) - YEAR(szuletes) FROM szemelyek;
Számolja meg, hány páciens van:
SELECT COUNT(az) FROM szemelyek;
Számolja meg, hány páciens van Szolnokról:
SELECT COUNT(az) FROM szemelyek WHERE telepules="Szolnok";
Hány embert lehet tűszúrással gyógyítani?
SELECT COUNT(az) FROM szemelyek WHERE tuszuras=TRUE;
Mennyi volt a bevétel, a páciensektől eddig összesen?
SELECT SUM(ar) FROM szemelyek;
Mennyi volt a bevétel, a páciensektől eddig összesen? A fejléc „Összbevétel” legyen!
SELECT SUM(ar) AS Összbevétel FROM szemelyek;
Mennyi, az átlagbevétel Budapestről?
SELECT avg(ar) FROM szemelyek WHERE telepules="Budapest";
Mennyi, az átlagbevétel Budapestről? A fejléc „Budapesti átlagbevétel” legyen!
SELECT avg(ar) AS "Budapesti átlagbevétel" FROM szemelyek WHERE telepules="Budapest";
Jelenítse meg, azok neveit, akik Szolnokról valók és tűszúrással gyógyíthatók!
SELECT nev FROM szemelyek WHERE telepules="Szolnok" AND tuszuras=TRUE;
Jelenítse meg, milyen településekről vannak páciensek. Egy név csak egyszer szerepeljen.
SELECT telepules FROM szemelyek 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.
SELECT nev, telepules FROM szemelyek WHERE személy.szuletes< "1970-01-01";
MS Access:
SELECT nev, telepules FROM szemelyek WHERE személy.szuletes<#1/1/1970#;
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.
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 Eszter | 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 |
create table Dolgozók ( Az int not null primary key auto_increment, Név varchar(50), Anyja_neve varchar(50), Település varchar(50), Lakcím varchar(50), Születés date, Belépés date, Fizetés double, Jutalom double ); insert into Dolgozók (Név, Anyja_neve, Település, Lakcím, Születés, Belépés, Fizetés, Jutalom) values ('Nagy József', 'Marsh Eszter', 'Szolnok', 'Tél u. 23.', '1975-08-25', '2004-03-01', 570000, 5000), ('Pék Réka', 'Sargéj Tímea', 'Miskolc', 'Árny u. 29.', '1977-02-03', '2006-04-01', 389000, 10000), ('Kis Mária', 'Immell Márta', 'Debrecen', 'Vértes u. 20', '1981-04-01', '2005-03-27', 680000, 5000), ('Érdek Júlia', 'Haller Fruzsina', 'Szeged', 'Bíró u. 25.', '1982-03-08', '2008-09-01', 190000, 15000), ('Boros Evelin', 'Csömöri Nikolett', 'Szolnok', 'Barát u. 78.', '1988-02-22', '2001-01-01', 850000, 5000), ('Lórem Kinga', 'Gory Nikolett', 'Szeged', 'Pilisi út 17.', '1973-08-02', '2000-01-01', 878000, 15000), ('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:
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.
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ó?
SELECT YEAR(now()) - YEAR(születés) FROM Dolgozók WHERE Az = 1
Hány éves a legfiatalabb dolgozó?
SELECT YEAR(now()) - YEAR(MAX(születés)) FROM Dolgozók
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.
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.
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?
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?
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.
SELECT nev, fizetes, jutalom FROM Szemelyek WHERE telepules = "Hatvan" AND YEAR(now())-YEAR(szuletes) > 60
Jelenítse meg az összes zeneszámot és előadót.
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.
Kérdezze le a „Lovas” című könyv szerzőjének telefonszámát.
select telefon from konyvek inner join szerzok on konyvek.szerzoAz = szerzok.az where cim="Lovas"
Jelenítse meg azon könyvek szerzőinek nevét, akiknek a könyvcímükben szerepel a „lovas” szó.
select szerzo.nev from szerzok inner join konyvek on konyvek.szerzoAz = szerzok.az where konyvek.cim like "%lovas%";
Jelenítse meg a 2000 Ft-nál drágább könyvek címeit, és szerzőjük nevét.
select konyvek.cim, szerzo.nev from szerzok inner join konyvek on konyvek.szerzoAz = szerzok.az where konyvek.ar > 2000;
Jelenítse meg hány darab 2000 Ft-nál drágább könyvek van. Az eredmény felirata „Drága könyvek” legyen.
Jelenítse meg, mennyi a könyvek átlagára. Az eredményben a 'Átlag' szerepeljen.
Szúrjon be egy új szerzőt a következő adatokkal: Pere János, 30-384124, pere@vhol.hu
insert into szerzok (nev, telefon, email) values ("Pere János", "30-384124", "pere@vhol.hu");
Szúrjon be egy új könyvet a következő adatokkal: cím: Valami ár: 3000 szerző: 3 Az ISBN-t nem kell megadni.
Szúrjon be egy új könyvet a következő adatokkal:
Kérdezze le „Barna Ferenc” nevű tulajdonosnak, hány darab ingatlana van.
Adott a következő adatbázis:
Kérdezze le Szabó János milyen projektekben vesz részt.
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"