Advertisement
w4nkbot

Untitled

Dec 3rd, 2021
2,859
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 14.69 KB | None | 0 0
  1. --1. Podać nazwiska, nazwy departamentów pracowników, których departamenty nie
  2. --mieszczą się w Chicago. Dodać alias dla pola nazwisko i dwuczłonowy dla nazwy
  3. --departamentu.
  4. SELECT EMP.ename Nazwisko, Dept.DNAME Departament FROM EMP, DEPT WHERE (emp.deptno = dept.deptno) AND emp.deptno!=30;
  5. --2. Podać nazwiska pracowników, których zarobki są większe niż przynajmniej
  6. --jednego pracownika z departamentu 10.
  7. SELECT ename FROM EMP WHERE sal>(SELECT MIN(sal) FROM emp WHERE deptno=10);
  8. --3. Podać nazwiska pracowników, których zarobki powiększone o 25% przekraczają
  9. --3000. Wynik zaokrąglić do najbliższej liczby całkowitej w górę oraz podać w
  10. --drugiej kolumnie tylko wartość całkowitą.
  11. SELECT ename FROM emp WHERE round(sal*1.25)>3000;
  12. --4. Podać numery, nazwiska, całkowite zarobki pracowników przybliżone z góry i
  13. --od dołu za pomocą funkcji.
  14. SELECT empno, ename, FLOOR(sal+NVL(comm,0)), CEIL(sal+NVL(comm,0)) FROM emp;
  15. --5. Sprawdzić działanie funkcji matematycznych POWER, SQRT, ABS, MOD.
  16. SELECT POWER(6,2), SQRT(4), ABS(-234.53), MOD(2.33,2) FROM dual;
  17. --6. Wyświetlić wynagrodzenia pracowników podniesione do kwadratu.
  18. SELECT ename Nazwisko, POWER(sal,2) "KWADRAT PŁACY" FROM EMP;
  19. --7. Jaka data będzie za 100 dni.
  20. SELECT SYSDATE + 100 FROM DUAL;
  21. ----8. Ile miesięcy pracują poszczególni pracownicy.
  22. SELECT ROUND(MONTHS_BETWEEN(SYSDATE, HIREDATE),1) AS "MIESIĄCE PRZEPRACOWANE" FROM EMP WHERE HIREDATE IS NOT NULL;
  23. ----9. Jaką datę będziemy mieli za 10 miesięcy.
  24. SELECT ADD_MONTHS(SYSDATE, 10) FROM DUAL;
  25. SELECT ADD_MONTHS(to_date('18-oct-21'),10) FROM dual;
  26. SELECT * FROM SALGRADE;
  27. --10. Podać datę ostatniego dnia bieżącego miesiąca.
  28. SELECT LAST_DAY(SYSDATE) FROM DUAL;
  29. ----11. Podać odpowiedź, w postaci zdania, który pracownik nie posiada zwierzchnika.
  30. SELECT 'Pracownik o nazwisku ' || InitCap(ENAME) || ' nie ma zwierchnika' FROM EMP WHERE mgr IS NULL;
  31. ----12. Pobrać 4 pierwsze rekordy z tabeli z widełkami wynagrodzeń. Sprawdzić
  32. ----wpływ klauzuli Order by na wynik zapytania.
  33. SELECT * FROM SALGRADE WHERE ROWNUM<5 ORDER BY GRADE DESC;
  34. ----13. Dla każdego pracownika podać długość jego nazwiska.
  35. SELECT ename, LENGTH(ename) FROM EMP;
  36. ----14. Podać nazwiska pracowników zapisane z dużej litery a stanowiska zapisane
  37. ----małymi literami.
  38. SELECT UPPER(ename), LOWER(job) FROM EMP;
  39. ----15. Zamienić wszystkie literki E w imionach pracowników na a przy pomocy
  40. ----funkcji translate.
  41. SELECT TRANSLATE(ENAME,'E','a') FROM EMP;
  42. ----16. Uzupełnić z prawej strony wynik kolumny dname znakami x do 15 znaków w
  43. ----polu.
  44. SELECT RPAD(dname,15,'x') FROM DEPT;
  45. ----17. Dla każdego departamentu podać lokalizację z pominiętym ostatnim znakiem.
  46. SELECT SUBSTR(LOC,1,LENGTH(LOC)-1) FROM DEPT;
  47. ----18. Podać trzy sposoby wyszukania pracownika o nazwisku rozpoczynającym się
  48. ----od liter BL.
  49. SELECT ENAME FROM EMP WHERE ENAME LIKE 'BL%';
  50. SELECT ENAME FROM EMP WHERE INSTR(ENAME,'BL')>0;
  51. SELECT ENAME FROM EMP WHERE SUBSTR(ENAME,1,2) = 'BL';
  52.  
  53. 8 listopada
  54. 11:44
  55. --1. Podać nazwiska osób, których pensja i stanowisko są takie same jak p. Forda.
  56. SELECT ENAME FROM EMP WHERE EMPNO = (SELECT EMPNO FROM EMP WHERE initcap(ENAME)='Ford') AND initcap(ENAME) != 'Ford';
  57. --2. Podać nazwisko, stanowisko, wynagrodzenia osób mających pensję > od p.
  58. --Millera i < od p. Forda.
  59. SELECT ENAME, JOB, SAL FROM EMP
  60. WHERE sal>(SELECT sal FROM EMP WHERE initcap(ENAME)='Miller') AND
  61. sal<(SELECT sal FROM EMP WHERE initcap(ENAME)='Ford');
  62. --3. Podać nazwisko, stopień wynagrodzenia osób, których wynagrodzenie jest inne
  63. --niż wynosi średnie wynagrodzenie osób na stanowisku Clerk.
  64. SELECT ENAME, GRADE, BONUS, COMM, SAL, (SAL+NVL(BONUS,0)+NVL(COMM,0)) FROM EMP, SALGRADE, BONUS
  65. WHERE (sal BETWEEN LOSAL AND HISAL) AND
  66. BONUS.EMPNO = EMP.EMPNO AND
  67. (SAL+NVL(BONUS,0)+NVL(COMM,0)) != (SELECT AVG(SAL+NVL(BONUS,0)+NVL(COMM,0)) FROM EMP, BONUS WHERE initCap(Job)='Clerk'
  68. AND BONUS.EMPNO = EMP.EMPNO);
  69. --4. Podać nazwisko i wynagrodzenie zwierzchnika p. Adams.
  70. SELECT ENAME, SAL FROM EMP
  71. WHERE EMPNO = (SELECT MGR FROM EMP WHERE initcap(ENAME)='Adams');
  72. --5. Podać nazwę projektu realizowanego więcej razy niż projekt o numerze 1001.
  73. SELECT PRONAME, COUNT(IP.IMPL) FROM PROJECT P, IMPLPROJECT IP
  74. WHERE P.PRONO = IP.PRONO
  75. GROUP BY PRONAME
  76. HAVING COUNT(IP.IMPL)>=(SELECT COUNT(IP.IMPL) FROM PROJECT P, IMPLPROJECT IP WHERE P.PRONO = IP.PRONO AND P.PRONO = 1001);
  77. --6. Podać nazwiska pracowników, którzy brali więcej razy udział w realizacji
  78. --projektów niż którykolwiek pracownik z departamentu 30 .
  79. SELECT ENAME, COUNT(IMPLEMP.EMPNO) FROM EMP, IMPLEMP
  80. WHERE EMP.empno = IMPLEMP.empno
  81. GROUP BY EMP.EMPNO, ENAME
  82. HAVING COUNT(1)>(SELECT MIN(COUNT(1)) FROM EMP, IMPLEMP
  83. WHERE EMP.empno = IMPLEMP.empno AND EMP.DEPTNO = 30
  84. GROUP BY EMP.EMPNO);
  85. --7. Podać nazwisko, stanowisko, wynagrodzenie osób zarabiających więcej niż
  86. --wynoszą średnie zarobki na ich stanowisku.
  87.  
  88. --8. Dla każdego departamentu podać pracownika najwięcej razy realizującego
  89. --projekty.
  90. --9. Podać nazwy stanowisk na których pracuje nie mniej niż 2 pracowników i nie
  91. --więcej niż 4.
  92. --10. Podać nazwy projektów, których wartość realizacji była większa w 2008r niż
  93. --wynosi maksymalna realizacje projektów w roku 2009.
  94. SELECT PRONAME, SUM(BUDGET) FROM PROJECT, IMPLPROJECT
  95. WHERE PROJECT.PRONO = IMPLPROJECT.PRONO AND EXTRACT(YEAR FROM START_DATE)='2008' AND EXTRACT(YEAR FROM END_DATE)='2008'
  96. GROUP BY PRONAME HAVING SUM(BUDGET)> (SELECT MAX(SUM(BUDGET)) FROM PROJECT, IMPLPROJECT
  97. WHERE PROJECT.PRONO = IMPLPROJECT.PRONO AND EXTRACT(YEAR FROM START_DATE)='2009' AND EXTRACT(YEAR FROM END_DATE)='2009'
  98. GROUP BY PROJECT.PRONO);
  99. --11. Podać nazwy projektów, dla których różnica dat rozpoczęcia i zakończenia
  100. --projektu była większa lub równa 3 miesiące.
  101. SELECT PRONAME FROM PROJECT, IMPLPROJECT
  102. WHERE PROJECT.PRONO = IMPLPROJECt.PRONO AND MONTHS_BETWEEN(END_DATE, START_DATE)>=3;
  103. --12. Podać nazwy departamentów z których pracownicy na stanowisku MANAGER
  104. --realizowali najmniej projektów spośród pracowników na stanowisku MANAGER.
  105. SELECT DNAME, ENAME, COUNT(IMPLEMP.empno) FROM EMP, IMPLEMP, DEPT
  106. WHERE EMP.EMPNO = IMPLEMP.EMPNO AND DEPT.DEPTNO=EMP.DEPTNO AND initcap(JOB) = 'Manager'
  107. GROUP BY DNAME, ENAME;
  108. 15 listopada
  109. 11:48
  110. --1. Których pracowników departamenty mieszczą się w Dallas.
  111. SELECT ename FROM emp, dept WHERE emp.deptno = dept.deptno AND emp.deptno = (SELECT deptno FROM dept WHERE LOWER(loc)='dallas');
  112. --2. Podać nazwiska pracowników zatrudnionych w departamencie 10 na
  113. --stanowiskach występujących w departamencie 30.
  114. 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);
  115. --3. Którzy pracownicy działu 20 są zatrudnieni na stanowiskach nie występujących
  116. --w dziale 10.
  117. 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);
  118. --4. Kto zarabia więcej niż którakolwiek osoba na stanowisku Manager.
  119. SELECT ename, sal FROM emp WHERE sal > (SELECT MIN(sal) FROM emp WHERE LOWER(job) = 'manager');
  120. --5. Podać nazwiska pracowników z największym wynagrodzeniem w firmie.
  121. SELECT ename FROM emp WHERE sal=(SELECT MAX(sal) FROM emp);
  122. --6. Którzy pracownicy z działu 30 brali więcej razy udział w realizacji projektów od
  123. --pracowników z działu 20.
  124. SELECT ename, COUNT(*) FROM emp, implemp WHERE emp.deptno = 30 AND implemp.empno = emp.empno
  125. GROUP BY ename
  126. 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);
  127. --7. Podać nazwiska pracowników mających podwładnych tylko z lokalizacji
  128. --departamentu w Chicago.
  129. SELECT ename FROM EMP E1
  130. WHERE EXISTS (SELECT 1 FROM EMP E2, DEPT D2 WHERE E2.deptno=D2.deptno AND LOC = 'CHICAGO' AND E1.EMPNO = E2.MGR)
  131. AND NOT EXISTS (SELECT 1 FROM EMP E2, DEPT D2 WHERE E2.deptno=D2.deptno AND LOC = 'CHICAGO' AND E1.EMPNO = E2.MGR);
  132. --8. Podać nazwy departamentów z których nikt nie brał udziału w realizacji
  133. --projektu.
  134. 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);
  135. --9. Podać nazwiska i stanowiska osób, zatrudnionych w departamentach w których
  136. --różnica między maksymalnymi a minimalnymi zarobkami jest większa lub równa
  137. --średnim zarobkom w departamencie.
  138. 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));
  139. --10. Podać nazwisko, stanowisko osób zatrudnionych w departamentach, dla
  140. --których liczba realizowanych projektów jest większa od liczby zrealizowanych
  141. --projektów w którymkolwiek z departamentów podanych jako parametr
  142. --(przynajmniej dwóch).
  143. SELECT ENAME, JOB FROM EMP WHERE DEPTNO IN (SELECT dept.DEPTNO FROM emp, dept, implemp
  144. WHERE emp.empno=implemp.empno AND emp.deptno = dept.deptno GROUP BY dept.deptno
  145. 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));
  146. --11. Podać parami nazwiska osób, dla których różnica stopnia wynagrodzenia
  147. --wynosi 2 lub 3.
  148. --12. Podać nazwy projektów realizowanych w 2010 roku, przy realizacji których
  149. --brali udział pracownicy z departamentu o nazwie RESEARCH.
  150. --13. Podać nazwy projektów realizowanych przez największą liczbę pracowników.
  151. --14. Dla każdego departamentu podać nazwisko pracownika biorącego udział w
  152. --realizacji największej liczby projektów.
  153.  
  154. 22 listopada
  155. 11:45
  156. --1. Dla każdego projektu podać liczbę jego realizacji.
  157. SELECT PRONAME, COUNT(*) FROM PROJECT, IMPLPROJECT WHERE project.prono = implproject.prono (+) GROUP BY project.prono,proname;
  158. SELECT PRONAME, (SELECT COUNT(*) FROM IMPLPROJECT IP WHERE P.PRONO=IP.PRONO) LR FROM PROJECT P;
  159. --2. Podać listę pracowników oraz liczbę realizowanych przez nich projektów.
  160. SELECT ename, COUNT(*) FROM implemp, emp WHERE emp.empno = implemp.empno GROUP BY ename;
  161. --3. Podać nazwy departamentów z których bierze udział w projektach najwięcej
  162. --pracowników.
  163. SELECT dname, COUNT(*) FROM dept,emp,implemp WHERE dept.deptno = emp.deptno AND emp.empno = implemp.empno GROUP BY dname
  164. ORDER BY COUNT(*) DESC;
  165. --4. Podać w tym samym wierszu nazwę projektu z największym oraz najmniejszym
  166. --budżetem.
  167. 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;
  168. --5. Dla każdego departamentu podać jaki procent stanowią pracownicy oraz ich
  169. --zarobki, biorąc pod uwagę wszystkie departamenty.
  170. SELECT (SELECT NVL(dname,'Brak') FROM dept c WHERE c.deptno = a.deptno),
  171. 100*Round(a.l_prac/b.calk_licz,2)||'%',
  172. 100*Round(a.sal_sum/b.calk_sum,2)
  173. FROM (SELECT deptno, COUNT(*) AS l_prac, SUM(sal) AS sal_sum
  174. FROM emp GROUP BY deptno) a,
  175. (SELECT COUNT(*) AS calk_licz, SUM(sal) AS calk_sum FROM emp) b;
  176. --6. Podać nazwiska trzech pracowników najczęściej realizujących projekty.
  177. SELECT (ename, COUNT(*) FROM implemp, emp WHERE emp.empno = implemp.empno GROUP BY ename ORDER BY COUNT(*) DESC )
  178. --7. Podać dwa najrzadziej realizowane projekty.
  179. --8. Podać wartość realizowanych projektów w 2008 roku.
  180. --9. Podać wartości realizowanych projektów w poszczególnych latach realizacji.
  181. --10. Podać nazwę projektu realizowanego w najkrótszym czasie.
  182. --11. Podać nazwy projektów nie realizowanych.
  183. --12. W jednym wierszu podać sumaryczne zarobki pracowników na poszczególnych
  184. --stanowiskach oraz liczbę pracowników nie posiadających bonusów uwzględniając
  185. --stanowisko i departament.
  186.  
  187. 29 listopada
  188. 11:45
  189. --1. Podać listę pracowników nie realizujących projekty ze stopniem zaszeregowania
  190. --powyżej 3.
  191.  
  192. 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;
  193.  
  194. --2. Podać nazwy projektów, które były ponownie realizowane po upływie czasu
  195. --krótszym niż dwa miesiące.
  196. 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
  197. 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 ;
  198.  
  199. --3. Podać nazwiska pracowników, realizujących projekty w pierwszym kwartale
  200. --2009 roku. Uwzględnić tylko te projekty przy realizacji których uczestniczyło co
  201. --najmniej dwóch pracowników.
  202.  
  203. 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'));
  204. OR (END_DATE BETWEEN TO_DATE ('2009/04/01', 'yyyy/mm/dd') AND TO_DATE ('2009/06/30', 'yyyy/mm/dd'));
  205.  
  206.  
  207. --4. Dla każdej nazwy departamentu podać jego budżet. W obliczeniach uwzględnić
  208. --kwotę na płace i premie pracowników oraz wynagrodzenie z tytułu uczestnictwa w
  209. --projekcie. Wynagrodzenie pracownika uczestniczącego w projekcie oblicza się
  210. --jako 5% budżetu projektu pomnożone przez liczbę dni realizacji i podzielone prze
  211. --liczbę realizujących pracowników.
  212.  
  213. SELECT DNAME, SUM(NVL(SAL,0)), SUM(NVL(COMM,0)), SUM(NVL(BONUS,0)) FROM DEPT, EMP,
  214. SELECT (EMPNO,
  215. WHERE EMP.DEPTNO(+) = DEPT.DEPTNO AND BONUS.EMPNO(+) = EMP.EMPNO
  216. GROUP BY DNAME;
  217.  
  218. --5. Podać listę pracowników, datę zatrudnienia i wstawioną gwiazdką w wierszu
  219. --pracownika najwcześniej zatrudnionego.
  220.  
  221. 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;
  222.  
  223. --6 Używając odwołania do kolumny empno w kolumnie mgr i złączenie zewnętrzne
  224. --w połączeniu z funkcją NVL pobrać informacje o pracownikach po lewej stronie
  225. --pionowej kreski, a informacje o szefie po prawej.
  226.  
  227.  
  228.  
  229. --7. Na podstawie zadania 6 utworzyć podzapytanie 3-poziomowe.
  230.  
  231.  
  232.  
  233. --8. Na podstawie zadania 6 utworzyć podzapytanie 4-poziomowe.
  234.  
  235.  
  236.  
  237. --9. Używając CONNECT BY PRIOR i START WITH wybrać:
  238. -- a) pracownika o numerze 7902 i jego zwierzchników.
  239. -- b) pracownika o numerze 7839 i jego podwładnych.
  240.  
  241.  
  242.  
  243. --10. Korzystając z pseudokolumny LEVEL wskazać poziom węzła w hierarchii,
  244. --wybierając:
  245. -- a) pracownika o numerze 7521 i jego zwierzchników.
  246. -- b) pracownika o numerze 7499 i jego podwładnych.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement