/* kifejezések kiértékelése */ SELECT 2+4; /* teljes táblázat lekérdezése */ SELECT * FROM ALKALMAZOTT; /* projekció, csak a kiválasztott oszlopok */ SELECT OSZT_AZON, NEV, FONOK FROM ALKALMAZOTT; /* kifejezések az oszlopokban */ /* éves fizetés */ SELECT NEV, FIZETES * 12 AS EVES_FIZETES FROM ALKALMAZOTT; /* szöveges oszlopok összevonása */ SELECT ALK_AZON||'-'||NEV, 'OSZTALY', OSZT_AZON FROM ALKALMAZOTT; /* NULL értékek a kifejezésben */ SELECT NEV, FIZETES * 12 + JUTALOM AS EVES_JOVEDELEM FROM ALKALMAZOTT; SELECT NEV, FIZETES * 12 + COALESCE(JUTALOM, 0) FROM ALKALMAZOTT; /* duplikált sorok elhagyása */ SELECT OSZT_AZON FROM ALKALMAZOTT; SELECT DISTINCT OSZT_AZON FROM ALKALMAZOTT; SELECT DISTINCT OSZT_AZON, BEOSZTAS FROM ALKALMAZOTT; /* eredmény sorok rendezése */ SELECT NEV, BEOSZTAS, FIZETES * 12 AS EVES_FIZETES, OSZT_AZON FROM ALKALMAZOTT ORDER BY NEV; /* csökkenő sorrend */ SELECT NEV, BEOSZTAS, BELEPES FROM ALKALMAZOTT ORDER BY BELEPES DESC; /* több rendezési szempont */ SELECT OSZT_AZON, BEOSZTAS, NEV FROM ALKALMAZOTT ORDER BY OSZT_AZON, FIZETES DESC; /* a rendezési szempont megadása az oszlop sorszámával */ SELECT NEV, FIZETES FROM ALKALMAZOTT ORDER BY 2; /* válogatás a sorok közül */ select * from alkalmazott where nev = 'SKÓT'; select * from alkalmazott where fizetes < 1200; select * from alkalmazott where belepes > '04-JUN-81'; select * from alkalmazott where jutalom >= 500; select * from alkalmazott where fizetes between 1000 and 2000; select * from alkalmazott where fonok in (7902, 7566, 7788); select * from alkalmazott where nev like 'S%'; select * from alkalmazott where nev like '____'; select * from alkalmazott where fonok is null; select * from alkalmazott where fonok is not null; /* összetett feltételek */ select alk_azon, nev, beosztas, fizetes from alkalmazott where fizetes between 1000 and 2000 and beosztas = 'ELŐADÓ'; select alk_azon, nev, beosztas, fizetes from alkalmazott where fizetes between 1000 and 2000 or beosztas = 'ELŐADÓ'; /* osztályok kódjai és nevei rendezve */ select oszt_azon, nev from osztaly order by oszt_azon; /* különbözô beosztások */ select distinct beosztas from alkalmazott; /* 10-es és a 20-as osztályon dolgozók név szerint rendezve */ select * from alkalmazott where oszt_azon in (10,20) order by nev; /* 20-as osztályon dolgozó elôadók neve és beosztása */ select nev, beosztas from alkalmazott where oszt_azon = 20; /* "ES"-t vagy "IR"-t tartalmazó nevek */ select nev from alkalmazott where nev like '%ES%' or nev like '%IR%'; /* név, beosztás, fizetés azokra akiknek van fönökük */ select nev, beosztas, fizetes from alkalmazott where fonok is not null; /* az 1981-ben belépett alkalmazottak */ select nev, oszt_azon, belepes from alkalmazott where text(belepes) like '%1981%'; select nev, oszt_azon, belepes from alkalmazott where belepes between '01-JAN-81' and '31-DEC-81'; /* összevont oszlopok */ select nev||' '||beosztas||' beosztásban dolgozik '||datetime_text(belepes)|| ' óta' from alkalmazott; /* karakteres függvények */ /* nagybetűssé alakítás */ select nev, beosztas from alkalmazott where beosztas = upper ('MANAGER'); /* kisbetűssé alakítás */ select distinct lower(beosztas) from alkalmazott; /* szavak kezdő betűi nagy betűvé */ select initcap(nev) from alkalmazott; /* feltöltés jobbról vagy balról */ select rpad(nev, 10, '_'), lpad(beosztas, 10), lpad (oszt_azon, 7, '.') from alkalmazott; /* karakterek eltávolítása jobb vagy bal szélről */ select rtrim(beosztas, 'KR'), ltrim(nev, 'SM') from alkalmazott; /* sztring poziciója az oszlopban */ select nev, strpos(nev, 'A') from alkalmazott; /* sztring hossza */ select nev, char_length(nev) from alkalmazott; /* karakterek cseréje, ekezetek nélküli kiiratás */ select translate(nev, 'ÁÉÓÖŐÚÜŰ', 'AEOOOUUU') from alkalmazott; /* numerikus függvények */ /* kerekítés */ select fizetes/30, round(fizetes/30), round(fizetes/30,2), round(fizetes/30,3) from alkalmazott where oszt_azon = 10; /* csonkítás */ select fizetes/7, trunc(fizetes/7), trunc(fizetes/7,2), trunc(fizetes/7,3) from alkalmazott where oszt_azon = 10; /* fizetes 15%-al növelt értéke */ select nev, round(fizetes*1.15) as "növelt fizetés" from alkalmazott; /* dátum függvények */ /* aktuális dátum lekérdezése */ select now(); /* aritmetikai műveletek dátumokkal */ select belepes, belepes+7 as "egy het mulva", date(now())-belepes as "eltelt napok" from alkalmazott where oszt_azon = 10; select date_trunc('month',date(now())); /* konverziós függvények */ /* sztring dátummá alakítás */ select to_date('15.11.97', 'DD.MM.YY'); /* csoport függvények */ /* teljes táblára */ select min(fizetes), max(fizetes), sum(fizetes), avg(fizetes), count(fizetes) from alkalmazott; /* csoportokra */ select oszt_azon, min(fizetes), max(fizetes), sum(fizetes), round(avg(fizetes),0), count(fizetes) from alkalmazott group by oszt_azon; /* válogatás a csoportok közül */ select oszt_azon, avg(fizetes) from alkalmazott group by oszt_azon having count(*) > 3; /* válogatás a sorok és csoportok közül is */ select oszt_azon, avg(fizetes) from alkalmazott where beosztas != 'ELÔADÓ' group by oszt_azon having min(fizetes) > 1000; /* beosztásonként a legkisebb fizetés */ select beosztas, min(fizetes) as min, max(fizetes) as max from alkalmazott group by beosztas; /* managerek száma */ select count(*) from alkalmazott where beosztas = 'MANAGER'; /* lekérdezés több táblából */ /* Descartes szorzat, összekapcsolás minden kombinációban */ select osztaly.nev, alkalmazott.nev from osztaly, alkalmazott; /* egyen összekapcsolás */ select alkalmazott.nev, beosztas, osztaly.nev from alkalmazott, osztaly where alkalmazott.oszt_azon = osztaly.oszt_azon; select * from alkalmazott inner join osztaly on alkalmazott.oszt_azon=osztaly.oszt_azon; /* nem egyen összekapcsolás */ select a.nev, a.fizetes, f.f_oszt from alkalmazott a, fiz_oszt f where a.fizetes between f.min and f.max; /* Budapesten dolgozók névsora */ select a.nev from alkalmazott a, osztaly o where a.oszt_azon = o.oszt_azon and o.varos = 'BUDAPEST'; /* külső összekapcsolás */ select osztaly.oszt_azon, osztaly.nev, alkalmazott.nev from alkalmazott right join osztaly on alkalmazott.oszt_azon = osztaly.oszt_azon; /* tábla összekapcsolása önmagával */ /* főnök beosztott párok */ select a.nev as "főnök", b.nev as "beosztott" from alkalmazott a, alkalmazott b where b.fonok = a. alk_azon; select a.nev as főnök, b.nev as beosztott from alkalmazott a right join alkalmazott b on b.fonok = a.alk_azon; /* alkalmazottak akik a főnökük előtt léptek be */ select a.nev as beosztott, a.belepes, b.nev as "főnök", b.belepes from alkalmazott a, alkalmazott b where a.fonok = b.alk_azon and a.belepes < b.belepes; /* halmaz műveletek */ /* unió osztályok, ahol manager vagy ügynök dolgozik */ select distinct oszt_azon from alkalmazott where beosztas = 'MANAGER' union select distinct oszt_azon from alkalmazott where beosztas = 'ÜGYNÖK'; /* metszet, azok az osztályok amelyeknek van dolgozója */ select distinct oszt_azon from alkalmazott intersect select oszt_azon from osztaly; /* különbség, azok az osztályok, ahol nem dolgozik senki */ select oszt_azon from osztaly except select distinct oszt_azon from alkalmazott; /* egymásba ágyazott lekérdezések */ /* legkisebb fizetésű dolgozó */ select nev, fizetes from alkalmazott where fizetes = (select min(fizetes) from alkalmazott); /* szabóval azonos munkakörben dolgozók */ select nev, beosztas from alkalmazott where beosztas = (select beosztas from alkalmazott where nev = 'SZABÓ'); /* legkisebb fizetésű dolgozó osztályonként */ select nev, fizetes, oszt_azon from alkalmazott where (fizetes, oszt_azon) in (select min(fizetes), oszt_azon from alkalmazott group by oszt_azon); /* 30-as minimum fizetésénél többet keresők */ select nev, beosztas, fizetes from alkalmazott where fizetes > any (select fizetes from alkalmazott where oszt_azon = 30); /* a 30-as osztályon legtöbbet keresőnél magasabb fizetésűek */ select fizetes, beosztas, nev from alkalmazott where fizetes > all (select fizetes from alkalmazott where oszt_azon = 30); /* az átlagfizetésnél magasabb átlagú beosztások */ select beosztas, avg(fizetes) from alkalmazott group by beosztas having avg(fizetes) > (select avg(fizetes) from alkalmazott); /* beágyazott lekérdezés a FROM klauzulában */ /* legmagasabb osztály átlag */ SELECT max(atlag) FROM ( SELECT AVG(FIZETES) As ATLAG FROM OSZTALY, ALKALMAZOTT WHERE OSZTALY.OSZT_AZON = ALKALMAZOTT.OSZT_AZON GROUP BY OSZTALY.NEV) AS oszt_atlag; /* korreláció */ /* akiknek nagyobb a fizetésük, mint az osztály átlag */ select oszt_azon, nev, fizetes from alkalmazott a where fizetes > (select avg(fizetes) from alkalmazott where oszt_azon = a.oszt_azon) order by oszt_azon; /* akiknek legalább egy beosztottja van */ select nev, beosztas, oszt_azon from alkalmazott a where exists (select * from alkalmazott where fonok = a.alk_azon); /* osztályonként az utolsónak belépett dolgozó */ select oszt_azon, nev, belepes from alkalmazott where (oszt_azon, belepes) in (select oszt_azon, max(belepes) from alkalmazott group by oszt_azon) order by belepes desc; /* osztály amelyiknek nincs dolgozója */ select nev from osztaly o where not exists (select * from alkalmazott where oszt_azon = o.oszt_azon); /* az az osztály, ahol legmagasabb az éves átlagjövedelem */ select oszt_azon, avg(fizetes * 12) from alkalmazott a group by oszt_azon having avg(fizetes * 12) > all (select avg(fizetes * 12) from alkalmazott where a.oszt_azon <> oszt_azon group by oszt_azon);