/* 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);