Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --1. Podać nazwiska, nazwy departamentów pracowników, których departamenty nie
- --mieszczą się w Chicago. Dodać alias dla pola nazwisko i dwuczłonowy dla nazwy
- --departamentu.
- SELECT EMP.ename Nazwisko, Dept.DNAME Departament FROM EMP, DEPT WHERE (emp.deptno = dept.deptno) AND emp.deptno!=30;
- --2. Podać nazwiska pracowników, których zarobki są większe niż przynajmniej
- --jednego pracownika z departamentu 10.
- SELECT ename FROM EMP WHERE sal>(SELECT MIN(sal) FROM emp WHERE deptno=10);
- --3. Podać nazwiska pracowników, których zarobki powiększone o 25% przekraczają
- --3000. Wynik zaokrąglić do najbliższej liczby całkowitej w górę oraz podać w
- --drugiej kolumnie tylko wartość całkowitą.
- SELECT ename FROM emp WHERE round(sal*1.25)>3000;
- --4. Podać numery, nazwiska, całkowite zarobki pracowników przybliżone z góry i
- --od dołu za pomocą funkcji.
- SELECT empno, ename, FLOOR(sal+NVL(comm,0)), CEIL(sal+NVL(comm,0)) FROM emp;
- --5. Sprawdzić działanie funkcji matematycznych POWER, SQRT, ABS, MOD.
- SELECT POWER(6,2), SQRT(4), ABS(-234.53), MOD(2.33,2) FROM dual;
- --6. Wyświetlić wynagrodzenia pracowników podniesione do kwadratu.
- SELECT ename Nazwisko, POWER(sal,2) "KWADRAT PŁACY" FROM EMP;
- --7. Jaka data będzie za 100 dni.
- SELECT SYSDATE + 100 FROM DUAL;
- ----8. Ile miesięcy pracują poszczególni pracownicy.
- SELECT ROUND(MONTHS_BETWEEN(SYSDATE, HIREDATE),1) AS "MIESIĄCE PRZEPRACOWANE" FROM EMP WHERE HIREDATE IS NOT NULL;
- ----9. Jaką datę będziemy mieli za 10 miesięcy.
- SELECT ADD_MONTHS(SYSDATE, 10) FROM DUAL;
- SELECT ADD_MONTHS(to_date('18-oct-21'),10) FROM dual;
- SELECT * FROM SALGRADE;
- --10. Podać datę ostatniego dnia bieżącego miesiąca.
- SELECT LAST_DAY(SYSDATE) FROM DUAL;
- ----11. Podać odpowiedź, w postaci zdania, który pracownik nie posiada zwierzchnika.
- SELECT 'Pracownik o nazwisku ' || InitCap(ENAME) || ' nie ma zwierchnika' FROM EMP WHERE mgr IS NULL;
- ----12. Pobrać 4 pierwsze rekordy z tabeli z widełkami wynagrodzeń. Sprawdzić
- ----wpływ klauzuli Order by na wynik zapytania.
- SELECT * FROM SALGRADE WHERE ROWNUM<5 ORDER BY GRADE DESC;
- ----13. Dla każdego pracownika podać długość jego nazwiska.
- SELECT ename, LENGTH(ename) FROM EMP;
- ----14. Podać nazwiska pracowników zapisane z dużej litery a stanowiska zapisane
- ----małymi literami.
- SELECT UPPER(ename), LOWER(job) FROM EMP;
- ----15. Zamienić wszystkie literki E w imionach pracowników na a przy pomocy
- ----funkcji translate.
- SELECT TRANSLATE(ENAME,'E','a') FROM EMP;
- ----16. Uzupełnić z prawej strony wynik kolumny dname znakami x do 15 znaków w
- ----polu.
- SELECT RPAD(dname,15,'x') FROM DEPT;
- ----17. Dla każdego departamentu podać lokalizację z pominiętym ostatnim znakiem.
- SELECT SUBSTR(LOC,1,LENGTH(LOC)-1) FROM DEPT;
- ----18. Podać trzy sposoby wyszukania pracownika o nazwisku rozpoczynającym się
- ----od liter BL.
- SELECT ENAME FROM EMP WHERE ENAME LIKE 'BL%';
- SELECT ENAME FROM EMP WHERE INSTR(ENAME,'BL')>0;
- SELECT ENAME FROM EMP WHERE SUBSTR(ENAME,1,2) = 'BL';
- 8 listopada
- 11:44
- --1. Podać nazwiska osób, których pensja i stanowisko są takie same jak p. Forda.
- SELECT ENAME FROM EMP WHERE EMPNO = (SELECT EMPNO FROM EMP WHERE initcap(ENAME)='Ford') AND initcap(ENAME) != 'Ford';
- --2. Podać nazwisko, stanowisko, wynagrodzenia osób mających pensję > od p.
- --Millera i < od p. Forda.
- SELECT ENAME, JOB, SAL FROM EMP
- WHERE sal>(SELECT sal FROM EMP WHERE initcap(ENAME)='Miller') AND
- sal<(SELECT sal FROM EMP WHERE initcap(ENAME)='Ford');
- --3. Podać nazwisko, stopień wynagrodzenia osób, których wynagrodzenie jest inne
- --niż wynosi średnie wynagrodzenie osób na stanowisku Clerk.
- SELECT ENAME, GRADE, BONUS, COMM, SAL, (SAL+NVL(BONUS,0)+NVL(COMM,0)) FROM EMP, SALGRADE, BONUS
- WHERE (sal BETWEEN LOSAL AND HISAL) AND
- BONUS.EMPNO = EMP.EMPNO AND
- (SAL+NVL(BONUS,0)+NVL(COMM,0)) != (SELECT AVG(SAL+NVL(BONUS,0)+NVL(COMM,0)) FROM EMP, BONUS WHERE initCap(Job)='Clerk'
- AND BONUS.EMPNO = EMP.EMPNO);
- --4. Podać nazwisko i wynagrodzenie zwierzchnika p. Adams.
- SELECT ENAME, SAL FROM EMP
- WHERE EMPNO = (SELECT MGR FROM EMP WHERE initcap(ENAME)='Adams');
- --5. Podać nazwę projektu realizowanego więcej razy niż projekt o numerze 1001.
- SELECT PRONAME, COUNT(IP.IMPL) FROM PROJECT P, IMPLPROJECT IP
- WHERE P.PRONO = IP.PRONO
- GROUP BY PRONAME
- HAVING COUNT(IP.IMPL)>=(SELECT COUNT(IP.IMPL) FROM PROJECT P, IMPLPROJECT IP WHERE P.PRONO = IP.PRONO AND P.PRONO = 1001);
- --6. Podać nazwiska pracowników, którzy brali więcej razy udział w realizacji
- --projektów niż którykolwiek pracownik z departamentu 30 .
- SELECT ENAME, COUNT(IMPLEMP.EMPNO) FROM EMP, IMPLEMP
- WHERE EMP.empno = IMPLEMP.empno
- GROUP BY EMP.EMPNO, ENAME
- HAVING COUNT(1)>(SELECT MIN(COUNT(1)) FROM EMP, IMPLEMP
- WHERE EMP.empno = IMPLEMP.empno AND EMP.DEPTNO = 30
- GROUP BY EMP.EMPNO);
- --7. Podać nazwisko, stanowisko, wynagrodzenie osób zarabiających więcej niż
- --wynoszą średnie zarobki na ich stanowisku.
- --8. Dla każdego departamentu podać pracownika najwięcej razy realizującego
- --projekty.
- --9. Podać nazwy stanowisk na których pracuje nie mniej niż 2 pracowników i nie
- --więcej niż 4.
- --10. Podać nazwy projektów, których wartość realizacji była większa w 2008r niż
- --wynosi maksymalna realizacje projektów w roku 2009.
- SELECT PRONAME, SUM(BUDGET) FROM PROJECT, IMPLPROJECT
- WHERE PROJECT.PRONO = IMPLPROJECT.PRONO AND EXTRACT(YEAR FROM START_DATE)='2008' AND EXTRACT(YEAR FROM END_DATE)='2008'
- GROUP BY PRONAME HAVING SUM(BUDGET)> (SELECT MAX(SUM(BUDGET)) FROM PROJECT, IMPLPROJECT
- WHERE PROJECT.PRONO = IMPLPROJECT.PRONO AND EXTRACT(YEAR FROM START_DATE)='2009' AND EXTRACT(YEAR FROM END_DATE)='2009'
- GROUP BY PROJECT.PRONO);
- --11. Podać nazwy projektów, dla których różnica dat rozpoczęcia i zakończenia
- --projektu była większa lub równa 3 miesiące.
- SELECT PRONAME FROM PROJECT, IMPLPROJECT
- WHERE PROJECT.PRONO = IMPLPROJECt.PRONO AND MONTHS_BETWEEN(END_DATE, START_DATE)>=3;
- --12. Podać nazwy departamentów z których pracownicy na stanowisku MANAGER
- --realizowali najmniej projektów spośród pracowników na stanowisku MANAGER.
- SELECT DNAME, ENAME, COUNT(IMPLEMP.empno) FROM EMP, IMPLEMP, DEPT
- WHERE EMP.EMPNO = IMPLEMP.EMPNO AND DEPT.DEPTNO=EMP.DEPTNO AND initcap(JOB) = 'Manager'
- GROUP BY DNAME, ENAME;
- 15 listopada
- 11:48
- --1. Których pracowników departamenty mieszczą się w Dallas.
- SELECT ename FROM emp, dept WHERE emp.deptno = dept.deptno AND emp.deptno = (SELECT deptno FROM dept WHERE LOWER(loc)='dallas');
- --2. Podać nazwiska pracowników zatrudnionych w departamencie 10 na
- --stanowiskach występujących w departamencie 30.
- SELECT ename FROM emp, dept WHERE emp.deptno = dept.deptno AND emp.deptno = 10 AND emp.job IN (SELECT job FROM emp WHERE deptno = 30);
- --3. Którzy pracownicy działu 20 są zatrudnieni na stanowiskach nie występujących
- --w dziale 10.
- SELECT ename FROM emp, dept WHERE emp.deptno = dept.deptno AND emp.deptno = 20 AND emp.job NOT IN (SELECT job FROM emp WHERE deptno = 10);
- --4. Kto zarabia więcej niż którakolwiek osoba na stanowisku Manager.
- SELECT ename, sal FROM emp WHERE sal > (SELECT MIN(sal) FROM emp WHERE LOWER(job) = 'manager');
- --5. Podać nazwiska pracowników z największym wynagrodzeniem w firmie.
- SELECT ename FROM emp WHERE sal=(SELECT MAX(sal) FROM emp);
- --6. Którzy pracownicy z działu 30 brali więcej razy udział w realizacji projektów od
- --pracowników z działu 20.
- SELECT ename, COUNT(*) FROM emp, implemp WHERE emp.deptno = 30 AND implemp.empno = emp.empno
- GROUP BY ename
- HAVING COUNT(*)>(SELECT MAX(COUNT(*)) FROM emp, dept, implemp WHERE emp.deptno = dept.deptno AND implemp.empno = emp.empno AND emp.deptno = 20 GROUP BY ename);
- --7. Podać nazwiska pracowników mających podwładnych tylko z lokalizacji
- --departamentu w Chicago.
- SELECT ename FROM EMP E1
- WHERE EXISTS (SELECT 1 FROM EMP E2, DEPT D2 WHERE E2.deptno=D2.deptno AND LOC = 'CHICAGO' AND E1.EMPNO = E2.MGR)
- AND NOT EXISTS (SELECT 1 FROM EMP E2, DEPT D2 WHERE E2.deptno=D2.deptno AND LOC = 'CHICAGO' AND E1.EMPNO = E2.MGR);
- --8. Podać nazwy departamentów z których nikt nie brał udziału w realizacji
- --projektu.
- SELECT dname FROM dept WHERE dept.deptno NOT IN (SELECT dept.deptno FROM emp, dept, implemp WHERE emp.empno=implemp.empno AND emp.deptno = dept.deptno GROUP BY dept.deptno HAVING COUNT(*)!=0);
- --9. Podać nazwiska i stanowiska osób, zatrudnionych w departamentach w których
- --różnica między maksymalnymi a minimalnymi zarobkami jest większa lub równa
- --średnim zarobkom w departamencie.
- SELECT ename, job FROM emp WHERE deptno IN (SELECT D1.deptno FROM emp E1, dept D1 WHERE emp.deptno = D1.deptno AND (SELECT (MAX(sal)-MIN(sal)) FROM emp E2 WHERE E1.deptno = E2.deptno)>=(SELECT AVG(sal) FROM emp E2 WHERE E1.deptno = E2.deptno));
- --10. Podać nazwisko, stanowisko osób zatrudnionych w departamentach, dla
- --których liczba realizowanych projektów jest większa od liczby zrealizowanych
- --projektów w którymkolwiek z departamentów podanych jako parametr
- --(przynajmniej dwóch).
- SELECT ENAME, JOB FROM EMP WHERE DEPTNO IN (SELECT dept.DEPTNO FROM emp, dept, implemp
- WHERE emp.empno=implemp.empno AND emp.deptno = dept.deptno GROUP BY dept.deptno
- HAVING COUNT(*)>(SELECT dept.deptno, COUNT(*) FROM emp , dept , implemp WHERE emp.empno=implemp.empno AND emp.deptno = dept.deptno AND dept.deptno = &L GROUP BY dept.deptno));
- --11. Podać parami nazwiska osób, dla których różnica stopnia wynagrodzenia
- --wynosi 2 lub 3.
- --12. Podać nazwy projektów realizowanych w 2010 roku, przy realizacji których
- --brali udział pracownicy z departamentu o nazwie RESEARCH.
- --13. Podać nazwy projektów realizowanych przez największą liczbę pracowników.
- --14. Dla każdego departamentu podać nazwisko pracownika biorącego udział w
- --realizacji największej liczby projektów.
- 22 listopada
- 11:45
- --1. Dla każdego projektu podać liczbę jego realizacji.
- SELECT PRONAME, COUNT(*) FROM PROJECT, IMPLPROJECT WHERE project.prono = implproject.prono (+) GROUP BY project.prono,proname;
- SELECT PRONAME, (SELECT COUNT(*) FROM IMPLPROJECT IP WHERE P.PRONO=IP.PRONO) LR FROM PROJECT P;
- --2. Podać listę pracowników oraz liczbę realizowanych przez nich projektów.
- SELECT ename, COUNT(*) FROM implemp, emp WHERE emp.empno = implemp.empno GROUP BY ename;
- --3. Podać nazwy departamentów z których bierze udział w projektach najwięcej
- --pracowników.
- SELECT dname, COUNT(*) FROM dept,emp,implemp WHERE dept.deptno = emp.deptno AND emp.empno = implemp.empno GROUP BY dname
- ORDER BY COUNT(*) DESC;
- --4. Podać w tym samym wierszu nazwę projektu z największym oraz najmniejszym
- --budżetem.
- SELECT DISTINCT (SELECT proname || ' ' || BUDGET FROM PROJECT WHERE budget = (SELECT MAX(BUDGET) FROM PROJECT)) maxim, (SELECT proname || ' ' || BUDGET FROM PROJECT WHERE budget = (SELECT MIN(BUDGET) FROM PROJECT)) minim FROM dual;
- --5. Dla każdego departamentu podać jaki procent stanowią pracownicy oraz ich
- --zarobki, biorąc pod uwagę wszystkie departamenty.
- SELECT (SELECT NVL(dname,'Brak') FROM dept c WHERE c.deptno = a.deptno),
- 100*Round(a.l_prac/b.calk_licz,2)||'%',
- 100*Round(a.sal_sum/b.calk_sum,2)
- FROM (SELECT deptno, COUNT(*) AS l_prac, SUM(sal) AS sal_sum
- FROM emp GROUP BY deptno) a,
- (SELECT COUNT(*) AS calk_licz, SUM(sal) AS calk_sum FROM emp) b;
- --6. Podać nazwiska trzech pracowników najczęściej realizujących projekty.
- SELECT (ename, COUNT(*) FROM implemp, emp WHERE emp.empno = implemp.empno GROUP BY ename ORDER BY COUNT(*) DESC )
- --7. Podać dwa najrzadziej realizowane projekty.
- --8. Podać wartość realizowanych projektów w 2008 roku.
- --9. Podać wartości realizowanych projektów w poszczególnych latach realizacji.
- --10. Podać nazwę projektu realizowanego w najkrótszym czasie.
- --11. Podać nazwy projektów nie realizowanych.
- --12. W jednym wierszu podać sumaryczne zarobki pracowników na poszczególnych
- --stanowiskach oraz liczbę pracowników nie posiadających bonusów uwzględniając
- --stanowisko i departament.
- 29 listopada
- 11:45
- --1. Podać listę pracowników nie realizujących projekty ze stopniem zaszeregowania
- --powyżej 3.
- SELECT ENAME, IMPL FROM EMP, IMPLEMP, SALGRADE WHERE EMP.EMPNO = IMPLEMP.EMPNO(+) AND IMPL IS NULL AND sal BETWEEN LOSAL AND HISAL AND GRADE>3;
- --2. Podać nazwy projektów, które były ponownie realizowane po upływie czasu
- --krótszym niż dwa miesiące.
- SELECT P1.PRONAME FROM PROJECT P1, IMPLPROJECT IP1, (SELECT PROJECT.PRONO, PRONAME, START_DATE, END_DATE FROM PROJECT, IMPLPROJECT WHERE PROJECT.PRONO = IMPLPROJECT.PRONO) P2
- WHERE P1.PRONO = IP1.PRONO AND P1.PRONAME = P2.PRONAME AND ip1.end_date > p2.start_date AND MONTHS_BETWEEN(ip1.end_date,p2.start_date)<2 AND IP1.END_DATE != P2.END_DATE AND ;
- --3. Podać nazwiska pracowników, realizujących projekty w pierwszym kwartale
- --2009 roku. Uwzględnić tylko te projekty przy realizacji których uczestniczyło co
- --najmniej dwóch pracowników.
- SELECT PRONAME, START_DATE, END_DATE FROM PROJECT, IMPLPROJECT WHERE PROJECT.PRONO = IMPLPROJECT.PRONO AND (END_DATE BETWEEN TO_DATE ('2009/01/01', 'yyyy/mm/dd') AND TO_DATE ('2009/03/31', 'yyyy/mm/dd'));
- OR (END_DATE BETWEEN TO_DATE ('2009/04/01', 'yyyy/mm/dd') AND TO_DATE ('2009/06/30', 'yyyy/mm/dd'));
- --4. Dla każdej nazwy departamentu podać jego budżet. W obliczeniach uwzględnić
- --kwotę na płace i premie pracowników oraz wynagrodzenie z tytułu uczestnictwa w
- --projekcie. Wynagrodzenie pracownika uczestniczącego w projekcie oblicza się
- --jako 5% budżetu projektu pomnożone przez liczbę dni realizacji i podzielone prze
- --liczbę realizujących pracowników.
- SELECT DNAME, SUM(NVL(SAL,0)), SUM(NVL(COMM,0)), SUM(NVL(BONUS,0)) FROM DEPT, EMP,
- SELECT (EMPNO,
- WHERE EMP.DEPTNO(+) = DEPT.DEPTNO AND BONUS.EMPNO(+) = EMP.EMPNO
- GROUP BY DNAME;
- --5. Podać listę pracowników, datę zatrudnienia i wstawioną gwiazdką w wierszu
- --pracownika najwcześniej zatrudnionego.
- SELECT ENAME, HIREDATE, (SELECT '*' FROM EMP E2 WHERE E1.EMPNO = E2.EMPNO AND E2.HIREDATE = (SELECT MIN(E4.HIREDATE) FROM EMP E4)) FROM EMP E1;
- --6 Używając odwołania do kolumny empno w kolumnie mgr i złączenie zewnętrzne
- --w połączeniu z funkcją NVL pobrać informacje o pracownikach po lewej stronie
- --pionowej kreski, a informacje o szefie po prawej.
- --7. Na podstawie zadania 6 utworzyć podzapytanie 3-poziomowe.
- --8. Na podstawie zadania 6 utworzyć podzapytanie 4-poziomowe.
- --9. Używając CONNECT BY PRIOR i START WITH wybrać:
- -- a) pracownika o numerze 7902 i jego zwierzchników.
- -- b) pracownika o numerze 7839 i jego podwładnych.
- --10. Korzystając z pseudokolumny LEVEL wskazać poziom węzła w hierarchii,
- --wybierając:
- -- a) pracownika o numerze 7521 i jego zwierzchników.
- -- b) pracownika o numerze 7499 i jego podwładnych.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement