Elemi alkalmazások fejlesztése IV.
Sql
SQL – STRUKTÚRÁLT (ADATBÁZIS) LEKÉRDEZ NYELV ......................................................................................... 2 ADATBÁZIS TÁBLÁZATOK ....................................................................................................................................... 2 AZ „ISKOLA” ADATBÁZIS FELÉPÍTÉSE...................................................................................................................... 2 DIÁKOK............................................................................................................................................................. 2 REGISZTRÁCIÓ ................................................................................................................................................ 2 ÓRÁK ................................................................................................................................................................. 2 A MYSQL ADATBÁZISKEZEL ................................................................................................................................ 3 A MySQL installálása ........................................................................................................................................ 3 A MySQL adatbáziskezel használata................................................................................................................ 3 MySQL parancsok.............................................................................................................................................. 4 ADATBÁZIS LÉTREHOZÁSA: CREATE DATABASE............................................................................................... 5 ADATBÁZIS HASZNÁLATBAVÉTELE: USE ................................................................................................................ 5 TÁBLÁZAT STRUKTÚRA LÉTREHOZÁSA: CREATE TABLE..................................................................................... 5 TÁBLÁZAT STRUKTÚRA MEGTEKINTÉSE: DESCRIBE ............................................................................................. 6 TÁBLÁZAT STRUKTÚRA MÓDOSÍTÁSA: ALTER TABLE ......................................................................................... 6 ÚJ ADATSOR BESZÚRÁSA: INSERT ......................................................................................................................... 7 GYAKORLÁS: TANDÍJAK TÁBLA LÉTREHOZÁSA ....................................................................................................... 7 ADATOK MÓDOSÍTÁSA: UPDATE ........................................................................................................................... 7 ADATSOROK TÖRLÉSE: DELETE ............................................................................................................................ 8 TÁBLÁZAT STRUKTÚRA TÖRLÉSE: DROP TABLE .................................................................................................. 8 EGYSZER LEKÉRDEZÉSEK – SELECT ...................................................................................................................... 9
SELECT *
from diakok;.............................................................................................................................................................. 9
STATISZTIKAI FÜGGVÉNYEK: MIN, MAX, SUM, AVG, COUNT................................................................................... 10 MATEMATIKAI M VELETEK ÉS MATEMATIKAI FÜGGVÉNYEK ................................................................................ 10 ÖSSZETETT LEKÉRDEZÉSEK – SELECT ................................................................................................................. 11
Példa........................................................................................................................................................................................ 11 Példa:....................................................................................................................................................................................... 11
ÖSSZESÍTÉS KÉSZÍTÉSE: GROUP BY .................................................................................................................... 12 Példa........................................................................................................................................................................................ 12
FELTÉTELES ÖSSZESÍTÉS KÉSZÍTÉSE: HAVING..................................................................................................... 12 Példa........................................................................................................................................................................................ 12
RENDEZETT LISTA KÉSZÍTÉSE: ORDER BY .......................................................................................................... 13 TARTALMAZÁS FELTÉTEL: IN ÉS BETWEEN........................................................................................................ 13 TÖBB TÁBLÁZAT ÖSSZEKAPCSOLÁSA: JOIN.......................................................................................................... 14
Szabóné Nacsa Rozália:
[email protected]
ELTE IK
1. oldal
Elemi alkalmazások fejlesztése IV.
Sql
SQL – Struktúrált (adatbázis) lekérdez nyelv Az SQL – (Structured Query Language - Struktúrált lekérdez nyelv) relációs adatbázisok kezelésére kifejlesztett szabvány, amely alkalmazható relációs adatbázisok létrehozására, módosítására, valamint arra, hogy az így létrehozott adatbázisból különféle adatokat nyerjünk ki és jelenítsünk meg.
Néhány relációs adatbáziskezel Ingres, MySQL.
rendszer: Oracle, Sybase, Microsoft SQL Server, Access,
Valamennyi relációs adatbáziskezel rendszer értelmezi a legalapvet bb SQL parancsokat, az összetettebb parancsok azonban az egyes rendszereknél eltér ek lehetnek.
Adatbázis táblázatok Egy relációs adatbázis egy vagy több táblázatból áll. Az adatokat és az adatbázisra vonatkozó információkat ezen táblázatok (relációk) tartalmazzák. A táblázatoknak egyedi nevük van. Az adatbázis tárolja az oszlop egyedi nevét, adata típusát és egyéb tulajdonságait.
Az „Iskola” adatbázis felépítése REGISZTRÁCIÓ
DIÁKOK dkód 1001 1002 1003 1004 1005 1006 2001 2002 2003 2004
vnév Kiss Nagy Nagy Szabó Kiss Nagy Szabó Kiss Nagy Szabó
knév János János Katalin Kinga Hajnalka Benedek Péter Katalin János Benedek
dkód
okód
dátum
1001 1002 1003 1004 1005 1006 2001 2002 2003 2004 2004
nem01 ang03 ang01 nem01 ang01 ang03 ang03 ang01 nem01 ang03 nem01
2002-05-07 2002-05-14 2002-05-14 2002-05-07 2002-05-09 2002-05-14 2002-05-09 2002-05-07 2002-05-14 2002-05-09 2002-05-09
ÓRÁK okód
tárgy
ang01 ang02 ang03 nem01 nem02
angol angol angol német német
szint
1 1 2 2 1
nap
kezdete
vége
Hétfö Hétfö Kedd Kedd Hétfö
08:00:00 10:00:00 08:00:00 10:00:00 10:00:00
10:00:00 12:00:00 10:00:00 12:00:00 12:00:00
Megjegyzés: A táblázatokban szürkével jelölt oszlopok a táblázat kulcsmez i. Ezeknek az adatoknak egyedieknek kell lennie. (Primary key)
ELTE IK
2. oldal
Elemi alkalmazások fejlesztése IV.
Sql
A MySQL adatbáziskezel Ebben a fejezetben az SQL – (Structured Query Language - Struktúrált lekérdez nyelv) relációs adatbázisok kezel nyelv használatával szeretnénk megismerkedni. Ahhoz, hogy a nyelv parancsait kipróbálhassuk, szükségünk van egy „él ” adatbáziskezel re. Mi erre a célra a MySQLAB által kifejlesztett, szabadon forgalmazott MySQL adatbáziskezel rendszert választottuk. (www.mysql.com), amely több platformra is létezik.
A MySQL installálása Ha Ön olyan gépnél dolgozik, amelyre még nem installálták fel a mysql-t, akkor hajtsa végre az 1-4 lépéseket: 1. A mysql.com weboldalról töltse le a mysql-3.23.52-win.zip, és a mysql++-1.7.1-1win32-vc++.zip fájlokat. 2. A mysql-3.23.51-win.zip kicsomagolása után indítsa el a setup.exe programot. Legyen a célkönyvtár neve mysql. 3. Csomagolja ki a mysql++-1.7.1-1-win32-vc++.zip fájlt. Legyen a célkönyvtár neve szintén mysql. 4. A mysql\bin\winmysqladmin.exe program segítségével elindíthatja, bezárhatja, módosíthatja a MySql szervert. Megjegyzés: • Ha parancsablakból elindítja a mysql\bin\mysql.exe programot, akkor itt közvetlenül adhat ki parancsokat a MySQL adatbáziskezel nek. • A MySQL futtatásához számítógépünknek rendelkeznie kell TCP/IP kapcsolattal. • Hasznos információkat találhat a mysql/doc alkönyvtárban.
A MySQL adatbáziskezel használata Ha parancsablakból elindítjuk a mysql\bin\mysql.exe programot, akkor itt közvetlenül adhatunk ki parancsokat a MySql databáziskezel nek. (el tte a winmysqladmin.exe programmal el kell indítani egy adatbáziskezel szervert)
ELTE IK
3. oldal
Elemi alkalmazások fejlesztése IV.
Sql
MySQL parancsok Help (\h) ? (\?) Clear (\c) connect (\r) Ego (\G) Exit (\q) Go (\g) Note (\t) Print (\p) Quit (\q) Rehash (\#) Source (\.) Status (\s) Tee (\T) Use (\u)
Display this help. Synonym for `help'. Clear command. Reconnect to the server. Optional arguments are db and host. Send command to mysql server, display result vertically. Exit mysql. Same as quit. Send command to mysql server. Don't write into outfile. Print current command. Quit mysql. Rebuild completion hash. Execute a SQL script file. Takes a file name as an argument. Get status information from the server. Set outfile [to_outfile]. Append everything into given outfile. Use another database. Takes database name as argument.
Saját jegyzeteim
ELTE IK
4. oldal
Elemi alkalmazások fejlesztése IV.
Sql
Adatbázis létrehozása: CREATE DATABASE CREATE DATABASE
adatbázis neve;
A MySQL a c:\mysql\data alkönyvtárban létrehoz egy „adatbázis neve” nev alkönyvtárat. Az SQL parancsokat MINDIG le kell zárni egy PONTOSVESSZ
VEL.
Adatbázis használatbavétele: USE USE
adatbázis neve;
Az adatbázist minden felhasználásnál „használatba” kell venni.
Táblázat struktúra létrehozása: CREATE TABLE Az SQL-ben a CREATE TABLE utasítás segítségével hozunk létre táblázatot (alaprelációt). Egyszer create parancs:
táblanév (oszlop1 típus, oszlop2 típus, oszlop3 típus, . . .);
CREATE TABLE
Create parancs megszorítással:
táblanév (oszlop1 típus [megszorítás], oszlop2 típus [megszorítás], . . .)
CREATE TABLE
Példák CREATE TABLE diakok VARCHAR(10));
(dkod INT(4) PRIMARY KEY NOT NULL, vnev VARCHAr(10), knev
CREATE TABLE REGISZTRACIO (dkod INT(4) NOT NULL, DATE, PRIMARY KEY(dkod,okod));
okod CHAR(4) NOT NULL, datum
CREATE TABLE orak (okod CHAR(5) PRIMARY KEY NOT NULL, INT(1), nap VARCHAR(9), kezdete TIME, vege TIME);
targy CHAR(10) NOT NULL, szint
A tábla neve bet vel kezd dhet, belsejében bet ket, aláhúzás jeleket és számokat lehet használni. A név ne legyen 30 jelnél hosszabb, és ne használjuk az SQL foglalt szavait (min pl. select, create, describe, where, stb.)
A típusban definiálhatjuk, milyen adatot tárolunk az adott oszlopban. A PRIMARY KEY jelzi, hogy az oszlopban minden értéknek egyedinek kell lennie. Figyeljük meg, hogy a regisztracio táblában két oszlop közösen alkotja az els dleges kulcsot.
Leggyakoribb típusok: CHAR(méret): VARCHAR(méret):
INT(méret): DATE: TIME:
ELTE IK
Fix, méret hosszúságú karakterlánc. max: 255 hosszú. változó (maximum méret) hosszúságú karakterlánc. egész szám dátum (’éé-hh-nn’ alakban); id (’oo:pp:mm’ alakban)
5. oldal
Elemi alkalmazások fejlesztése IV.
Sql
Táblázat struktúra megtekintése: DESCRIBE DESCRIBE
táblanév;
Példák DESCRIBE DIAKOK;
Field dkod vnev knev
Type int(4) varchar(10) varchar(10)
Null
Key PRI
Default 0 NULL NULL
Extra
Key PRI PRI
Default 0
Extra
YES YES
DESCRIBE REGISZTRACIO;
Field dkod okod datum
Type int(4) char(4) date
Null
YES
NULL
DESCRIBE ORAK;
Field okod targy szint nap kezdete vege
Type varchar(5) varchar(10) int(1) varchar(9) time time
Null
Key PRI
YES YES YES YES
Default
Extra
NULL 0 NULL NULL NULL
Táblázat struktúra módosítása: ALTER TABLE Létez tábla struktúrájának módosítása: új oszlop beszúrása, oszlopnév/tulajdonságok módosítása.
ALTER [IGNORE] TABLE
táblanév alter_spec
néhány alter_specifikáció: or or or or or or or
ADD [COLUMN] oszlop_def [FIRST | AFTER oszlopnév ADD [COLUMN] (oszlop_def, oszlop_def,...) CHANGE [COLUMN] régi_oszlopnév oszlop_def MODIFY [COLUMN] oszlop_def DROP [COLUMN] oszlopnév DROP PRIMARY KEY RENAME [TO] új_tablanév ORDER BY oszlop
]
oszlop_def: oszlopnév típus [megszorítás] Példa: ALTER TABLE diakok CHANGE vnev vnev VARCHAR(15) not null;
ELTE IK
6. oldal
Elemi alkalmazások fejlesztése IV.
Sql
Új adatsor beszúrása: INSERT Egy új sort az insert paranccsal szúrhatunk be a táblázatunkba. INSERT
into táblanév (els _oszlop_neve,...,utolsó_oszlop_neve) VALUES (els _érték,...utolsó_érték);
Ha ki szeretné listázni a táblázatot, akkor adja ki a select * from táblanév; parancsot!
Példák INSERT INTO diakok VALUES ((1001,’Kiss’,’János’); INSERT INTO orak VALUES (’ang01’,’angol’,1,’Hétf ’,’08:00:00’,’10:00:00); INSERT INTO regisztracio VALUES (1001,’nem01’,’2002-05-07’);
Gyakorlás: Tandíjak tábla létrehozása Hozzunk létre egy új táblázatot az alábbiak szerint! TANDIJAK okod ang01 ang02 ang03 nem01 nem02
tandij 5000 10000 4000 6000 7000
CREATE TABLE tandijak NULL, tandij INT(5));
(okod CHAR(5) PRIMARY KEY NOT
INSERt INTO tandijak VALUES("ang01",5000); INSERT INTO tandijak VALUES("ang02",10000); INSERT INTO tandijak VALUES("nem01",6000); INSERT INTO tandijak VALUES("nem02",7000); INSERT INTO tandijak VALUES("ang03",4000);
Adatok módosítása: UPDATE Az Update parancsot használjuk egy adott feltételnek eleget tév rekordkészlet módosítására.
UPDATE táblanév" SET oszlopnév új_érték1[ ,köv_oszlopnév = új_érték2...] WHERE oszlop1 OPERATOR érték [ AND | OR oszlop2 OPERATOR
érték ];
Példák Az alábbi paranccsal áttehetjük az ORAK táblázat valamennyi hétf i 10-12-ig tartott óráját szerda: 8-10-ig-re.
orak SET kezdete=’08:00:00’, vege=’10:00:00’, nap=’Szerda” WHERE nap=”Hétfö” AND kezdete=’10:00:00’;
UPDATE
ELTE IK
7. oldal
Elemi alkalmazások fejlesztése IV.
Sql
Adatsorok törlése: DELETE DELETE FROM táblanév WHERE oszlop1 OPERATOR
érték [ AND | OR oszlop2 OPERATOR érték ];
Figyelem: Ha nem adunk WHERE kiegészítést, akkor a táblázat összes sorát törli. – NEM KÉRDEZ!!!
Példák Az alábbi parancs törli az ORAK táblázatunkból a 1 szint (alapfokú) német órákat. DELETE FROM
orak WHERE targy=’német’ AND szint=1;
Táblázat struktúra törlése: DROP TABLE táblanév; A fenti parancs végrehajtása után nem lesz többé az adatbázisunkban táblanév nev táblázat. DROP TABLE
NEM KÉRDEZ!!!
Saját jegyzeteim
ELTE IK
8. oldal
Elemi alkalmazások fejlesztése IV.
Sql
Egyszer lekérdezések – Select A SELECT paranccsal gy jthetjük ki az adatbázisunkból az általunk megfogalmazott feltételeknek eleget tév adatokat.
A SELECT parancs egyszer sített formája: SELECT oszlop1 [oszlop2, oszlop3, stb.] FROM táblanév [WHERE feltétel]
A SELECT kulcsszót követ eredménylistában megjeleníteni.
oszlopnevekkel adjuk meg, mely oszlopokat szeretnénk az
A FROM szócskát követ táblanév jelöli ki azt a táblázatot, amelyb l az eredménylistát fel szeretnénk építeni.
A WHERE kiegészítésben megfogalmazhatjuk, hogy milyen feltételeknek eleget tév adatok/rekordok kerüljenek be az eredménybe.
Feltételes operátorok a WHERE kiegészítésben: =, >, <, >=, <=, <> or !=, LIKE, ahol a LIKE mintailleszt operátorral a % jelet helyettesít ként használva adhatunk meg feltételt.
Példák SELECT *
from diakok;
dkod 1001 1002
vnev Kiss Nagy
knev János János
1003
Nagy
Katalin
2001 2002
Szabó Kiss
Péter Katalin
2003
Nagy
János
1004 1005
Szabó Kiss
Kinga Hajnalka
2004
Szabó
Benedek
1006
Nagy
Benedek
ELTE IK
SELECT dkod,knev FROM diakok WHERE vnev="Nagy";
dkod 1002
knev János
1003
Katalin
2003 1006
János Benedek
“Nagyék” listája
SELECT dkod,datum FROM regisztracio WHERE okod LIKE '%01';
dkod 1001 1003
dátum 2002-05-07 2002-05-14
1004
2002-05-07
1005 2002
2002-05-09 2002-05-07
2003
2002-05-14
2004
2002-05-09
Az ang01és nemö1 csoport listája
9. oldal
Elemi alkalmazások fejlesztése IV.
Sql
Statisztikai függvények: min, max, sum, avg, count MIN
Az adott oszlop legkisebb értéke
MAX
Az adott oszlop legnagyobb értéke
SUM
Az adott oszlop adatainak összege
AVG
Az adott oszlop adatainak átlaga
COUNT
Az adott oszlopban szerepl sorok száma
COUNT(*) A táblázatban szerepl sorok száma
Példák SELECT COUNT(*) FROM
diakok;
SELECT AVG(tandij) FROM
Count(*) 10
tandijak;
Avg(tandij) 6400
Matematikai m veletek és matematikai függvények Matematikai m veletek: + , -, *, /, % (moduló) Matematikai függvények: ABS(x)
x abszolút értéke
SIGN(X)
x el jelét l függ en értéke -1, 0, vagy 1 (negatív, zéró, vagy pozitív)
MOD(X,Y)
Ugyanaz, mint az x%y
POWER(X,Y)
xy
ROUND(X)
Egészre kerekített érték
ROUND(X,D)
D db tizedesre kerekített érték
SQRT(X)
x négyzetgyöke
Példák SELECT okod,ROUND(tandij/15) FROM tandijak;
okod ang01 ang02 nem01 nem02 ang03
ELTE IK
Saját jegyzeteim
round(tandij/15) 333 667 400 467 267
10. oldal
Elemi alkalmazások fejlesztése IV.
Sql
Összetett lekérdezések – SELECT SELECT [ALL | DISTINCT] oszlop1[,oszlop2] FROM table1[,table2] [WHERE feltétel] [GROUP BY oszloplista] [HAVING feltételek] [ORDER BY oszloplista [ASC | DESC] ]
A SELECT parancs öt b vítményt tartalmaz, bár csak a FROM b vítmény használata kötelez .
Példa SELECT neve, kora, fizetése FROM alkalmazottak WHERE kora > 40; DISTINCT kulcsszót akkor használjuk,
A szeretnénk megjeleníteni.
ha az eredményben az ismétl d sorokat csak egyszer
Példa: SELECT
okod FROM regisztracio; okod nem01
SELECT DISTINCT
okod FROM regisztracio;
ang03 ang01
okod nem01 ang03
nem01
ang01
ang01 ang03 ang03
Azon órák listája, amelyekre már jelentkezett valaki.
ang01 nem01 ang03 nem01
Saját jegyzeteim
ELTE IK
11. oldal
Elemi alkalmazások fejlesztése IV.
Sql
Összesítés készítése: GROUP BY SELECT oszlop1, [SUM(oszlop2)] FROM táblák listája [GROUP BY oszlopok listája;]
A GROUP BY kikötéssel összegy jtjük azokat a sorokat, amelyek értéke a jelölt oszlopban megegyezik, és ezekre a sorokra együttesen végzi el a megadott m veletet. Példa
Szeretném megtudni, hogy melyik órára hányan diák regisztrált.
Saját jegyzeteim
SELECT okod, COUNt(dkod) FROM regisztracio GROUP BY okod;
okod
count(dkod)
ang01 ang03
3 4
nem01
4
Feltételes összesítés készítése: HAVING SELECT oszlop1, [SUM(oszlop2)] FROM táblák listája [GROUP BY táblák listája] [HAVING feltételek;]
A
GROUP BY b vítménnyel kialakított HAVING feltételnek is eleget tesznek.
csoportokból csak azok kerülnek be a listába, amelyek a
Példa
Keresem azokat az órákat, ahol 3-nál többen regisztráltak. SELECT okod, COUNT(dkod) FROM regisztracio GROUP BY okod HAVING COUNT(dkod)
> 3;
okod
count(dkod)
ang03
4
nem01
4
ELTE IK
Saját jegyzeteim
12. oldal
Elemi alkalmazások fejlesztése IV.
Sql
Rendezett lista készítése: ORDER BY SELECT oszlop1, [SUM(oszlop2)] FROM táblák listája [ORDER BY oszlopok listája [ASC | DESC]
];
Az ORDER BY egy olyan tetsz legesen választható kiegészítés, amellyel az megadott oszlopok szerint rendezett listát készíthetünk.
Kászítsünk névsorszerint rendezett listát a „nem János” diákokról!
ORDER BY
után
Saját jegyzeteim
SELECT vnev, knev, dkod FROM diakok WHERE knev<>"János" ORDER BY vnev,
knev; vnev Kiss Kiss
knev Hajnalka Katalin
dkod 1005 2002
Nagy
Benedek
1006
Nagy Szabó
Katalin Benedek
1003 2004
Szabó
Kinga
1004
Szabó
Péter
2001
Tartalmazás feltétel: IN és BETWEEN SELECT oszlop1, SUM(oszlop2) FROM táblázatok listája [WHERE oszlop3 IN (értékek SELECT oszlop1, SUM(oszlop2) FROM táblázatok listája [WHERE oszlop3 BETWEEN
listája)];
érték1 AND érték2] ;
Az IN feltételes operátor egy igazi halmazelméleti “eleme” operator. Segítségével eldönthetjük, hogy az eredményadatok adott oszlopának értéke benne van-e az IN után megadott listában. Az eredmény listába csak azok a tételek kerülnek be, amelyek eleget tesznek az “eleme” feltételnek. A BETWEEN feltételes operátorral eldönthetjük, hogy a megjelölt oszlop adatai benne vannak-e a megadott intervallumban. Példa: Az alábbi paranccsal Katalin és Kinga keresztnev diákjainkat listázhatjuk ki. SELECT vnev, knev FROM diakok WHERE knev IN ("Katalin","Kinga");
ELTE IK
13. oldal
Elemi alkalmazások fejlesztése IV.
Sql
Több táblázat összekapcsolása: JOIN Lehet ség van olyan lekérdezések készítésére, ahol egyszerre több táblázatot is összekapcsolunk. Az “összekapcsolás” a táblázatok vessz vel elválasztott felsorolásával történik. Ha kiadjuk a SELECT regisztracio.okod,tandij FROM regisztracio, tandijak; parancsot, akkor kapunk egy nagyon hosszú listát és abban a meglepetésben lesz részünk, hogy mindenki mindenkivel össze van kapcsolva (“ez a két halmaz direkt szorzata”).
Értelmesebb végeredményt kapunk, ha a fenti, nagyon hosszú listából kisz rjük azokat a sorokat, amelyekben az okod megegyezik (a két táblázatot az okod oszlop mentén kötjük össze). Ehhez az alábbi parancsot kell kiadni: SELECT regisztracio.okod,tandij FROM regisztracio, tandijak WHERE regisztracio.okod=tandijak.okod;
okod ang01 ang01
tandíj 5000 5000
ang01
5000
nem01 nem01
6000 6000
nem01
6000
nem01 ang03
6000 4000
ang03
4000
ang03 ang03
4000 4000
Ha csoportonkénti bontásban szeretnénk megkapni a tandíjbevételeket, akkor a fenti parancsot tovább kell finomítani: SELECT regisztracio.okod,SUM(tandij) FROM regisztracio, tandijak WHERE regisztracio.okod=tandijak.okod GROUP BY okod;
ELTE IK
okod ang01
sum(tandij) 15000
ang03
16000
nem01
24000
14. oldal
Elemi alkalmazások fejlesztése IV.
Sql
Ha csak azokat a csoportokat szeretnénk kilistázni, amelyeknél a tandíjbevétel 15000 Ft felett van, akkor az alábbiak szerint kell módosítani a parancsot: SELECT regisztracio.okod, SUM(tandij) FROM regisztracio, tandijak WHERE regisztracio.okod = tandijak.okod GROUP BY okod HAVING SUM(TANDIJ) > 15000;
okod
sum(tandij)
ang03 nem01
16000 24000
Módosítsuk a fenti listát oly módon, hogy a tantárgy nevét is megjelentetjük az eredmény listában. SELECT regisztracio.okod, orak.targy, SUM(tandij) FROM regisztracio, tandijak,orak WHERE regisztracio.okod=tandijak.okod AND GROUP BY okod;
ELTE IK
regisztracio.okod=orak.okod
okod ang01
targy angol
sum(tandij) 15000
ang03
angol
16000
nem01
német
24000
15. oldal