- Zobraz meno a poziciu z tabulky EMP.
SELECT e.ename, e.job FROM emp e;
mena(X,Y):-emp(_,X,Y,_,_,_,_,_).
- Zobraz vsetko o zamestnancoch s platom viac ako 2000.
SELECT * FROM emp WHERE sal > 2000;
velky_plat(X):-emp(_,X,_,_,_,S,_,_), S>2000.
- Zobraz meno a plat zamestnancov z oddelenia s cislom 10.
riesenie:
SELECT ename, sal FROM emp WHERE deptno = 10;
odd10(X,S):-emp(_,X,_,_,_,S,_,10).
- Zobraz vsetkych uradnikov (CLERK) z oddelenia s cislom 20.
SELECT * FROM emp WHERE job = 'CLERK' and deptno = 20;
uradnici20(X):-emp(_,X,clerk,_,_,_,_,20).
- Zobraz vsetkych uradnikov a manazerov.
urad_man(X):-emp(_,X,clerk,_,_,_,_,_).
urad_man(X):-emp(_,X,manager,_,_,_,_,_).
- Zobraz vsetky oddelenia konciace na S
SELECT * FROM dept WHERE dname LIKE '%S';
??
- Zobraz vsetkych zamestnancov aj s ich nazvom oddelenia.
SELECT e.ename, d.dname FROM emp e, dept d WHERE e.deptno = d.deptno;
zam_odd(X,D):-emp(_,X,_,_,_,_,_,DN), dept(DN,D,_).
- Zobraz vsetkych zamestnancov z DALLASu.
riesenie:
SELECT ename FROM emp e, dept d WHERE e.deptno = d.deptno AND d.loc = 'DALLAS';
zam_dallas(X):-emp(_,X,_,_,_,_,_,DN), dept(DN,_,dallas).
- Zobraz vsetkych uradnikov a analytikov z oddelenia RESEARCH.
riesenie:
SELECT ename FROM emp e, dept d WHERE e.deptno = d.deptno AND d.dname = 'RESEARCH' AND (e.job = 'CLERK' OR e.job = 'ANALYST');
SELECT ename FROM emp e, dept d WHERE e.deptno = d.deptno AND d.dname = 'RESEARCH' AND e.job IN ('CLERK', 'ANALYST');
urad_research(X):-emp(_,X,clerk,_,_,_,_,DN), dept(DN,research,_).
urad_research(X):-emp(_,X,analyst,_,_,_,_,DN), dept(DN,research,_).
- Zobraz vsetky oddelenia so zamestnancom s platom menej ako 1000.
riesenie:
SELECT dname FROM emp e, dept d WHERE e.deptno = d.deptno AND e.sal < 1000;
lacne_odd(D):-emp(_,_,_,_,_,S,_,DN), dept(DN,D,_),S<1000.
- Zobraz vsetkych zamestnancov ktori nepracuju v CHICAGOu.
SELECT e.ename FROM emp e, dept d WHERE e.deptno = d.deptno AND d.loc != 'CHICAGO';
zam_odd(X):-emp(_,X,_,_,_,_,_,DN), \+dept(DN,_,chicago).
- Zobraz vsetky oddelenia, ktore maju VSETKYCH zamestnancov s platom viac ako 1000.
SELECT dname FROM dept d WHERE NOT EXISTS (SELECT * FROM emp e WHERE e.sal < 1000 AND e.deptno = d.deptno)
drahe_odd(D):-dept(_,D,_),\+lacne_odd(D).
- Zobrazit vsetky povolania, ktorych platy sa pohybuju IBA v najvyssej platovej skupine (tj.5).
- Vypiste ku kazdemu zamestnancovi (,ktory ma manazera,) jeho manazera.
- Vypiste vsetky zamestnania, ktorych predstavitelia sefuju len zamestnancom s platom viac ako 1400.
- (Bonus)
Najst hodnotu maximalneho platu (bez pouzitia agregacnych funkcii!!)