Advertisement
cristiano002

Oracle Academy 1 (moje)

Jun 18th, 2014
316
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 15.02 KB | None | 0 0
  1. /* ------------------------------ QUIZ 1 ----------------------------------*/
  2.  
  3. /* 6 */
  4. SELECT employee_id, last_name, job_id, hire_date "STARTDATE"
  5. FROM employees;
  6.  
  7. /* 7 */
  8. SELECT DISTINCT job_id
  9. FROM employees;
  10.  
  11. /* 8 */
  12. SELECT employee_id "Emp #", last_name "Employee", job_id "Job", hire_date "Hire Date"
  13. FROM employees;
  14.  
  15. /* 9 */
  16. SELECT last_name || ',' || job_id AS "Employee and Title"
  17. FROM employees;
  18.  
  19. /* 10 */
  20. SELECT employee_id || ',' || first_name || ',' || last_name || ',' || email || ',' || phone_number
  21.                    || ',' || job_id || ',' || hire_date
  22.                    || ',' || salary || ',' || department_id
  23. AS "THE_OUTPUT"
  24. FROM employees;
  25.  
  26. /* ------------------------------ PART 2 ----------------------------------*/
  27. /* WHERE */
  28.  
  29. SELECT employee_id, last_name, job_id, department_id
  30. FROM employees
  31. WHERE department_id = 90;
  32.  
  33. -- Wielkosc liter ma znaczenie
  34. SELECT last_name, job_id, department_id
  35. FROM employees
  36. WHERE last_name = 'Whalen';
  37.  
  38. -- Jak wpiszemy '17-FEB-96' to potraktuje to jako stringa, wiec musimy wpisywac zgodnie z formatem
  39. SELECT last_name
  40. FROM employees
  41. WHERE hire_date = '96/02/17'; --'96/02/17'
  42.  
  43.  
  44. -- Przedzial obustronnie domkniety, wiec 2500 i 3500 tez wliczy
  45. SELECT last_name, salary
  46. FROM employees
  47. WHERE salary BETWEEN 2500 AND 3500;
  48.  
  49. SELECT employee_id, last_name, manager_id
  50. FROM employees;
  51.  
  52. -- IN wymienia
  53. SELECT employee_id, last_name, salary, manager_id
  54. FROM employees
  55. WHERE manager_id IN (100,101,201);
  56.  
  57. -- NOT zaprzeczenie / dopelnienie zbioru
  58. SELECT employee_id, last_name, salary, manager_id
  59. FROM employees
  60. WHERE manager_id NOT IN (100,101,201);
  61.  
  62. -- LIKE naklada maske.
  63. -- % oznacza to samo, co * w windowsie (dowolny ciag znakow)
  64. SELECT first_name
  65. FROM employees
  66. WHERE first_name LIKE 'S%';
  67.  
  68. -- _ oznacza dowolny JEDEN znak
  69. SELECT last_name
  70. FROM employees
  71. WHERE last_name LIKE '_o%';
  72.  
  73. -- ESCAPE definiuje znak ucieczki. Tak jak w latechu aby napisac $ musimy dac \$, gdzie ESCAPE '\'
  74. SELECT job_id
  75. FROM employees
  76. WHERE job_id LIKE '__\_%' ESCAPE '\';
  77.  
  78. -- Aby napisac ' nalezy napisac podwojnie ''
  79. -- Ewentualnie SELECT q'[ czyli ' zamieniamy na [
  80. /*
  81.  
  82. SELECT 'Plutal's' FROM dual'; - blad
  83. SELECT 'Plutal''s' FROM dual'; -- '' wyswietli '
  84. SELECT q'< Plural's;
  85. */
  86.  
  87.  
  88. SELECT last_name, manager_id
  89. FROM employees
  90. WHERE manager_id IS NULL;
  91.  
  92. SELECT last_name, manager_id
  93. FROM employees
  94. WHERE manager_id IS NOT NULL;
  95.  
  96. SELECT employee_id, last_name, job_id, salary
  97. FROM employees
  98. WHERE salary >= 10000
  99. AND job_id LIKE '%MAN%';
  100.  
  101. -- NOT W DWOCH MIEJSCACH MOZE BYC ( patrz na 2 przyklady nizej)
  102. SELECT employee_id, last_name, job_id, salary
  103. FROM employees
  104. WHERE salary >= 10000
  105. AND job_id NOT LIKE '%MAN%';
  106.  
  107. SELECT employee_id, last_name, job_id, salary
  108. FROM employees
  109. WHERE salary >= 10000
  110. AND NOT job_id LIKE '%MAN%';
  111.  
  112. -- Zmiana AND na OR
  113. SELECT employee_id, last_name, job_id, salary
  114. FROM employees
  115. WHERE salary >= 10000
  116. OR job_id LIKE '%MAN%';
  117.  
  118. /*
  119. KOLEJNOSC WYKONYWANIA OPERATOROW
  120. 1. Arytmetyczne
  121. 2. Konkatenacji (string)
  122. 3. Porownywanie warunkow
  123. 4. IS [NOT] NULL, LIKE, [NOT] IN
  124. 5. [NOT] BETWEEN
  125. 6. Nie rowne
  126. 7. NOT warunek logiczny
  127. 8. AND -||-
  128. 9. OR -||-
  129. */
  130.  
  131. -- najpierw wykona sie AND, potem OR zgodnie z powyzszym
  132. SELECT last_name, job_id, salary
  133. FROM employees
  134. WHERE job_id = 'SA_REP'
  135. OR job_id = 'AD_PRES'
  136. AND salary > 15000
  137.  
  138. -- do sprawdzenia
  139. SELECT last_name, job_id, salary
  140. FROM employees
  141. WHERE (job_id = 'SA_REP'
  142. OR job_id = 'AD_PRES')
  143. AND salary > 15000;
  144.  
  145.  
  146. /* SORTOWANIE */
  147. /* ASC - rosnaco (domyslnie)
  148.    DESC - malejaco */
  149.    
  150. SELECT last_name, job_id, department_id, hire_date
  151. FROM employees
  152. ORDER BY hire_date;
  153.  
  154. SELECT last_name, job_id, department_id, hire_date
  155. FROM employees
  156. ORDER BY hire_date DESC;
  157.  
  158. -- annsal jak obojetna wielkosc, 'annsal' jak sie liczy
  159. SELECT employee_id, last_name, salary*12 annsal
  160. FROM employees
  161. WHERE salary*12>1000 -- jak tu damy annsal to nie zadziala!!!
  162. -- W WHERE NIE MOZNA STOSOWAC ALIASOW!!!!
  163. ORDER BY salary*12;
  164.  
  165. -- Sortuje po 3ciej kolumnie
  166. SELECT last_name, job_id, department_id, hire_date
  167. FROM employees
  168. ORDER BY 3;
  169.  
  170. SELECT last_name, job_id, department_id, hire_date
  171. FROM employees
  172. ORDER BY department_id, salary DESC;
  173.  
  174. -- domyslnie NULLE beda na koncu (traktowane jako najwieksze)
  175. SELECT last_name, commission_pct
  176. FROM employees
  177. ORDER BY commission_pct DESC;
  178.  
  179. SELECT last_name, commission_pct
  180. FROM employees
  181. ORDER BY commission_pct DESC NULLS FIRST; -- NULLE NA POCZATKU
  182.  
  183. SELECT last_name, commission_pct
  184. FROM employees
  185. ORDER BY commission_pct DESC NULLS LAST; -- NULLE NA KONCU
  186.  
  187. /* ZASTEPOWANIE ZMIENNYCH PRZY POMOCY & */
  188.  
  189. -- &nazwa definiuje zmienna, ktora w sposob interantywny zostanie zwrocona do operatora z prosba o wstawienie wartosc z klawiatury
  190. SELECT employee_id, last_name, salary, department_id
  191. FROM employees
  192. WHERE employee_id = &employee_num;
  193.  
  194.  
  195. -- PRZY STRINGACH MUSIMY DAC '' po przypisaniu, bo musielibysmy wpisywac 'nazzwa' w okienku
  196.  
  197. -- && nie pyta drugi raz, &
  198. SELECT employee_id, last_name, job_id, &&column_name1
  199. FROM employees
  200. ORDER BY &column_name1;
  201.  
  202. -- wyswietla zmienne
  203. DEFINE
  204. -- definiuje zmienne
  205. DEFINE employee_num = 200;
  206.  
  207. UNDEFINE column_name1;
  208. DEFINE
  209.  
  210. SET VERIFY ON
  211.  
  212. SELECT employee_id, last_name, salary
  213. FROM employees
  214. WHERE employee_id = &employee_num;
  215.  
  216. /* ------------------------------ QUIZ 2 ----------------------------------*/
  217.  
  218. /* 1 */
  219. SELECT last_name, salary
  220. FROM employees
  221. WHERE salary > 12000;
  222.  
  223. /* 2 */
  224. SELECT last_name, department_id
  225. FROM employees
  226. WHERE employee_id = 176;
  227.  
  228. /* 3 */
  229. SELECT last_name, salary
  230. FROM employees
  231. WHERE salary NOT BETWEEN 5000 AND 12000;
  232.  
  233. /* 4 */
  234. SELECT last_name, job_id, hire_date
  235. FROM employees
  236. WHERE last_name IN('Matos','Taylor')
  237. ORDER BY hire_date;
  238.  
  239. /* 5 */
  240. SELECT last_name, department_id
  241. FROM employees
  242. WHERE department_id IN(20,50)
  243. ORDER BY last_name;
  244.  
  245. /* 6 */
  246. SELECT last_name Employee, salary "Monthly Salary"
  247. FROM employees
  248. WHERE salary BETWEEN 5000 AND 12000
  249.       AND department_id IN(20,50);
  250.      
  251. /* 7 */
  252. SELECT last_name, hire_date
  253. FROM employees
  254. WHERE hire_date BETWEEN '94/01/01' AND '94/12/31';
  255.  
  256. /* 8 */
  257. SELECT last_name, job_id
  258. FROM employees
  259. WHERE manager_id IS NULL;
  260.  
  261. /* 9 */
  262. SELECT last_name, salary, commission_pct
  263. FROM employees
  264. WHERE commission_pct IS NOT NULL
  265. ORDER BY salary DESC, commission_pct DESC;
  266.  
  267. /* 10 */
  268. SELECT last_name, salary
  269. FROM employees
  270. WHERE salary > &salary_num;
  271.  
  272. /* 11 */
  273. SELECT employee_id, last_name, salary, department_id
  274. FROM employees
  275. WHERE manager_id = &manager_id_num
  276. ORDER BY &order_condition;
  277.  
  278. /* 12 */
  279. SELECT last_name
  280. FROM employees
  281. WHERE last_name LIKE '__a%';
  282.  
  283. /* 13 */
  284. SELECT last_name
  285. FROM employees
  286. WHERE last_name LIKE '%a%' AND last_name LIKE '%e%';
  287.  
  288. /* 14 */
  289. SELECT last_name, job_id, salary
  290. FROM employees
  291. WHERE (job_id='ST_CLERK' OR job_id='SA_REP')
  292.   AND salary NOT IN(2500,3500,7000);
  293.  
  294. /* 15 */
  295. SELECT last_name Employee, salary "Monthly Salary", commission_pct
  296. FROM employees
  297. WHERE salary BETWEEN 5000 AND 12000
  298. AND department_id IN(20,50) AND commission_pct = 0.2;
  299.  
  300.  
  301.  
  302. /* ------------------------------ PART 3 ----------------------------------*/
  303. /* FUNKCJE JEDNOWIERSZOWE ( zwracaja jeden wynik dla jednego wiersza)      */
  304.  
  305. SELECT employee_id, last_name, department_id
  306. FROM employees
  307. WHERE last_name = 'higgins'; -- NIE ZWROCI WYNIKU BO WIELKOSC LITER MA ZNACZENIE
  308.  
  309. SELECT employee_id, last_name, department_id
  310. FROM employees
  311. WHERE LOWER(last_name) = 'higgins';
  312.  
  313. -- Dziala tez dla zmiennych
  314. SELECT employee_id, last_name, department_id
  315. FROM employees
  316. WHERE LOWER(last_name) = LOWER('&Dane');
  317.  
  318. /* Funkcje znakowe
  319. CONCAT('Hello, 'World')       HelloWorld
  320. SUBSTR('HelloWorld',1,5)      Hello
  321. LENGHT('HelloWorld')          10
  322. INSTR('HelloWorld','W')       6 (wyszukuje pozycje litery)
  323. LPAD(salary,10,'*')           *****24000 (wyrownanie do lewej)
  324. RPAD                          24000***** (wyrownanie do prawej)
  325. REPLACE('JACK and JUE','J','BL')    BLACK and BLUE
  326. LTRIM usuwanie literki z lewej
  327. RTRIM
  328. */
  329.  
  330. SELECT employee_id, CONCAT(first_name, last_name) NAME,
  331.        job_id,
  332.        LENGTH (last_name),
  333.        INSTR (last_name,'a') "Contains 'a'?",
  334.        LPAD(salary,10,'*'),
  335.        RPAD(salary,10,'*')
  336. FROM employees
  337. WHERE SUBSTR(job_id, 4) = 'REP';
  338.  
  339.  
  340. /* Funkcje numeryczne
  341. ROUND(45.926, 2)            45.93 (Zaokragla do okreslonej liczby cyfr po przecinku)
  342. TRUNC(45.926, 2)            45.92 (Ucina)
  343. MOD(1600, 300)              100 (Modulo)
  344. */
  345.  
  346. SELECT ROUND (45.923, 2), ROUND(45.923, 0), ROUND(45.923, -1)
  347. FROM dual;
  348.  
  349. SELECT TRUNC (45.923, 2), TRUNC(45.923), TRUNC(45.923, -1)
  350. FROM dual;
  351.  
  352. SELECT last_name, salary, MOD(salary, 5000)
  353. FROM employees
  354. WHERE job_id = 'SA_REP';
  355.  
  356. /* DATY
  357.  
  358. RR - format przypisuje WIEK
  359. YY - format 19YY
  360.  
  361. */
  362. SELECT sysdate FROM dual;
  363.  
  364. SELECT hire_date
  365. FROM employees;
  366.  
  367. -- teraz zmieniamy format
  368. SELECT sysdate FROM dual;
  369. ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR HH:MI:SS';
  370. ALTER SESSION SET NLS_LANGUAGE = 'ENGLISH';
  371.  
  372. SELECT hire_date, hire_date+1, hire_date+5/24, hire_date+(20/(24*60)) -- doda 1 dzien, 20/(24*60) dodaje 20 min
  373. FROM employees;
  374.  
  375. SELECT last_name, ROUND((SYSDATE-hire_date)/7,2) AS WEEKS
  376. FROM employees
  377. WHERE department_id = 90;
  378.  
  379. /* Funkcje manipulacji data
  380. MONTHS_BETWEEN
  381. ADD_MONTHS
  382. NEXT_DAY
  383. LAST_DAY         ost dzien miesiaca
  384. ROUND            zaokraglenie daty
  385. TRUNC            przyciecie
  386. */
  387.  
  388. SELECT MONTHS_BETWEEN(sysdate,hire_date)
  389. FROM employees;
  390.  
  391. SELECT ADD_MONTHS(sysdate,1), NEXT_DAY(sysdate, 'FRIDAY'), LAST_DAY(sysdate)
  392. FROM dual;
  393.  
  394. SELECT ROUND(sysdate,'MONTH'),ROUND(sysdate,'YEAR'),TRUNC(sysdate,'MONTH'),TRUNC(sysdate,'YEAR')
  395. FROM dual;
  396.  
  397. -- z powrotem na stary format
  398. ALTER SESSION SET NLS_DATE_FORMAT = 'RR/MM/DD';
  399. ALTER SESSION SET NLS_LANGUAGE = 'ENGLISH';
  400.  
  401. /*
  402. sysdate - czas SERWERA
  403. current_date - czas klienta
  404. */
  405. SELECT sysdate, systimestamp, CURRENT_DATE
  406. FROM dual;
  407.  
  408.  
  409. /* Funkcje konwersji
  410. CHARACTER -> TO_DATE
  411. DATE -> TO_CHAR
  412.  
  413. CHARACTER -> TO_NUMBER
  414. NUMBER -> TO_CHAR
  415.  
  416. YYYY
  417. YEAR (slownie)
  418. MM
  419. MONTH (pelna nazwa)
  420. MON
  421. DY
  422. DAY
  423. DD (liczba)
  424. HH
  425. HH24
  426. MI
  427. SS
  428. SSSSS - sekund do polnocy
  429. */
  430.  
  431. -- TO_CHAR dla daty
  432. SELECT sysdate, TO_CHAR(sysdate,'J')
  433. FROM dual;
  434.  
  435. SELECT hire_date, TO_CHAR(hire_date, 'fmDD HH24:MI:SS Month YYYY') AS HIREDATE
  436. FROM employees;
  437.  
  438. -- TO_CHAR dla liczb
  439. /*
  440. 9 Reprezentuje liczbe
  441. 0 Zmusza do wyswietlenia 0
  442. $
  443. L lokalny symbol waluty
  444. . miejsca dziesietne
  445. , przecinek jako dzielnik tysiecy
  446. */
  447.  
  448. SELECT salary, TO_CHAR(salary, '$99,999.00') AS SALARY,  TO_CHAR(salary, '99.999EEEE') AS SALARY2
  449. FROM employees;
  450.  
  451. -- z CHAR na NUMBER/DATE
  452. SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-YYYY')
  453. FROM employees
  454. WHERE hire_date < TO_DATE('01-Jan-90','DD-Mon-RR');
  455.  
  456. -- ZAGNIEZDZANIE FUNKCJI
  457. SELECT last_name, UPPER(CONCAT(SUBSTR (LAST_NAME, 1, 8), '_US'))
  458. FROM employees
  459. WHERE department_id = 60;
  460.  
  461. /* Funkcje pracujace na NULLACH (ogolne)
  462. NVL(commission_pct,0)     Jak napotka Nulla w commission_pct to wstawi tam 0 (zwraca sama siebie lub 0 )
  463. NVL2(commission_pct,'SAL+COMM','SAL') income    Jak napotka NULL to zwroci SAL+COMM, jak nie to SAL, przy czym dwa ost. arrg musza byc tego samego typu
  464. NULLIF(war1,war2)      zwraca NULL jezeli sa takie same wartosci, jezeli rozne to zwraca 1 wartosc
  465. COALESCE(war1,war2,do_zwrocenia)    TESTUJE wartosc i jak jest NULL to TESTUJE DALSZE REKURENCYJNIE
  466.  
  467.  
  468. WSZEDZIE TAKIE SAME TYPY ARGUMENTOW!!!!!!!!!!!!!!
  469.  
  470. */
  471.  
  472. SELECT last_name, salary,commission_pct,  NVL(commission_pct, 0), (salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL
  473. FROM employees;
  474.  
  475. SELECT last_name, salary, commission_pct, NVL2(commission_pct,salary+commission_pct,salary) income
  476. FROM employees WHERE department_id IN (50,80);
  477.  
  478. SELECT first_name, LENGTH(first_name) "expr1", last_name, LENGTH(last_name) "expr2", NULLIF(LENGTH(first_name), LENGTH(last_name)) RESULT
  479. FROM employees;
  480.  
  481. SELECT last_name, employee_id, COALESCE(commission_pct,manager_id,1)
  482. FROM employees;
  483.  
  484. /* Wyrazenia warunkowe
  485. CASE
  486. DECODE
  487. */
  488.  
  489. -- Wersja CASE
  490. SELECT last_name, job_id, salary,
  491.         CASE job_id WHEN 'IT_PROG' THEN 1.10*salary
  492.                     WHEN 'ST_CLERK' THEN 1.15*salary
  493.                     WHEN 'SA_REP' THEN 1.20*salary
  494.         ELSE salary
  495.         END AS "REVISED_SALARY"
  496. FROM employees;
  497.  
  498. -- Wersja DECODE
  499. SELECT last_name, job_id, salary,
  500.         DECODE (job_id, 'IT_PROG' ,1.10*salary,
  501.                         'ST_CLERK',1.15*salary,
  502.                         'SA_REP'  ,1.20*salary,
  503.                         salary) REVISED_SALARY
  504. FROM employees;
  505.  
  506.  
  507. /* ------------------------------ QUIZ 3 ----------------------------------*/
  508.  
  509. /* 1 */
  510. SELECT sysdate AS "Date"
  511. FROM dual;
  512.  
  513. /* 2,3 */
  514. SELECT employee_id, last_name, salary, ROUND(salary+(salary*0.155)) "New Salary"
  515. FROM employees;
  516.  
  517. /* 4 */
  518. SELECT employee_id, last_name, salary, ROUND(salary+(salary*0.155)) "New Salary", ROUND(salary+(salary*0.155))-salary AS Increase
  519. FROM employees;
  520.  
  521. /* 5 */
  522. SELECT INITCAP(last_name) Name,LENGTH(last_name) LENGTH
  523. FROM employees
  524. --WHERE last_name LIKE ('J%' OR 'A%' OR 'M%')
  525. WHERE last_name LIKE 'J%' OR last_name LIKE 'A%' OR last_name LIKE 'M%'
  526. ORDER BY last_name;
  527.  
  528. SELECT INITCAP(last_name) Name ,LENGTH(last_name) LENGTH
  529. FROM employees
  530. --WHERE last_name LIKE ('J%' OR 'A%' OR 'M%')
  531. WHERE last_name LIKE INITCAP('&pierwsza_litera%');
  532. ORDER BY last_name;
  533.  
  534. /* 6 */
  535. SELECT last_name, ROUND(MONTHS_BETWEEN(sysdate,hire_date)) AS MONTHS_WORKED
  536. FROM employees;
  537.  
  538. /* 7 */
  539. SELECT last_name, LPAD(salary,15,'$') AS SALARY
  540. FROM employees;
  541.  
  542. /* 8 */
  543. SELECT last_name || ' ' || LPAD(' ',salary/1000,'*') AS EMPLOYEES_AND_THEIR_SALARIES
  544. FROM employees;
  545.  
  546. /* 9 */
  547. SELECT last_name, TRUNC((sysdate-hire_date)/7,0) AS TENURE
  548. FROM employees
  549. ORDER BY TENURE DESC;
  550.  
  551. /* ------------------------------ QUIZ 4 ----------------------------------*/
  552.  
  553. /* 1 */
  554. SELECT last_name || 'earns' || TO_CHAR(salary,'$00,000.00') || ' monthly but wants' || TO_CHAR(salary*3,'$00,000.00') AS "Dream Salaries"
  555. FROM employees;
  556.  
  557. /* 2 */
  558. SELECT last_name, hire_date, INITCAP(TO_CHAR((NEXT_DAY(ADD_MONTHS(hire_date,6),'MONDAY')),'DAY,')) || 'the ' ||
  559.                             INITCAP(TO_CHAR((NEXT_DAY(ADD_MONTHS(hire_date,6),'MONDAY')),'DDspth')) || ' of ' ||
  560.                             INITCAP(TO_CHAR((NEXT_DAY(ADD_MONTHS(hire_date,6),'MONDAY')),'MONTH'))
  561. AS Review
  562. FROM employees;
  563.  
  564. /* 3 */
  565. SELECT last_name, hire_date, TO_CHAR(hire_date,'DAY') AS DAY
  566. FROM employees;
  567.  
  568. /* 4 */
  569. SELECT last_name, NVL(TO_CHAR(commission_pct),TO_CHAR('No Commission')) COMM
  570. FROM employees;
  571.  
  572. /* 5 */
  573. SELECT job_id, DECODE (job_id, 'AD_PRES' ,'A',
  574.                         'ST_MAN','B',
  575.                         'IT_PROG'  ,'C',
  576.                         'SA_REP', 'D',
  577.                         'ST_CLERK', 'E',
  578.                         0) GRADE
  579. FROM employees;
  580.  
  581. /* 6 */
  582. SELECT job_id, CASE job_id WHEN 'IT_PROG' THEN 'A'
  583.                     WHEN 'ST_MAN' THEN 'B'
  584.                     WHEN 'IT_PROG' THEN 'C'
  585.                     WHEN 'SA_REP' THEN 'D'
  586.                     WHEN 'ST_CLERK' THEN 'E'
  587.         ELSE '0'
  588.         END AS GRADE
  589. FROM employees;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement