Advertisement
Guest User

sql

a guest
Nov 29th, 2015
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 9.13 KB | None | 0 0
  1. @Modifed BY Kasia
  2.  
  3. ===================================================Zadania z zestawu 3=========13====
  4. 1. SELECT TABLE_NAME FROM user_tables;
  5.  
  6. 2. DESC DEPT;
  7.    DESC EMP;
  8.    DESC SALGRADE;
  9.    
  10. 3. SELECT UNIQUE 432*432 FROM user_tables;
  11.            
  12.             lub
  13.    
  14.    SELECT 432*432 FROM dual;
  15.    
  16.  
  17. 4. SELECT UNIQUE 'Wojciech Balawender' FROM dept;
  18.  
  19.             lub
  20.            
  21.    SELECT 'Wojciech Balawender' FROM dual;
  22.            
  23. 5. SELECT 'Wojciech Balawender' AS "Moje imię i nazwisko:" FROM dual;
  24.  
  25. 6. SELECT ename, sal FROM emp;
  26.  
  27. 7. SELECT ename, sal*12 FROM emp;
  28.  
  29. 8. SELECT ename AS "Pracownik:" ,sal*12 AS "Zarobki:" FROM emp;
  30.  
  31. 9. SELECT job FROM emp;
  32.  
  33. 10. SELECT UNIQUE job FROM emp;
  34.  
  35. 11. SELECT 323*9 FROM emp;
  36.  
  37. 12. SELECT substr(hiredate+1,7,2) FROM emp;
  38.  
  39.     --Uwaga: substr(hiredate,7,2)+1 nie jest dobre (DATA!)
  40.  
  41. 13. SELECT job FROM emp WHERE job LIKE '%R';
  42.  
  43. 14. SELECT ename, sal FROM emp WHERE sal = 1250;
  44.  
  45. 15. SELECT ename, sal FROM emp WHERE sal BETWEEN 3000 AND 5000;
  46.  
  47. 16. SELECT ename, sal FROM emp WHERE job = 'MANAGER' AND sal BETWEEN 2450 AND 2900;
  48.  
  49.             lub
  50.            
  51.     SELECT ename, sal FROM emp WHERE job = 'MANAGER' AND sal < 2450 AND sal < 2900;
  52.    
  53. 17. SELECT ename, sal FROM emp WHERE ename='SMITH'
  54.  
  55. 18. SELECT ename, sal FROM emp WHERE ename LIKE 'S%'
  56.  
  57. 19. SELECT SUBSTR( 'qwertyqwertyqwertyBazyDanych',
  58.                    INSTR('qwertyqwertyqwertyBazyDanych','BazyDanych'),
  59.                    LENGTH('BazyDanych')
  60.                   ) FROM dual;
  61.                  
  62.             lub
  63.            
  64.     SELECT SUBSTR('qwertyqwertyqwertyBazyDanych', 19,10) FROM dual;
  65.            
  66.             lub nawet
  67.            
  68.     SELECT SUBSTR('qwertyqwertyqwertyBazyDanych', 19) FROM dual;
  69.    
  70. 20. SELECT INSTR('qwertyuiopasdfghjklzxcvbnm','g') FROM dual;
  71.  
  72. 21. SELECT ename || ' zarabia $' || sal AS "Pracownik i jego zarobki" FROM emp;
  73. 22. SELECT ename, deptno, DECODE(deptno,'10','Dziesiaty','20','Dwudziesty','Trzydziesty') FROM emp;
  74.  
  75. --Co wypada znac jeszcze z tego rodziału:
  76.  
  77. --Aliasy w cudzyslowach - nie w apostrofach!!!!!!
  78. SELECT sysdate FROM dual;
  79. SELECT sal FROM emp WHERE sal IN (1000,2000,3000)
  80. SELECT LOWER(ename) FROM EMP
  81. INITCAP - pierwsza litera wielka
  82. ROUND - zaokrąglenie
  83. % - ciąg znaków
  84. _ - pojedynczy znak
  85.  
  86. TO_CHAR Konwersja na napis
  87.  
  88. SELECT TO_CHAR(sysdate, 'DD.MM.YYYY HH24:MI:SS') FROM dual;
  89.  
  90. Trzy litery D oznaczają ilość dni, który upłynęły od początku roku
  91. SELECT TO_NUMBER('17.74', '99.99') FROM dual;
  92. ORDER BY - porządkuje rosnąco, DESC - malejąco
  93. COUNT - zlicza wystąpienia
  94. SELECT COUNT(ename), job FROM emp GROUP BY job HAVING SUM(sal)>=6000;
  95.  
  96.  
  97. ===================================================Zadania z zestawu 4=========24====
  98.  
  99. 1. SELECT deptno, MIN(sal) FROM emp GROUP BY deptno;
  100.  
  101. 2. SELECT deptno, AVG(sal) FROM emp GROUP BY deptno HAVING AVG(sal) > 1600;
  102.  
  103. 3. SELECT ename FROM emp WHERE ename LIKE 'N%';
  104.  
  105. 4. SELECT ename FROM emp WHERE ename LIKE 'SMITH';
  106.  
  107.             lub
  108.        
  109.    SELECT ename FROM emp WHERE ename = 'SMITH';
  110.    
  111. 5. SELECT ename,job,sal FROM emp WHERE sal BETWEEN 1000 AND 5000 ORDER BY sal;
  112.  
  113. 6. SELECT ename,job,sal FROM emp WHERE sal BETWEEN 1000 AND 5000 AND JOB = 'SALESMAN' ORDER BY sal;
  114.  
  115. 7. SELECT sysdate FROM dual;
  116.  
  117.             lub
  118.            
  119.     SELECT UNIQUE sysdate FROM emp;
  120.    
  121. 8. decode(job,'CLERK','Urzędnik','SALESMAN','Sprzedawca','MANAGER','Menedżer','ANALYST','Analityk','Prezydent') AS Spolszczona FROM emp;
  122.  
  123. 9. SELECT ename, job FROM emp WHERE job = 'CLERK' OR job = 'MANAGER';
  124.  
  125. 10. SELECT SUM(sal) FROM emp;
  126.  
  127. 11. SELECT avg(sal) FROM emp WHERE job = 'SALESMAN';
  128.  
  129. 12. SELECT COUNT(ENAME) FROM emp;
  130.  
  131. 13. SELECT COUNT(ENAME) FROM emp WHERE JOB = 'MANAGER';
  132.  
  133. 14. SELECT SUM(sal), job FROM emp GROUP BY job;
  134.  
  135. 15. SELECT COUNT(ename) FROM emp WHERE deptno = 20
  136.  
  137. 16. SELECT TO_CHAR(AVG(sal),'999,999.99') FROM emp WHERE JOB!='president';
  138.  
  139. 17. SELECT deptno, COUNT(deptno) FROM emp GROUP BY deptno HAVING COUNT(deptno) > 4;
  140.  
  141. 18. SELECT 'SA UNIKALNE' FROM EMP HAVING COUNT(UNIQUE sal) = COUNT(sal);
  142.  
  143. 19.
  144.     -- Maksymalne zarobki mniejsze niz 1300 wybrane z zarobkow+:
  145.    
  146.     SELECT MAX(sal), job FROM emp  WHERE sal < 1300 GROUP BY job;
  147.    
  148.     -- Maksymalne zarobki mniejsze niz 1300 wybrane z maksymalnych zarobkow:
  149.    
  150.     SELECT JOB, MAX(sal) FROM EMP GROUP BY job HAVING MAX(sal) <= 1300;
  151.  
  152. 20. SELECT COUNT(ename), job, deptno FROM emp GROUP BY job,deptno;
  153.  
  154. 21. SELECT job,avg(sal) FROM emp GROUP BY job HAVING avg(sal) > 1000;
  155.  
  156. 22. SELECT substr(HIREDATE,4,2) FROM emp GROUP BY substr(HIREDATE,4,2)  HAVING COUNT(substr(HIREDATE,4,2)) >= 2 ;
  157.  
  158. 23. SELECT deptno, substr(hiredate,0,2) rok, COUNT(ENAME) FROM emp GROUP BY substr(hiredate,0,2), deptno ;
  159.  
  160. 24. SELECT B.ename, COUNT(B.ename), B.deptno FROM emp A, emp B WHERE A.mgr = B.empno AND B.job = 'MANAGER' GROUP BY B.ename, B.deptno  HAVING COUNT(B.ename) > 2
  161.  
  162. 25. SELECT ename FROM emp WHERE substr(hiredate,7,2)='01';
  163.  
  164. 26. SELECT ename pracownik, substr(HIREDATE,7,2) || ' ' || decode(substr(HIREDATE,4,2),
  165.     '01','Styczeń',
  166.     '02','Luty',
  167.     '03','Marzec',
  168.     '04','Kwiecień',
  169.     '05','Maj','06','Czerwiec','07','Lipiec','08','Sierpień','09','Wrzesień','10','Październik','11','Listopad','Grudzień') || ' 19' || substr(hiredate,0,2) FROM emp;
  170.    
  171.     --Prościej (By Kasia):
  172.    
  173.     SELECT ename Pracownik,to_char(hiredate,'dd month yyyy') Zatrudniony FROM emp;
  174.    
  175.  
  176. 27. SELECT ename FROM emp WHERE ename LIKE '%R%'
  177.  
  178. 28. SELECT LENGTH(ename) FROM emp ORDER BY LENGTH(ename)
  179.  
  180. 29. SELECT SUM(sal), job FROM emp WHERE JOB = 'MANAGER' OR JOB = 'PRESIDENT' GROUP BY job;
  181.            
  182.             --Jeśli razem, to:
  183.            
  184.     SELECT SUM(sal) FROM emp WHERE JOB = 'MANAGER' OR JOB = 'PRESIDENT'
  185.    
  186. 30. -- Na literę J (nie wiem, skąd mi się to wzięło):
  187.  
  188.         SELECT SUM(sal) FROM emp WHERE ename LIKE 'J%';
  189.        
  190.     -- Prawidłowo(by Kasia):
  191.    
  192.         SELECT substr(ename,1,1), SUM(sal) FROM emp GROUP BY substr(ename,1,1);
  193.  
  194. 31. SELECT avg(sal) FROM emp; -- nie mozna!
  195.        
  196.         więc:
  197.    
  198.     SELECT SUM(sal)/COUNT(ename) FROM emp;
  199.    
  200. 32. SELECT ename || CASE WHEN sal = 3000 THEN ' rowno' WHEN sal < 1000 THEN ' mniej' WHEN sal > 1000 THEN ' wiecej'  END FROM emp;
  201.  
  202.  
  203. ===================================================Zadania z zestawu 5========="Przykładowe zadania na złączenia"====
  204.  
  205. 1. SELECT ename, dname FROM emp A,dept B WHERE A.deptno = B.deptno;
  206.  
  207. 2. SELECT ename, dname, loc FROM emp A,dept B WHERE A.deptno = B.deptno AND A.sal < 1500 ORDER BY A.DEPTNO DESC;
  208.  
  209. 3. SELECT SUM(sal), loc FROM emp A,dept B WHERE A.deptno = B.deptno GROUP BY loc;
  210.  
  211. 4.  -- Na skróty (20 jest w DALLAS):
  212.  
  213.     SELECT MAX(sal) FROM emp WHERE deptno = 20 AND job='SALESMAN' ;
  214.    
  215.     -- Prawidłowo (ale uwaga - nie ma zadnych sprzedawców w Dallas):
  216.    
  217.     SELECT MAX(sal), loc FROM emp A,dept B WHERE A.deptno = B.deptno AND B.loc = 'DALLAS' AND A.job='SALESMAN' GROUP BY loc;
  218.    
  219. 5. SELECT A.ename, B.ename FROM emp A, emp B WHERE A.mgr = B.empno;
  220.    
  221. 6. SELECT A.ename FROM emp A, emp B WHERE A.hiredate < B.hiredate AND A.mgr = B.empno
  222.  
  223. 7. SELECT MIN(sal),dname FROM emp A,dept B WHERE A.deptno = B.deptno GROUP BY dname;
  224.  
  225. 8. SELECT dname, COUNT(ename) FROM emp A,dept B WHERE A.deptno(+) = B.deptno GROUP BY dname;
  226.  
  227.  
  228. ===================================================Zadania z zestawu 5========="Przykładowe zadania na zagnieżdżenia SELECT"====
  229.  
  230. 1. SELECT empno, ename FROM emp WHERE (SELECT MIN(sal) FROM emp) = sal;
  231. 2.
  232.     -- By Kasia:
  233.     SELECT MAX(sal),deptno FROM emp GROUP BY deptno HAVING avg(sal)>(SELECT MIN(sal) FROM emp WHERE job='CLERK');
  234.    
  235.     -- By Kasia:
  236. 3. SELECT MAX(sal),deptno FROM emp GROUP BY deptno HAVING avg(sal)>(SELECT MAX(sal) FROM emp WHERE deptno=30);
  237.    
  238.     -- By Kasia:
  239. 4. SELECT ename,sal FROM emp WHERE sal IN(SELECT avg(sal) FROM emp GROUP BY job)
  240.    
  241.     -- By Kasia:
  242. 5. SELECT empno,ename,sal FROM emp WHERE sal<(SELECT avg(emp1.sal) FROM emp emp1 WHERE deptno=emp1.deptno);
  243.  
  244. 6. SELECT ename -FROM emp WHERE sal IN (SELECT avg(sal) FROM emp GROUP BY JOB);
  245.     --Nie do końca poprawnie, bo in działa tu na oślep, ale średnie zarobki są unikalne
  246. 7. SELECT ename FROM emp WHERE sal > (SELECT MIN(sal) FROM emp WHERE deptno = 10)
  247.  
  248. ===================================================Zadania z zestawu 5========="RÓŻNE"====
  249. 1. SELECT TABLE_NAME FROM user_tables;
  250.  
  251.    DESC DEPT;
  252.    DESC EMP;
  253.    DESC SALGRADE;
  254.    
  255.    -- By Kasia:
  256. 2. SELECT ename,sal FROM emp WHERE sal IN(SELECT MAX(sal) FROM emp);
  257.  
  258. 3. SELECT A.ename, A.sal FROM emp A, (SELECT sal FROM emp WHERE ename LIKE 'S%') B WHERE A.sal = B.sal;
  259.  
  260. 4. SELECT ename,sal FROM emp WHERE sal IN(SELECT MIN(sal) FROM emp GROUP BY deptno);
  261.  
  262.  
  263. 5. SELECT ename, sal,deptno FROM emp WHERE (SELECT MIN(sal) FROM emp WHERE deptno = 20) < sal ORDER BY sal DESC;
  264.  
  265.     -- Drugi sposób?
  266.    
  267. 6. SELECT ename, sal,deptno FROM emp WHERE (SELECT MAX(sal) FROM emp WHERE deptno = 20) < sal ORDER BY sal DESC;
  268.  
  269.     -- Drugi sposób?
  270.  
  271. 7. SELECT ename,sal,empno FROM emp WHERE sal<(SELECT avg(emp2.sal) FROM emp emp2 WHERE emp.deptno=emp2.deptno);
  272.  
  273. 8.
  274.     -- Konkatenacja z nazwami zawodów:
  275.     SELECT ename || ' ' || job "Nazwiska i nazwy zawodów" FROM emp;
  276.  
  277.     -- Ale miała być z DZIAŁAMI (by Kasia):
  278.    
  279.     SELECT ename||' '||dname FROM emp,dept WHERE emp.deptno=dept.deptno;
  280.  
  281. 9. SELECT ename, job, comm FROM emp WHERE job = 'SALESMAN' AND comm = '0'
  282.  
  283. 10. SELECT ename, CASE WHEN comm IS NULL THEN 0 ELSE comm END FROM emp;
  284.  
  285. --CROSS JOIN wybadaj.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement