Advertisement
Guest User

Untitled

a guest
Oct 24th, 2016
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 80.22 KB | None | 0 0
  1. APLICAŢII LABORATOR 3
  2.  
  3. Funcţii numerice şi pe caracter
  4.  
  5. 1. Pentru a afişa cu litere mici numele departamentului precum si șirul ' SQL COURSE' introduceți:
  6.  
  7. SELECT LOWER (DNAME),LOWER('SQL course') FROM DEPT;
  8.  
  9. LOWER(DNAME) LOWER(SQL COURSE)
  10. ------------------------------------
  11. research sql course
  12. sales sql course
  13. operations sql course
  14. accounting sql course
  15.  
  16. 2. Funcţia UPPER e folosita pentru a forța intrarea câmpul specificat la litere mari.
  17.  
  18. SELECT ENAME FROM EMP WHERE JOB =UPPER('manager');
  19.  
  20. ENAME
  21. -----
  22. BLAKE
  23. CLARK
  24. JONES
  25.  
  26. 3. Forţăm scrierea primei litere a fiecărui cuvânt in litera mare la afişarea numelor departamentelor şi locaţiilor:
  27.  
  28. SELECT INITCAP(DNAME), INITCAP(LOC) FROM DEPT;
  29.  
  30. INITCAP(DNAME) INITCAP(LOC)
  31. ----------------------------
  32. Accounting New York
  33. Research Dallas
  34. Sales Chicago
  35. Operations Boston
  36.  
  37. 4. Concatenaţi numele cu funcţia folosind CONCAT(char 1,char2), o alternativă a operatorului ||
  38.  
  39. SELECT CONCAT (ename,job) "JOB" FROM EMP WHERE EMPNO =7900;
  40.  
  41. JOB
  42. -----------
  43. JAMESCLERK
  44.  
  45. 5. Folosind funcţiile LPAD si RPAD aduceți câmpul DNAME la lungimea 20 adăugând ‘*’ si BLANK-uri in fata/spate si câmpul DEPTNO aduceţi-l la lungimea 20 completând in fata/spate cu ’.’
  46. (Sintaxa: LPAD(col/value,n,'string') adăugă la coloana sau la valoarea literala spre stânga până la lungimea totala n. Primele spatii sunt umplute cu 'string'. Daca 'string' e omis atunci sunt umplute cu blancuri
  47. Sintaxa: RPAD(col/value,n,'string') adăugă la coloana sau la valoarea literala spre dreapta până la lungimea totala n. Ultimele poziții sunt umplute cu 'string' sau daca acesta e omis cu blancuri)
  48.  
  49. SELECT LPAD(DNAME,20,'*'),LPAD(DNAME,20),LPAD(DEPTNO,20,'.') FROM DEPT;
  50.  
  51. LPAD(DNAME,20,'*') LPAD(DNAME,20) LPAD(DEPTNO,20,'.')
  52. ------------------------------------------------------------
  53. ************RESEARCH RESEARCH.....................20
  54. ***************SALES SALES.....................30
  55. **********OPERATIONS OPERATIONS.....................40
  56. **********ACCOUNTING ACCOUNTING.....................10
  57.  
  58. Observați ca a doua coloana e completata in stânga cu spatii, implicit , si ca a treia coloana este de tipul număr.
  59.  
  60. SELECT RPAD(DNAME,20,'*'),RPAD(DNAME,20),RPAD(DEPTNO,20,'.') FROM DEPT;
  61.  
  62. RPAD (DNAME,20,'*') RPAD(DNAME,20) RPAD(DEPTNO,20,'.')
  63. ------------------------------------------------------------
  64. RESEARCH************ RESEARCH 20..................
  65. SALES*************** SALES 30..................
  66. OPERATIONS********** OPERATIONS 40..................
  67. ACCOUNTING********** ACCOUNTING 10..................
  68.  
  69. Observaţi că în acest caz, a doua coloană are în dreapta blancuri puse implicit.
  70.  
  71. 6. Extrageţi 4 caractere din literalul 'ORACLE' incepind de la al doilea caracter, apoi extrageţi din conținutul lui DNAME incepind cu al doilea caracter şi apoi extrageţi 5 caractere din DNAME incepind cu al treilea caracter (Sintaxă: SUBSTR(col/value,pos,n)întoarce un string de n caractere lungime dintr-o coloană sau valoare literală , începând de la poziţia pos. Daca n e omis, e extras şirul din pozitia pos până la sfârşit)
  72.  
  73. SELECT SUBSTR('ORACLE',2,4),SUBSTR(DNAME,2),SUBSTR(DNAME,3,5) FROM DEPT;
  74.  
  75. SUBSTR('ORACLE',2,4) SUBSTR(DNAME,2) SUBSTR(DNAME,3,5)
  76. ---------------------------------------------------------
  77. RACL ESEARCH SEARC
  78. RACL ALES LES
  79. RACL PERATIONS ERATI
  80. RACL CCOUNTING COUNT
  81.  
  82. Observați ca valorile sunt aliniate implicit la stânga.
  83.  
  84.  
  85. 7. Specificaţi poziţia în care apare prima dată litera ‘A’ în conţinutul lui DNAME, apoi specificaţi poziţia în care apare prima dată şirul ‘ES’ în conţinutul lui DNAME, apoi specificaţi poziţia în care apare a doua oară şirul ‘C’ în conţinutul lui DNAME, începând numărarea din poziţia 1. (Sintaxă: INSTR(col/value,'string') gaseste pozitia caracterului in care apare prima data 'string'
  86. Altă sintaxă:INSTR(col/value,'string',pos,n) gaseste pozitia caracterului pentru a n-a aparitie a lui ‘string’ in coloana sau valoarea literala incepind din pozitia pos)
  87.  
  88. SELECT DNAME,INSTR(DNAME,'A'), INSTR(DNAME,'ES'),INSTR(DNAME,'C',1,2) FROM DEPT;
  89.  
  90. DNAME INSTR(DNAME,'A') INSTR(DNAME,'ES') INSTR(DNAME,'C',1,2)
  91. ---------------------------------------------------------------------
  92. ACCOUNTING 1 0 3
  93. RESEARCH 5 2 0
  94. SALES 2 4 0
  95. OPERATIONS 5 0 0
  96.  
  97. 8. Să se elimine, de la începutul conţinutului DNAME mai întâi litera ‘A’, apoi combinaţia caracterelor ‘AS’, apoi combinaţia caracterelor ‘ASOP’. (Sintaxă: LTRIM (col/value,'char/s') șterge de la stânga prima apariție a caracterului specificat - sau o combinație a caracterelor specificate. Daca nu e specificat nici un caracter șterge toate blancurile din stânga)
  98.  
  99. SELECT DNAME,LTRIM(DNAME,'A'),LTRIM(DNAME,'AS'), LTRIM(DNAME,'ASOP') FROM DEPT;
  100.  
  101. DNAME LTRIM(DNAME,'A') LTRIM(DNAME,'AS') LTRIM(DNAME,'ASOP')
  102. -------------------------------------------------------------------
  103. RESEARCH RESEARCH RESEARCH RESEARCH
  104. SALES SALES LES LES
  105. OPERATIONS OPERATIONS OPERATIONS ERATIONS
  106. ACCOUNTING CCOUNTING CCOUNTING CCOUTING
  107.  
  108. 9. Să se elimine, de la finalul conţinutului DNAME mai întâi litera ‘G’, apoi combinaţia caracterelor ‘GHS’, apoi caracterul ‘N’. (Sintaxă: RTRIM (col/value,'char/s') șterge de la dreapta, aparițiile lui char - sau o combinație de caractere specificate. Daca nu e specificat 'char/s' atunci șterge blancurile)
  109.  
  110. SELECT DNAME, RTRIM(DNAME,'G'),RTRIM(DNAME,'GHS'), RTRIM(DNAME,'N') FROM DEPT;
  111.  
  112. DNAME RTRIM(DNAME,'G') RTRIM(DNAME,'GHS') RTRIM(DNAME,'N')
  113. ---------------------------------------------------------------
  114. RESEARCH RESEARCH RESEARC RESEARCH
  115. SALES SALES SALE SALES
  116. OPERATIONS OPERATIONS OPERATION OPERATIONS
  117. ACCOUNTING ACCOUNTIN ACCOUNTIN ACCOUNTING
  118.  
  119. 10. RTRIM poate fi in mod particular folositor in a șterge blancurile de la sfirsit la coloane. De exemplu, presupunând ca in transferul datelor la tabela 'EMP' blancurile au fost adăugate neintenționat după fiecare ENAME. Următoarea comanda va șterge toate blancurile finale: UPDATE EMP SET ENAME =RTRIM(ENAME);
  120.  
  121. 11. Căutaţi în conţinutul ENAME valori care se pronunţă la fel ca ‘FRED’ (Sintaxă: SOUNDEX(col/value) întoarce un sir de caractere reprezentând pronunția – sunetul - cuvântului pentru fiecare coloana sau valoare literala. Aceasta funcție întoarce o reprezentare fonetica a fiecărui cuvânt si ne permite sa comparam cuvinte care sunt scrise diferit, dar se pronunța - suna - la fel)
  122.  
  123. SELECT ENAME, SOUNDEX(ENAME) FROM EMP WHERE SOUNDEX(ENAME)=SOUNDEX('FRED');
  124.  
  125. ENAME SOUNDEX(ENAME)
  126. -----------------------------
  127. FORD F630
  128.  
  129. 11. Afişaţi lungimea şirului 'SQL COURSE' , a conţinutului DEPTNO şi a conţinutului DNAME (Sintaxă: LENGTH(col/value) întoarce numărul de caractere – digiți - din coloana sau din valoarea literala)
  130.  
  131. SELECT LENGTH('SQL COURSE'),DEPTNO, LENGTH(DEPTNO),DNAME, LENGTH(DNAME) FROM DEPT;
  132.  
  133. LENGTH('SQLCOURSE') DEPTNO LENGTH(DEPTNO) DNAME LENGTH(DNAME)
  134. ---------------------------------------------------------------------------
  135. 10 10 2 ACCOUNTING 10
  136. 10 20 2 RESEARCH 8
  137. 10 30 2 SALES 5
  138. 10 40 2 OPERATIONS 10
  139.  
  140. Observați ca LENGTH la fel ca si funcția INSTR întoarce o valoare numerică.
  141.  
  142. 12. Substituiţi caracterul ‘C’ prin caracterul ‘P’ în conţinutul ENAME, apoi substituiţi unul din caracterul ‘AR’ prin caracterele corespunzătoare din ‘IT’ în conţinutul JOB. (Sintaxă: TRANSLATE(col/value,from,to) translatează la ieșire caracterele 'from' la cele 'to'. Mai mult de un caracter, se poate potrivi. Toate aparițiile din 'from' sunt înlocuite de corespondentul din 'to')
  143.  
  144. SELECT ENAME,TRANSLATE(ENAME,'C','P'),JOB, TRANSLATE(JOB,'AR','IT')FROM EMP WHERE DEPTNO=10;
  145.  
  146. ENAME TRANSLATE(ENAME,'C','P') JOB TRANSLATE(JOB,'AR','IT')
  147. ------------------------------------------------------------------------------------
  148. CLARK PLARK MANAGER MINIGET
  149. KING KING PRESIDENT PTESIDENT
  150. MILLER MILLER CLERK CLETK
  151.  
  152. 13. Înlocuiti în conţinutul JOB şirul 'SALESMAN' cu şirul 'SALESPERSON' şi în conţinutul ENAME şirul 'CO' cu şirul 'PX' (Sintaxă: REPLACE(col/value, string, replacement_string) intoarce col/value cu orice aparitie a 'string-ului', înlocuita cu replacement_string. Daca 'replacement_string' e omis, toate apariţiile lui 'string' sunt șterse)
  153.  
  154. SELECT JOB,REPLACE(JOB,'SALESMAN','SALESPERSON'),ENAME,REPLACE(ENAME,'CO','PX')FROM EMP;
  155.  
  156. JOB REPLACE(JOB,'SALESMAN','SALESPERSON') ENAME REPLACE(ENAME,'CO','PX')
  157. -------------------------------------------------------------------------------------
  158. ANALYST ANALYST SCOTT SPXTT
  159. SALESMAN SALESPERSON TURNER TURNER
  160. SALESMAN SALESPERSON ALLEN ALLEN
  161. MANAGER MANAGER CLARK CLARK
  162.  
  163. Funcția REPLACE suplimentează funcționalitatea furnizata de funcția TRANSLATE. TRANSLATE furnizează caractere singulare , unul câte unul , pentru substituție. REPLACE va permite sa substituiți un sir cu altul ca si sa ștergeți un sir (daca nu specificați 'replacement _string'). Observați ca 'string' si 'replacement_string' pot fi de orice lungime. REPLACE poate sa facă si conversia caracter la caracter REPLACE('C', IP).
  164.  
  165. Funcții imbricate
  166.  
  167. Funcțiile imbricate sunt evaluate din interior spre exterior.
  168.  
  169. 14. Număraţi de câte ori apare litera ‘S’ in conţinutul DNAME. SELECT DNAME,LENGTH(DNAME), TRANSLATE(DNAME,'AS','A'), LENGTH(DNAME)-LENGTH(TRANSLATE(DNAME,'AS','A')) FROM DEPT;
  170.  
  171. DNAME LENGTH(DNAME) TRANSLATE(DNAME,'AS','A') LENGTH(DNAME)-LENGTH(TRANSLATE(DNAME,'AS','A'))
  172. --------------------------------------------------------------------------------------------------
  173. ACCOUNTING 10 ACCOUNTING 0
  174. RESEARCH 8 REEARCH 1
  175. SALES 5 ALE 2
  176. OPERATIONS 10 OPERATION 1
  177.  
  178. Observam ca ‘A’ e înlocuit cu ’A’, in schimb ’S’ nu are un caracter corespunzător cu care sa fie înlocuit. ’S’ e înlocuit cu nimic, adică e șters din sir. Dacă scădem din lungimea inițiala a șirului pe cea din care am scos toate aparițiile lui ’S‘: LENGTH(DNAME)-LENGTH(TRANSLATE(DNAME,'AS','A')) obţinem nr. de apariții ale lui ’S’ in sir.
  179.  
  180. 15. Folosiți REPLACE(DNAME,'S') pentru a șterge fiecare apariție a lui ’S’ din conţinutul DNAME. Valoarea întoarsa de LENGTH(REPLACE(DNAME,'S'))va reprezenta nr. de caractere care au rămas după ce ‘S’ a fost șters.
  181.  
  182. SELECT DNAME, LENGTH(DNAME), REPLACE(DNAME,'S'), LENGTH(REPLACE(DNAME,'S')) FROM DEPT;
  183.  
  184. DNAME LENGTH(DNAME) REPLACE(DNAME,'S') LENGTH(REPLACE(DNAME,'S'))
  185. -------------------------------------------------------------------------------------------
  186. ACCOUNTING 10 ACCOUNTING 10
  187. RESEARCH 8 REEARCH 7
  188. SALES 5 ALE 3
  189. OPERATIONS 10 OPERATION 9
  190.  
  191. 16. Dacă din lungimea conţinutului DNAME - LENGTH(DNAME)- scădem lungimea șirului fără caracterul ‘S’ - LENGTH(REPLACE(DNAME,'S'))(vezi exemplul anterior 15.) - obţinem numărul de apariţii ale literei ‘S’ în conţinutul DNAME.
  192.  
  193. SELECT DNAME,LENGTH(DNAME), LENGTH(DNAME)-LENGTH(REPLACE(DNAME,'S')) FROM DEPT;
  194.  
  195. DNAME LENGTH(DNAME) LENGTH(DNAME)-LENGTH(REPLACE(DNAME,'S'))
  196. ----------------------------------------------------------------------------------
  197. ACCOUTING 10 0
  198. RESEARCH 8 1
  199. SALES 5 2
  200. OPERATIONS 10 1
  201.  
  202. Functii numerice
  203.  
  204. Acestea accepta intrare numerica si intorc ca rezultat un numar.
  205.  
  206. 17. ROUND(col/value,n) rotujeste coloana, expresie sau valoare la n zecimale. Daca n e omis nu are zecimale, daca e negativ , numarul din stinga punctului zecimal e rotunjit.
  207.  
  208. SELECT ROUND(45.923,1), ROUND(45.923),ROUND(45.323,1),ROUND(42.323,-1), ROUND(SAL/32,2)
  209. FROM EMP WHERE DEPTNO =10;
  210.  
  211. ROUND(45.923,1)ROUND(45.923)ROUND(45.323,1)Round(42.323,-1)ROUND(SAL/32,2)
  212. -------------------------------------------------------------------------
  213. 45.9 46 45.3 40 76.56
  214. 45.9 46 45.3 40 156.23
  215. 45.9 46 45.3 40 40.63
  216.  
  217. 18. TRUNC(col/value,n) trunchiaza coloana sau valoarea la n zecimale, sau daca n e omis, fara zecimale. Daca n e negativ, numarul din stinga punctului zecimal e trunchiat la zero.
  218.  
  219. SELECT TRUNC(45.923,1), TRUNC(45.923),TRUNC(45.323,1),TRUNC(42.323,-1), TRUNC(SAL/32,2)
  220. FROM EMP WHERE DEPTNO= 10;
  221.  
  222. TRUNC(45.923,1) TRUNC(45.923) TRUNC(45.323,1) TRUNC(42.323,-1) TRUNC(SAL/32,2)
  223. -----------------------------------------------------------------------------------------
  224. 45.9 45 45.3 40 76.56
  225. 45.9 45 45.3 40 156.25
  226. 45.9 45 45.3 40 40.62
  227.  
  228. 19. CEIL (col/value) gaseste cel mai mic intreg mai mare sau egal cu coloana, expresie sau valoare.
  229.  
  230. SELECT CEIL(SAL),CEIL(99.9),CEIL(101.76),CEIL(-11.1) FROM EMP
  231. WHERE SAL BETWEEN 3000 AND 5000;
  232.  
  233. CEIL(SAL) CEIL(99.9) CEIL(101.26) CEIL(-11.1)
  234. --------------------------------------------------------
  235. 3000 100 102 -11
  236. 5000 100 102 -11
  237. 3000 100 102 -11
  238.  
  239. 20. FLOOR (col/value) gaseste cel mai mare intreg mai mic sau egal cu coloana expresie sau valoare.
  240.  
  241. SELECT FLOOR(SAL),FLOOR(99.9),FLOOR(101.76),FLOOR(-11.1) FROM EMP
  242. WHERE FLOOR(SAL) BETWEEN 3000 AND 5000;
  243.  
  244. FLOOR (SAL) FLOOR(99.9) FLOOR(101.76) FLOOR(-11.1)
  245. -----------------------------------------------------
  246. 3000 99 101 -12
  247. 5000 99 101 -12
  248. 3000 99 101 -12
  249.  
  250. 21. POWER(col/value,n) ridica coloana, expresia sau valoarea la puterea n. Poate fi negativa.
  251.  
  252. SELECT SAL,POWER(SAL,2),POWER(SAL,3),POWER(50,5)FROM EMP WHERE DEPTNO=10;
  253.  
  254. SAL POWER(SAL,2) POWER(SAL,3) POWER(50,5)
  255. --------------------------------------------------------
  256. 2450.00 6002500 14706125000 312500000
  257. 5000.00 25000000 125000000000 312500000
  258. 1300.00 1690000 2197000000 312500000
  259.  
  260. 22. EXP(n) intoarce e (nr lui Euler) ridicat la puterea n
  261.  
  262. SELECT EXP(4) FROM DUAL;
  263.  
  264. EXP(4)
  265. ------
  266. 54.59815
  267. Puteti selecta EXP() din EMP, dar vor fi intoarse 14 linii cu aceeasi EXP(4) , una pentru fiecare linie din tabela EMP. Tabela DUAL e preferata pentru ca e suficienta o singura linie intoarsa.
  268.  
  269. 23. SQRT(col/value) gaseste radacina patrata a coloanei sau valorii. Daca col/value e NULL sau negativ atunci e întors NULL.
  270.  
  271. SELECT SAL, SQRT(SAL),SQRT(40), SQRT(COMM) FROM EMP WHERE COMM>0;
  272.  
  273. SAL SQRT(SAL) SQRT(40) SQRT(COMM)
  274. -----------------------------------------------
  275. 1600.00 40 6.32455532 17.3205081
  276. 1250.00 35.3553391 6.32455532 22.3606798
  277. 1250.00 35.3553391 6.32455532 37.4165739
  278.  
  279. 24. SIGN(col/value) intoarce -1 daca coloana, expresie sau valoare e un nr. negativ, intoarce 0 daca e zero,+1 daca e nr.pozitiv.
  280.  
  281. SELECT SAL-COMM,SIGN(SAL-COMM),COMM-SAL, SIGN(COMM-SAL)FROM EMP WHERE DEPTNO=30;
  282.  
  283. SAL-COMM SIGN(SAL-COMM) COMM-SAL SIGN(COMM-SAL)
  284. -------------------------------------------------------------------
  285. 1300 1 -1300 -1
  286. 750 1 -750 -1
  287. - 150 -1 150 1
  288. 1500 1 -1500 -1
  289.  
  290. 25. Tipăriţi toti angajatii al caror salariu (SAL) este mai mare decit comisionul (COMM) lor.( Frecvent, functia SIGN este folosita pentru a testa daca o valoare este mai mica ca, mai mare ca sau egala cu a doua valoare)
  291.  
  292. SELECT ENAME,SAL,COMM FROM EMP WHERE SIGN(SAL-COMM)=1;
  293.  
  294. ENAME SAL COMM
  295. -----------------------------
  296. ALLEN 1600 300
  297. WARD 1250 500
  298. TURNER 1500 0
  299.  
  300. 25. ABS(col/value) gaseste valoarea absoluta (modulul) coloanei sau valorii.
  301.  
  302. SELECT SAL,COMM,COMM-SAL,ABS(COMM-SAL),ABS(-35)FROM EMP WHERE DEPTNO=30;
  303.  
  304. SAL COMM COMM-SAL ABS(COMM-SAL) ABS(-35)
  305. -------------------------------------------------------------
  306. 1600.00 300.00 -1300 1300 35
  307. 1250.00 500.00 -750 750 35
  308. 1250.00 1400.00 150 150 35
  309. 2850.00 35
  310. 1500.00 00 -1500 1500 35
  311. 950.00 35
  312.  
  313. 26. MOD(value1,value2) gaseste restul impartirii lui 'value1' la 'value2'.
  314.  
  315. SELECT SAL,COMM,MOD(SAL,COMM), MOD(100,40)FROM EMP WHERE DEPTNO=30 ORDER BY COMM;
  316.  
  317. SAL COMM MOD(SAL,COMM) MOD(100,40)
  318. --------------------------------------------------------
  319. 2,850.00 20
  320. 950.00 20
  321. 1,600.00 300.00 100 20
  322. 1,250.00 500.00 250 20
  323. 1,250.00 1,400.00 1250 20
  324. 1,500.00 00 1500 20
  325.  
  326. Exerciţii propuse
  327.  
  328. 1. Listati pentru toti angajatii numele si salariul marit cu 15% si exprimat ca un nr. de dolari.
  329.  
  330. DEPTNO ENAME PCTSAL
  331. ---------------------------
  332. 20 SMITH 920
  333. 30 ALLEN 1840
  334. 30 WARD 1438
  335. 20 JONES 3421
  336. 30 MARTIN 1438
  337. 30 BLAKE 3278
  338. 10 CLARK 2818
  339. 20 SCOTT 3450
  340. 10 KING 5750
  341. 30 TURNER 1725
  342. 20 ADAMS 1265
  343. 30 JAMES 1093
  344. 20 FORD 3450
  345. 10 MILLER 1495
  346.  
  347. 2. Obtineti urmatoarea iesire:
  348.  
  349. EMPLOYEE_AND_JOB
  350. ----------------
  351. SMITH CLERK
  352. ALLEN SALESMAN
  353. WARD SALESMAN
  354. JONES MANAGER
  355. MARTIN SALESMAN
  356. BLAKE MANAGER
  357. CLARK MANAGER
  358. SCOTT ANALYST
  359. KING PRESIDENT
  360. TURNER SALESMAN
  361. ADAMS CLERK
  362. JAMES CLERK
  363. FORD ANALYST
  364. MILLER CLERK
  365.  
  366. 3. Obtineti urmatoarea iesire
  367.  
  368. EMPLOYEE
  369. --------
  370. SMITH(Clerk)
  371. ALLEN(Salesman)
  372. WARD(Salesman)
  373. JONES(Manager)
  374. MARTIN(Salesman)
  375. BLAKE(Manager)
  376. CLARK(Manager)
  377. SCOTT(Analyst)
  378. KING(President)
  379. TURNER(SAlesman)
  380. ADAMS(Clerk)
  381. JAMES(Clerk)
  382. FORD(Analyst)
  383. MILLER(Clerk)
  384.  
  385. 4. Faceti o cautare pentru a obtine o lista a angajatilor cu functia 'job' specificata de utilizator.
  386.  
  387. Enter value for job :clerk
  388.  
  389.  
  390. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  391. -----------------------------------------------------------
  392. 7369 SMITH CLERK 7902 17-DEC-80 1000 20
  393. 7876 ADAMS CLERK 7788 12-JAN-83 1100 20
  394. 7900 JAMES CLERK 7698 03-DEC-81 1092.5 30
  395. 7934 MILLER CLERK 7782 23-JAN-82 1300 10
  396.  
  397. 5. Obtineti urmatoarea iesire:
  398.  
  399. ENAME DEPTNO JOB
  400. ---------------------------------
  401. ALLEN 30 Salesperson
  402. WARD 30 Salesperson
  403. MARTIN 30 Salesperson
  404. BLAKE 30 Manager
  405. TURNER 30 Salesperson
  406. JAMES 30 Clerk
  407.  
  408. SOLUŢII
  409.  
  410. 1. SELECT DEPTNO,ENAME, ROUND(SAL*1.15) PCTSAL FROM EMP;
  411. 2. SELECT RPAD(ENAME,10)||LPAD(JOB,10) EMPLOYEE_AND_JOB FROM EMP;
  412. 3. SELECT ENAME ||'('||initcap(job)||')' EMPLOYEE FROM EMP;
  413. 4. SELECT * FROM EMP WHERE UPPER(JOB)=UPPER('&JOB');
  414. 5. SELECT ENAME,DEPTNO,INITCAP(REPLACE(JOB,'SALESMAN','SALESPERSON')) JOB FROM EMP
  415. WHERE DEPTNO =30;
  416.  
  417. Funcțiile de tip data calendaristică
  418.  
  419. 1. Afişaţi data curenta (Sysdate intoarce data curenta si timpul calculatorului)
  420.  
  421. SELECT SYSDATE FROM SYS.DUAL;
  422.  
  423. Observaţie Puteti selecta usor SYSDATE din EMP, dar 14 linii cu aceeasi SYSDATE vor fi intoarse , una pentru fiecare linie din tabela EMP. DUAL e preferata pentru ca e suficienta o singura linie intoarsa. Tabela DUAL apartine utilizatorului 'SYS' si poate fi accesata de toti utilizatorii. Contine o singura coloana ,DUMMY si o linie cu valoarea 'x'. Tabela DUAL e folositoare cind doriti sa obtineti o singura valoare-de exemplu , valoarea unei constante , pseudo-coloane sau expresii care nu e derivata dintr-o tabela cu data 'user'.
  424.  
  425. 2. Afişaţi conţinutul HIREDATE, HIREDATE+7,HIREDATE-7, nr. de zile de la angajarea fiecărui om (SYSDATE-HIREDATE) pentru HIREDATE conţinând luna iunie.
  426.  
  427. SELECT HIREDATE,HIREDATE+7,HIREDATE-7,SYSDATE-HIREDATE FROM EMP WHERE HIREDATE LIKE '%JUN%';
  428.  
  429. HIREDATE HIREDATE+7 HIREDATE-7 SYSDATE-HIREDATE
  430. -------------------------------------------------------
  431. 13-jun-83 20-jun-83 06-jun-83 1982.70628
  432. 11-jun-84 18-jun-84 04-jun-84 1618.70628
  433. 04-jun-84 11-jun-84 28-may-84 1625.70628
  434. 04-jun-84 11-jun-84 28-may-84 1625.70628
  435.  
  436. 3. Găsiţi nr. de luni intre '01-jan-84' si '05-nov-88'.(Sintaxă: MONTHS_BETWEEN(data1,data2) rezultatul poate fi pozitiv sau negativ. Daca data1 e mai tarzie decat data2,rezultatul e pozitiv, daca data2 este mai tirzie decit data1, rezultatul e negativ)
  437.  
  438. SELECT MONTHS_BETWEEN (SYSDATE,HIREDATE), MONTHS_BETWEEN('01-jan-84','05-nov-88')
  439. FROM EMP WHERE MONTHS_BETWEEN(SYSDATE,HIREDATE)>59;
  440.  
  441. MONTHS_BETWEEN(SYSDATE,HIREDATE) MONTHS_BETWEEN('01-jan-84','05-nov-88')
  442. -------------------------------------------------------------------------------------
  443. 65.0873622 -58.129032
  444. 63 -58.129032
  445. 60.5067171 -58.129032
  446. 59.3454267 -58.129032
  447. 59.3454267 -58.129032
  448. 59.8292977 -58.129032
  449. Observaţie: Partea fracţionară a rezultatului reprezinta o portiune dintr-o luna.
  450.  
  451. 4. ADD_MONTHS(data,n) aduna n numar de luni calendaristice la 'data'. n trebuie sa fie intreg si poate fi si negativ.
  452.  
  453. SELECT HIREDATE,ADD_MONTHS(HIREDATE,3),ADD_MONTHS(HIREDATE,-3) FROM EMP WHERE DEPTNO=20;
  454.  
  455. HIREDATE ADD_MONTHS(HIREDATE,3) ADD_MONTHS(HIREDATE,-3)
  456. ----------------------------------------------------------------
  457. 13-jun-83 13-sep-83 13-mar-83
  458. 31-oct-83 31-jan-84 31-jul-83
  459. 05-mar-84 05-jun-84 05-dec-83
  460. 04-jun-84 04-sep-84 04-mar-84
  461. 05-dec-83 05-mar-84 05-sep-83
  462.  
  463. 5. NEXT_DAY(data1,,char) data urmatoarei zile a saptaminii(char) urmind data1. Char trebuie sa fie un numar reprezentind o zi sau un caracter.
  464.  
  465. SELECT HIREDATE,NEXT_DAY(HIREDATE,'FRIDAY'),NEXT_DAY(HIREDATE,6) FROM EMP
  466. WHERE DEPTNO =10;
  467.  
  468. HIREDATE NEXT_DAY(HIREDATE,'FRIDAY') NEXT_DAY(HIREDATE,6)
  469. ------------------------------------------------------------------
  470. 14-may-84 18-may-84 18-may-84
  471. 09-jul-84 13-jul-84 13-jul-84
  472. 21-nov-83 25-nov-83 25-nov-83
  473.  
  474. 6. LAST_DAY(data1)gaseste data reprezentind ultima zi a lunii care contine data 1.
  475.  
  476. SELECT SYSDATE,LAST_DAY(SYSDATE),HIREDATE,LAST_DAY(HIREDATE),LAST_DAY('15-FEB-88')
  477. FROM EMP WHERE DEPTNO =20;
  478.  
  479. SYSDATE LAST_DAY(SYSDATE) HIREDATE LAST_DAY(HIREDATE) LAST_DAY('15-feb-88')
  480. ----------------------------------------------------------------------------
  481. 04-DEC-89 31-DEC-89 17-DEC-80 31-DEC-80 29-FEB-88
  482. o4-dec-89 31-dec-89 02-apr-81 30-apr-81 29-feb-88
  483. 04-dec-89 31-dec-89 09-dec-82 31-dec-82 29-feb-88
  484. 04-dec-89 31-dec-89 12-jan-83 31-jan-83 29-feb-88
  485. 04-dec-89 31-dec-89 03-dec-81 31-dec-81 29-feb-88
  486.  
  487. 7. Round(data1) intoarce data1 cu timpul setat la 12:00AM(noaptea). Aceasta e folositor cind comparam date care au timpuri diferite.
  488. ROUND (data1,'MONTH') intoarce prima zi a lunii continind data1 daca data1 este in prima parte a lunii, altfel intoarce prima zi a urmatoarei luni. ROUND(data 1,' YEAR') intoarce prima zi a anului continind data1, daca data1 este in prima jumatate a anului, altfel intoarce prima zi a urmatorului an.
  489.  
  490. SELECT SYSDATE,ROUND(SYSDATE,'MONTH'),ROUND(SYSDATE,'YEAR') FROM DUAL;
  491.  
  492. SYSDATE ROUND(SYSDATE,'MONTH') ROUND(SYSDATE,'YEAR')
  493. ----------------------------------------------------------
  494. 04-dec-89 01-dec-89 01-jan-90
  495.  
  496. 8. TRUNC(data1,'char') gaseste prima zi a lunii care e continuta in data1, cind char='MONTH'. Daca char= 'YEAR', gaseste prima zi a anului care contine data1.
  497.  
  498. SELECT SYSDATE,TRUNC(SYSDATE,'MONTH'),TRUNC(SYSDATE,'YEAR') FROM SYS.DUAL;
  499.  
  500. SYSDATE TRUNC(SYSDATE,'MONTH') TRUNC(SYSDATE,'YEAR')
  501. -----------------------------------------------------------
  502. o4-dec-89 01-dec-89 01-jan-89
  503.  
  504. TRUNC e folositor cind vreti sa stergeti timpul dintr-o data. Timpul component al zilei este sters implicit.
  505.  
  506. Functii de conversie
  507.  
  508. TO_NUMBER(char) converteste 'char' care contine un numar in 'NUMBER'.
  509. TO_DATE('char','fmt') converteste valoarea 'char' reprezentind o data calendaristica, intr-o valoare data in felul 'fmt' specificat. Daca fmt e omis , formatul e DD-MON-YY.
  510.  
  511. 9. TO_CHAR(numar/data,{'fmt'}) converteste numar sau data la caractere in format 'fmt'. E folosita frecvent pentru a schimba un format de data de la cel implicat la un format de afisare alternativ. TO_CHAR (data,'date picture') specifica ca data va fi convertita la un nou format de iesire. Pentru a converti date curente de la formatul implicit (DD-MON-YY) la un nou format 'date picture':
  512.  
  513. SELECT TO_CHAR(SYSDATE,'DAY, DDTH MONTH YYYY') FROM DUAL;
  514.  
  515. TO_CHAR (SYSDATE,'DAY,DDTHMONTHYYYY')
  516. -------------------------------------
  517. TUESDAY ,05TH SEPTEMBER 1989
  518.  
  519. 'Date picture', care trebuie incadrate de apostroafe poate contine orice format. DAY si MONTH la iesire sunt automat aduse la lungimea 9 adaugind blancuri. Pentru a sterge blancurile adaugate folositi prefixul FM(FILL MODE).
  520.  
  521. SELECT TO_CHAR (SYSDATE,'fmDAY,ddth Month YYYY') FROM DUAL;
  522.  
  523. TO_CHAR(SYSDATE,'FMDAY,DDTHMONTHYYYY')
  524. --------------------------------------
  525. Tuesday , 5th September 1989
  526.  
  527. FM poate fi folosit pentru a sterge zerourile de la inceput din formatul ddth ex:05TH este schimbat in 5th. Cazul in care 'date picture' este introdusa este cazul in care va fi afisata.
  528.  
  529. TO_CHAR poate fi deasemenea folosita pentru extragerea timpului din zi , si afisarea lui intr-un format specificat.
  530.  
  531. 10. Afişaţi timpul dintr-o zi:
  532.  
  533. SELECT TO_CHAR(SYSDATE,'HH:MI:SS') FROM DUAL;
  534.  
  535. TO_CHAR(SYSDATE,'HH:MI:SS')
  536. ---------------------------
  537. 08:16:24
  538.  
  539. 11. Folosiţi functia TO_CHAR pentru conversia unei valori de tip data numerica la o valoare de tip data caracter.
  540. (Sintaxă: TO_CHAR(numar,'number picture'))
  541.  
  542. SELECT TO_CHAR (SAL,'$9,999') FROM EMP;
  543.  
  544. TO_CHAR(SAL,'$9,999')
  545. --------------------
  546. $1,000
  547. $1,600
  548. $1,250
  549. $2,975
  550.  
  551. Observati ca formatul este optional. Daca'date picture' e omis, data este convertita la o valoare de tip caracter in format Oracle, implicit DD-MON-YY. Daca 'number picture ' nu e specificat, numarul e convertit intr-o valoare de tip caracter. Observati de asemenea ca formatele nu afecteaza actuala reprezentare interna a valorii coloanei.Ele afecteaza doar cum valoarea coloanei este afisata cind e regasita cu o constructie SELECT.
  552.  
  553. 12. Folosiţi TO_NUMBER pentru a transforma un numar memorat sub forma unui caracter intr-un tip numar.
  554.  
  555. SELECT EMPNO, ENAME,JOB,SAL FROM EMP WHERE SAL>TO_NUMBER('1500');
  556.  
  557. 13. Afisaţi toti angajatii cu data angajarii 4 iulie 1984, folosind functia TO_DATE:
  558.  
  559. SELECT EMPNO,ENAME, HIREDATE FROM EMP
  560. WHERE HIREDATE =TO_DATE('June 4,1984','Month dd, YYYY');
  561.  
  562. EMPNO ENAME HIREDATE
  563. ------------------------
  564. 7844 TURNER 04-jun-84
  565.  
  566. Constanta e convertita intr-o data si apoi comparata cu valoarea HIREDATE.
  567.  
  568. 14. Functia TO_DATE e frecvent folosita pentru a transforma o valoare in ORACLE intr-un format diferit de cel implicit. De exemplu , cind inserati o data , Oracle asteapta o data in formatul implicit DD_MON_YY. Daca nu vreti sa folositi formatul implicit , trebuie sa folositi functia TO_DATE si masca formatului dorit. De exemplu, pentru a introduce in tabela EMP - o linie cu un format nestandard:
  569.  
  570. INSERT INTO EMP(EMPNO,DEPTNO,HIREDATE)VALUES(777,,20,TO_DATE('19/08/90','DD/MM/YY'));
  571.  
  572. Functii care accepta orice tip de data la intrare
  573.  
  574. DECODE este cea mai puternica functie SQL. Ea faciliteaza interogarile, facind munca unui 'case' sau a unei constructii 'if-then-else'. Sintaxă:
  575. DECODE (col/expression,
  576. search1,rezult1,[search2,rezult2,....,] default)
  577.  
  578. Col/expression e comparata cu fiecare valoare'search'si intoarce 'rezult' daca col/expression este egal cu valoarea 'search'. Daca nu e gasita nici o egalitate, functia DECODE intoarce valoarea 'default'.Daca valoarea'default' e omisa, NULL e intors pentru cazurile de nepotrivire. DECODE trebuie sa aiba minim 4 parametrii ca argumente.
  579. 1. COL/EXPRESSION numele coloanei sau expresie pentru a fi evaluate (pot fi orice tip de data)
  580. 2. SEARCH1 prima valoare pentru testare (poate fi acelasi tip ca expression /col)
  581. 3. RESULT1 valoarea intoarsa daca se potriveste cu SEARCH1.
  582. 4. SEARCH1 si RESULT1 pot fi repetate de cite ori e necesar-[SEARCH2, RESULT2,...]
  583. DEFAULT valoarea pentru a fi reintoarsa daca nu exista nici o potrivire.
  584. Valoarea intoarsa este fortata la acelasi tip ca al treilea argument (result1)
  585.  
  586. 15. Decodificaţi tipurile de angajat ale coloanei JOB: 'CLERK 'si' MANAGER'; celelalte tipuri de angajat nu sunt testate, acestea devin implicite pentru UNDEFINED.
  587.  
  588. SELECT ENAME,JOB,DECODE(JOB,'CLERK','WORKER','MANAGER','BOSS','UNDEFINED') DECODED_JOB
  589. FROM EMP;
  590.  
  591. ENAME JOB DECODED_JOB
  592. -------------------------------
  593. SMITH CLERK WORKER
  594. ALLEN SALESMAN UNDEFINED
  595. WARD SALESMAN UNDEFINED
  596. JONES MANAGER BOSS
  597. MARTIN SALESMAN UNDEFINED
  598. BLAKE MANAGER BOSS
  599. CLARK MANAGER BOSS
  600. SCOTT ANALYST UNDEFINED
  601. KING PRESIDENT UNDEFINED
  602. TURNER SALESMAN UNDEFINED
  603. ADAMS CLERK WORKER
  604. JAMES CLERK WORKER
  605. FORD ANALYST UNDEFINED
  606. MILLER CLERK WORKER
  607.  
  608. 16. Afisati procentajele in functie de coloane GRADE din tabela SALGRADE:
  609.  
  610. SELECT GRADE, DECODE(GRADE,'1','15%', '2','10%','3','8%','5%')BONUS FROM SALGRADE;
  611.  
  612. GRADE BONUS
  613. ---------------
  614. 1 15%
  615. 2 10%
  616. 3 8%
  617. 4 5%
  618. 5 5%
  619.  
  620. Acest exemplu ilustreaza ca valoarea intoarsa e fortata la tipul celui de al treilea argument, la folosirea functiei DECODE. Specificati ordinea in care informatia e afisata introducind o valoare la fiecare rulare:
  621.  
  622. SELECT * FROM EMP ORDER BY DECODE (&ORDERBY,1,SAL,2,ENAME, SAL);
  623.  
  624. Enter value for orderby:2
  625. order by decode (2,1,sal,2,ename,sal)
  626. *
  627. ERROR at line 2:ORA -1722: invalid number
  628.  
  629. Observati ca aceata comanda produce o eroare fiindca tipul lui 'ename'(char) difera de cel al lui 'sal'(numar) care e al treilea argument.
  630.  
  631. 17. Introduceti salariul crescut in functie de meseria fiecarui angajat.
  632.  
  633. SELECT JOB,SAL,DECODE(JOB,'ANALYST',SAL*1.1,'CLERK',SAL*1.15,'MANAGER',SAL*0.95, SAL)
  634. DECODED_SALARY FROM EMP;
  635.  
  636. JOB SAL DECODED_SALARY
  637. --------------------------------
  638. CLERK 800 920
  639. SALESMAN 1,600 1600
  640. SALESMAN 1,250 1250
  641. MANAGER 2,975 2826.25
  642. SALESMAN 1,250 1250
  643. MANAGER 2,850 2707.5
  644. MANAGER 2,450 2327.5
  645. ANALYST 3,000 3300
  646. PRESIDENT5,000 5000
  647. SALESMAN 1,500 1500
  648. CLERK 1,100 1265
  649. CLERK 950 1092.5
  650. ANALYST 3,000 3300
  651. CLERK 1,300 1495
  652.  
  653. 18. NVL(col/value,val) converteste o valoare NULL la 'val' Tipul datei trebuie sa se potriveasca cu (col/value si val).
  654.  
  655. SELECT SAL*12+NVL(COMM,0),NVL(COMM,1000),SAL*12+NVL(COMM,1000) FROM EMP WHERE DEPTNO=10;
  656.  
  657. SAL*12+NVL(COMM,0) NVL(COMM,1000) SAL*12+NVL(COMM,1000)
  658. ----------------------------------------------------------
  659. 29400 1000 30400
  660. 60000 1000 61000
  661. 15600 1000 16600
  662.  
  663. 19. GREATEST(col(value1,col/value2....) -intoarce cel mai mare dintr-o lista de valori.Toate 'col/value2' sint convertite la tipul col/value1 inaintea comparatiei.
  664.  
  665. SELECT GREATEST(1000,2000),GREATEST(SAL,COM)FROM EMP WHERE DEPTNO=30;
  666.  
  667. GREATEST(1000,2000) GREATEST(SAL,COMM)
  668. -------------------------------------------
  669. 2000 1600
  670. 2000 1250
  671. 2000 1400
  672. 2000
  673. 2000 1500
  674. 2000
  675.  
  676. 20. LEAST(col/value1,col/value2....) intoace cea mai mica valoare. Toate col/value 2 sint convertite la tipul col/value1 inainte de comparatie.
  677.  
  678. SELECT LEAST(1000,2000),LEAST(SAL,COMM)
  679. FROM EMP
  680. WHERE DEPTNO=30;
  681.  
  682. LEAST(1000,2000) LEAST(SAL,COMM)
  683. ---------------------------------
  684. 1000 300
  685. 1000 500
  686. 1000 1250
  687. 1000
  688. 1000 0
  689. 1000
  690.  
  691. 21. VSIZE(col/value) - intoarce nr.de biti din reprezentarea interna ORACLE a lui col/value'.
  692.  
  693. SELECT DEPTNO,VSIZE(DEPTNO),VSIZE(HIREDATE),VSIZE(SAL), VSIZE(ENAME)
  694. FROM EMP WHERE DEPTNO=10;
  695.  
  696. DEPTNO VSIZE(DEPTNO) VSIZE(HIREDATE) VSIZE(SAL) VSIZE(ENAME)
  697. ---------------------------------------------------------
  698. 10 2 7 3 5
  699. 10 2 7 2 4
  700. 10 2 7 2 6
  701.  
  702. FUNCTII IMBRICATE REVIZITATE
  703.  
  704. Functiile pot fi imbricate la orice nivel si functiile interioare sunt evaluate intii mergind pina la functia cea mai exterioara. Este bine sa se tina nr. de paranteze de inceput (deschidere) si de sfirsit(inchidere).Trebuie sa fie acelasi numar din fiecare tip de paranteze.
  705.  
  706. 22. Functiile de mai jos sint imbricate si sint evaluate dupa cum urmeaza.
  707.  
  708. SELECT ENAME,NVL(TO_CHAR(MGR),'UNMANAGEABLE') FROM EMP WHERE MGR IS NULL;
  709.  
  710. ENAME NVL(TO_CHAR(MGR),'UNMANAGEABLE')
  711. -----------------------------------------------
  712. KING UNMANAGEABLE
  713.  
  714. Coloana MGR e convertita la caracter cu functia TO_CHAR. Functia NVL inlocuieste NULL mgr cu un sir de caractere 'UNMANAGEABLE'.
  715.  
  716. 23. Functiile imbricate pot fi de asemenea folosite pentru a afisa date de vineri , la doua luni de azi in formatul Day dd Month YYYY.
  717.  
  718. SELECT SYSDATE,TO_CHAR(NEXT_DAY(ADD_MONTHS(SYSDATE,2),'FRIDAY'),'Day dd Month YYYY')
  719. FROM DUAL;
  720.  
  721. SYSDATE TO_CHAR(NEXT_DAY(ADD_MONTHS(SYSDATE,2),'FRIDAY'),'DAYDDMONTHYYYY')
  722. -------------------------------------------------------------------------
  723. 04-dec-89 Friday 09 Februarie 1990
  724.  
  725. Functia ADD_MONTHS aduna 2 luni la luna curenta(decembrie). Functia NEXT_DAY gaseste vineri la 2 luni de SYSDATE
  726. Functia TO_CHAR converteste coloana data la tipul CHAR pentru afisarea in formatul Day dd Month YYYY
  727.  
  728. Exercitii propuse
  729.  
  730. 1. Afisati pt.fiecare angajat din departamentul 20 numele si data angajarii. Fiti siguri ca specificati aliasul 'DATE_HIRED' dupa expresia voastra altfel coloana respectiva va fi pierduta. Se foloseste o lungime de 80 de caractere care este lungimea implicita pentru coloane de caracter.
  731.  
  732. ENAME DATE_HIRED
  733. ---------------------------
  734. SMITH June,Thirteenth 1983
  735. JONES October,Thirty-First 1983
  736. SCOTT March,Fifth 1984
  737. ADAMS June,Fourth 1984
  738. FORD December,Fifth 1983
  739. 2.Afisati pt.fiecare angajat numele, data angajarii si adaugati un an la data angajarii pt.fiecare. Ordonati iesirea in ordinea crescatoare a datei angajarii la care s-a adaugat un an.
  740.  
  741. ENAME HIREDATE REVIEW
  742. ---------------------------
  743. SMITH 13-jun-83 13-jun-84
  744. ALLEN 15-aug-83 15-aug-84
  745. JONES 31-oct-83 31-oct-84
  746. MILLER 21-nov-83 21-nov-84
  747. MARTIN 05-dec-83 05-dec-84
  748. FORD 05-dec-83 05-dec-84
  749. SCOTT 05-mar-84 05-mar-85
  750. WARD 26-mar-84 26-mar-85
  751. CLARK 14-may-84 14-may-85
  752. TURNER 04-jun-84 04-jun-85
  753. ADAMS 04-jun-84 04-jun-85
  754. BLAKE 11-jun-84 11-jun-85
  755. KING 09-jun-84 09-jun-85
  756. JAMES 23-jun-84 23-jun-85
  757.  
  758. 3.Afisati lista angajatilor , pentru fiecare afisind salariul daca acesta e mai mare ca 1500, daca e egal cu 1500 afiseaza 'On Target', daca e mai mic decit 155, afiseaza 'BELOW 1500'.
  759.  
  760. ENAME SALARY
  761. ------------------
  762. ADAMS Below 1500
  763. ALLEN 1600
  764. BLAKE 2850
  765. CLARK 2450
  766. FORD 3000
  767. JAMES Below 1500
  768. JONES 2975
  769. KING 5000
  770. MARTIN Below 1500
  771. MILLER Below 1500
  772. SCOTT 3000
  773. SMITH Below 1500
  774. TURNER On Target
  775. WARD Below 1500
  776.  
  777. 4. Scrieti o cerere care intoarce ziua din saptamina (ex:MONDAY), pt. fiecare data introdusa in formatul DD.MM.YY.
  778.  
  779. Enter value for anydate:12.11.88
  780.  
  781. DAY
  782. ------------------------
  783. SATURDAY
  784.  
  785. 5. Scrieti o cerere pt. a determina cit timp au fost angajati ai companiei .Folositi DEFINE pentru a evita repetarea tipului functiilor.
  786.  
  787. Enter value for employee_name:king
  788.  
  789.  
  790. ENAME LENGTH OF SERVICE
  791. -------------------------------
  792. KING 4 YEARS 4 MONTHS
  793.  
  794. 6. Dindu-se un sir in formatul 'nn/nn', verificati daca primele si ultimele 2 caractere sunt numere si daca caracterul din mijloc este '/'. Afisati expresia 'Yes' daca e asa , sau 'No' altfel. Folositi urmatoarele valori pentru a testa solutia voastra: '12/34',01/la','99/88'
  795.  
  796. VALUE VALID?
  797. -----------
  798. 12/34 YES
  799.  
  800. 7. Angajatii pe 15 ale fiecarei luni sau inainte sint platiti in ultima vineri a acelei luni . Cei angajati dupa data de 15 sunt platiti in ultima vineri a urmatoarei luni. Afisati o lista a angajatilor , cu data de angajare si prima data de plata. Sortati in functie de data angajarii.
  801.  
  802. ENAME HIREDATE PAYDAY
  803. ---------------------------
  804. SMITH 13-jun-83 24-jun-83
  805. ALLEN 15-aug-83 26-aug-83
  806. JONES 31-oct-83 25-nov-83
  807. MILLER 21-nov-83 30-dec-83
  808. MARTIN 05-dec-83 30-dec-83
  809. FORD 05-dec-83 30-dec-83
  810. SCOTT 05-mar-84 30-mar-84
  811. WARD 26-mar-84 27-apr-84
  812. CLARK 14-may-84 25-may-84
  813. TURNER 04-jun-84 29-jun-84
  814. ADAMS 04-jun-84 29-jun-84
  815. BLAKE 11-jun-84 29-jun-84
  816. KING 09-jul-84 27-jul-84
  817. JAMES 23-jul-84 31-aug-84
  818.  
  819. Soluții
  820.  
  821. 1. SELECT ENAME, TO_CHAR(HIREDATE,'fmMonth,Ddspth YYYY')date_hired FROM EMP
  822. WHERE DEPTNO=20;
  823.  
  824. 2. SELECT ENAME,HIREDATE,ADD_MONTHS(HIREDATE,12) REVIEW
  825. FROM EMP ORDER BY ADD_MONTHS(hiredate,12);
  826.  
  827. 3.SELECT ENAME, DECODE(SIGN(1500-SAL),1,'BELOW 1500',0,'On Target',SAL)SALARY
  828. FROM EMP ORDER BY ENAME;
  829.  
  830. 4. SELECT TO-CHAR(TO_DATE('&ANYDATE','DD.MM.YY'),'DAY') DAY FROM DUAL;
  831.  
  832. 5. DEFINE TIME=MONTHS_BETWEEN(SYSDATE,HIREDATE)
  833. SELECT ENAME,FLOOR(&TIME/12)||'YEARS'||FLOOR(MOD(&TIME,12))||
  834. 'MONTHS' "LENGTH OF SERVICE"
  835. FROM EMP
  836. WHERE ENAME=UPPER('&EMPLOYEE_NAME');
  837.  
  838. 6. SELECT '12/34' VALUE DECODE(TRANSLATE('12/34','1234567890','9999999999'),
  839. '99/99','YES',NO') "VALID?" FROM DUAL;
  840.  
  841. 7. SELECT ENAME,HIREDATE, DECODE(SIGN(TO_CHAR(HIREDATE,'DD')-15
  842. 1,NEXT-DAY(LAST-DAY(ADD_MONTHS(HIREDATE,1)),'FRIDAY')-7,
  843. NEXT-DAY(LAST_DAY(HIREDATE),'FRIDAY')-7)PAYDAY
  844. FROM EMP ORDER BY HIREDATE;
  845.  
  846. sau
  847.  
  848. SELECT ENAME,HIREDATE, NEXT_DAY(LAST_DAY(ROUND(HIREDATE,'MONTH'))-7
  849. 'FRIDAY') PAYDAY FROM EMP ORDER BY HIREDATE;
  850.  
  851.  
  852.  
  853.  
  854. APLICATII LABORATOR 2
  855. : Introducere in SQL
  856.  
  857. Comanda SELECT
  858. Pentru a lista toate numerele departamentelor,numele angajatilor sinumarul managerilor in tabela EMP introduceti urmatoarele:
  859.  
  860. SELECT DEPTNO,ENAME,MGR
  861. FROM EMP;
  862.  
  863. DEPTNO ENAME MGR
  864. ------ ---------- -----
  865. 20 SMITH 7902
  866. 30 ALLEN 7698
  867. 30 WARD 7698
  868. 20 JONES 7839
  869. 30 MARTIN 7698
  870. 30 BLAKE 7839
  871. 10 CLARK 7839
  872. 20 SCOTT 7566
  873. 10 KING
  874. 30 TURNER 7698
  875. 20 ADAMS 7788
  876. 30 JAMES 7698
  877. 20 FORD 7566
  878. 10 MILLER 7782
  879.  
  880. De remarcat ca numele coloanelor sunt separate prin spatiu.
  881. Este posibil sa selectam toate coloanele din tabela prin specificarea
  882. unui asterix ('*') dupa cuvantul SELECT .
  883.  
  884. SELECT *
  885. FROM EMP;
  886.  
  887. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  888. ----- ------- ------- ---- --------- --------- ------- ------
  889. 7369 SMITH CLERK 7902 13-JUL-83 800.00 20
  890. 7499 ALLEN SALESMAN 7698 15-AUG-83 1,600.00 300.00 30
  891. 7521 WARD SALESMAN 7698 26-MAR-84 1,250.00 500.00 30
  892. 7566 JONES MANAGER 7839 31-OCT-83 2,975.00 20
  893. 7654 MARTIN SALESMAN 7698 05-DEC-83 1,250.00 1.400.00 30
  894. 7698 BLAKE MANAGER 7839 11-JUN-84 2,850.00 30
  895. 7782 CLARK MANAGER 7839 14-MAY-84 2,450.00 10
  896. 7788 SCOTT ANALYST 7566 05-MAR-84 3,000.00 20
  897. 7839 KING PRESIDENT 09-JUL-84 5,000.00 10
  898. 7844 TURNER SALESMAN 7698 04-JUN-84 1,500.00 .00 30
  899. 7876 ADAMS CLERK 7788 04-JUN-84 1,100.00 20
  900. 7900 JAMES CLERK 7698 23-JUL-84 950.00 30
  901. 7902 FORD ANALYST 7566 05-DEC-83 3,000.00 20
  902. Alte elemente in clauza SELECT
  903. Este posibil sa se includa si alte elemente in clauza SELECT.
  904. Expresii aritmetice
  905. Alias-uri de coloane
  906. Coloane concatenate
  907. Literali
  908. Toate aceste optiuni ajuta utilizatorul sa ceara date si sa le manipuleze in functie de scopurile interogarii ; de exemplu,executia calculelor,legarea coloanelor impreuna,sau afisarea sirurilor de litere din text.
  909. Expresii aritmetice
  910. O expresie este o combinatie de una sau mai multe valori,operatori si functii care sa evalueaza la o valoare. Expresiile aritmetice pot contine nume de coloane ,valori numerice constante si operatori aritmetici:
  911. Operatori Descriere
  912. --------- ---------
  913. + adunare
  914. - scadere
  915. * inmultire
  916. / impartire
  917.  
  918. SELECT ENAME, SAL*12, COMM
  919. FROM EMP;
  920. Daca expresia aritmetica contine mai mult decat un operator, prioritatile sunt *,/,la inceput,apoi +,- (de la stanga la dreapta pentru operatorii de aceeasi prioritate).
  921. In urmatorul exemplu,inmultirea (250*12) este evaluata prima;apoi valoarea salariului este adunata la rezultatul multiplicarii(3000). Astfel pentru randul lui SMITH avem :800+3000=3800.
  922.  
  923. SELECT ENAME,SAL + 250 * 12
  924. FROM EMP;
  925.  
  926. Parantezele pot fi utilizate påntru specificarea ordinii de executie a operatorilor ,daca,de exemplu ,adunarea e dorita inainte de inmultire:
  927. SELECT ENAME,(SAL + 250) * 12
  928. FROM EMP;
  929. Aliasuri de coloana
  930. Cand se afiseaza rezultatul unei interogari,SQL*Plus in mod normal utilizeaza numele coloanelor selectate ca titlu.In multe cazuri acest nume poate fi criptic sau fara inteles.
  931. Puteti schimba un titlu de coloana utilizand un 'ALIAS'.
  932. Un alias de coloana da unei coloane un nume de titlu alternativ la iesire.
  933. Specificati aliasul dupa coloana in lista selectata.Prin default, titlurile alias vor fi fortate la litere mari si nu pot contine blankuri,numai daca aliasul este inclus intre ghilimele(" ").
  934. Pentru a afisa titlul de coloana ANNSAL pentru salariul anual insemnand SAL*12,utilizati un alias de coloana:
  935. SELECT ENAME,SAL*12 ANNSAL,COMM
  936. FROM EMP;
  937. Odata definit ,un alias poate fi utilizat de comenzile SQL care sunt tratate in capitolele 10 si 11.
  938. Nota: Intr-o declaratie SQL ,un alis de coloana poate fi utilizat numai in clauza SELECT.
  939. Operatorul de concatenare
  940. Operatorul de concatenare (||) permite coloanelor sa fie legate cu alte coloane,expresiilor aritmetice sau valorilor constante sa creeze o expresie de caractere.
  941. Coloanele din cealalta parte a operatorului sunt combinate pentru a obtine o singura coloana.
  942. Pentru a combina EMPNO si ENAME si sa se dea aliasul EMPLOYEE expresiei, introduceti:
  943. SELECT EMPNO||ENAME EMPLOYEE
  944. FROM EMP;
  945. EMPLOYEE
  946. -------------------------------------------------------
  947. 7369SMITH
  948. 7499ALLEN
  949. 7521WARD
  950. 7566JONES
  951. 7654MARTIN
  952. 7698BLAKE
  953. 7782CLARK
  954. 7788SCOTT
  955. 7839KING
  956. 7844TURNER
  957. 7876ADAMS
  958. 7900JAMES
  959. 7902FORD
  960. 7934MILLER
  961. Literali
  962. Un literal este orice caracter ,expresie ,numar inclus in lista lui SELECT care nu este un nume de coloana sau un alias de coloana.
  963. Un literal in lista lui SELECT este reprezentat de fiecare rand returnat la iesire.Sirurile de literali dintr-un text cu un format oarecare pot fi incluse in rezultatul interogarii si sunt tratate ca o coloana lista selectata.
  964. Literalii de tip data calendaristica si caracter pot fi inchisi intre ghilimele simple(');literlalii de tip numar nu au nevoie de ghilimele simple(').
  965. Urmatoarea declaratie contine literali selectati prin concatenare si printr-un alias de coloana:
  966. SELECT EMPNO||'-'||ENAME EMPLOYEE,
  967. 'WORKS IN DEPARTMENT',
  968. DEPTNO
  969. FROM EMP;
  970.  
  971.  
  972. EMPLOYEE 'WORKS IN DEPARTMENT' DEPTNO
  973. ------------------ -------------------- ------
  974. 7369-SMITH WORKS IN DEPARTMENT 20
  975. 7499-ALLEN WORKS IN DEPARTMENT 30
  976. 7521-WARD WORKS IN DEPARTMENT 30
  977. 7566-JONES WORKS IN DEPARTMENT 20
  978. 7654-MARTIN WORKS IN DEPARTMENT 30
  979. 7698-BLAKE WORKS IN DEPARTMENT 30
  980. 7782-CLARK WORKS IN DEPARTMENT 10
  981. 7788-SCOTT WORKS IN DEPARTMENT 20
  982. 7839-KING WORKS IN DEPARTMENT 10
  983. 7844-TURNER WORKS IN DEPARTMENT 30
  984. 7876-ADAMS WORKS IN DEPARTMENT 20
  985. 7900-JAMES WORKS IN DEPARTMENT 30
  986. 7902-FORD WORKS IN DEPARTMENT 20
  987. 7934-MILLER WORKS IN DEPARTMENT 10
  988.  
  989. Tratarea valorilor nule
  990. Daca unui rand ii lipseste o valoare pentru o anumita coloana ,despre acea valoare se spune ca este nula.
  991. O valoare nula este o valoare care este sau incorecta,sau necunoscuta,sau inaplicabila.O valoare nula nu este la fel ca 'zero'.Zero este un numar.Valoarea nula ocupa un octet in reprezentarea interna.
  992. Valoarea nula este tratata corect de catre SQL.
  993. Daca orice valoare de coloana intr-o expresie este nula atunci rezultatul este nul.In urmatoarea declaratie numai Salesman are un rezultat al salariului:
  994. SELECT ENAME,SAL*12 + COMM ANNUAL_SAL
  995. FROM EMP;
  996.  
  997. ENAME ANNUAL_SAL
  998. --------- ----------
  999. SMITH
  1000. ALLEN 19500
  1001. WARD 15500
  1002. JONES
  1003. MARTIN 16400
  1004. BLAKE
  1005. CLARK
  1006. SCOTT
  1007. KING
  1008. TURNER 18000
  1009. ADAMS
  1010. JAMES
  1011. FORD
  1012. MILLER
  1013. Daca dorim sa obtinem un rezultat pentru toti angajatii,este necesar sa convertim valoarea nula la un numar . Noi folosim functia NVL pentru a converti o valoare nula la o valoare nenula.
  1014. Folositi functia NVL pentru a converti valoarea nula de la declaratia precedenta la 0.
  1015. SELECT ENAME, SAL*12+NVL(COMM,0) ANNUAL_SAL
  1016. FROM EMP;
  1017.  
  1018. ENAME ANNUAL_SAL
  1019. --------- ----------
  1020. SMITH 9600
  1021. ALLEN 19500
  1022. WARD 15500
  1023. JONES 35700
  1024. MARTIN 16400
  1025. BLAKE 34200
  1026. CLARK 29400
  1027. SCOTT 36000
  1028. KING 60000
  1029. TURNER 18000
  1030. ADAMS 13200
  1031. JAMES 11400
  1032. FORD 36000
  1033. MILLER 15600
  1034. NVL asteapta doua argumente:
  1035. 1. o expresie
  1036. 2. o valoare nenula
  1037. De notat ca puteti folosi functia NVL pentru a converti un numar nul , data calendaristica sau sir de caractere la un alt numar , data calendaristica sau sir de caractere de acceasi lungime si de acelasi tip de date asteptate.
  1038.  
  1039. NVL(DATECOLUMN,'01-JAN-88')
  1040.  
  1041. NVL(NUMBERCOLUMN,9)
  1042.  
  1043. NVL(CHARCOLUMN,'STRING')
  1044. Prevenirea selectiei rindurilor duplicate
  1045. Daca nu se indica altfel, SQL*Plus afiseaza rezultatul unei interogari fara eliminarea intrarilor duplicate .
  1046. Pentru a lista toate numerele de departament din tabela EMP, introduceti:
  1047.  
  1048. SELECT DEPTNO
  1049. FROM EMP;
  1050.  
  1051.  
  1052. DEPTNO
  1053. ------
  1054. 20
  1055. 30
  1056. 30
  1057. 20
  1058. 30
  1059. 30
  1060. 10
  1061. 20
  1062. 10
  1063. 30
  1064. 20
  1065. 30
  1066. 20
  1067. 10
  1068.  
  1069. Clauza DISTINCT
  1070. Pentru eliminarea valorilor duplicate din rezultat, includeti restrictia DISTINCT in comanda SELECT. Pentru a elimina valorile duplicate afisate in exemplul urmator introduceti:
  1071.  
  1072. SELECT DISTINCT DEPTNO
  1073. FROM EMP;
  1074.  
  1075. DEPTNO
  1076. ------
  1077. 10
  1078. 20
  1079. 30
  1080. Coloane multiple pot fi specificate dupa restrictia DISTINCT si restrictia DISTINCt afecteaza toate coloanele selectate. Pentru a afisa valorile distincte ale lui DEPTNO si JOB,introduceti:
  1081. SELECT DISTINCT DEPTNO,JOB
  1082. FROM EMP;
  1083.  
  1084. DEPTNO JOB
  1085. ------ ---------
  1086. 10 CLERK
  1087. 10 MANAGER
  1088. 10 PRESIDENT
  1089. 20 ANALYST
  1090. 20 CLERK
  1091. 20 MANAGER
  1092. 30 CLERK
  1093. 30 MANAGER
  1094. 30 SALESMAN
  1095.  
  1096. Aceasta afiseaza o lista a tuturor combinatiilor diferite de ocupatie si numere de departamente.
  1097. De notat ca restrictia DISTINCT poate sa fie referita numai o singura data si trebuie sa urmeze imediat dupa cuvantul de comanda SELECT.
  1098. Clauza ORDER BY
  1099. In mod normal ordinea rindurilor intoarse in rezultatul unei cereri este nedefinita .Clauza ORDER BY poate fi utilizata pentru a sorta rindurile.
  1100. Daca o folosim, clauza ORDEY BY trebuie sa fie intotdeauna ultima in declaratia SELECT.
  1101. Pentru a sorta dupa ENAME, introduceti:
  1102. SELECT ENAME,JOB,SAL*12,DEPTNO
  1103. FROM EMP
  1104. ORDER BY ENAME;
  1105.  
  1106. ENAME JOB SAL*12 DEPTNO
  1107. --------- ------- -------- ------
  1108. ADAMS CLERK 13200 20
  1109. ALLEN SALESMAN 19200 30
  1110. BLAKE MANAGER 34200 30
  1111. CLARK MANAGER 29400 10
  1112. FORD ANALYST 36000 20
  1113. JAMES CLERK 11400 30
  1114. JONES MANAGER 35700 20
  1115. KING PRESIDENT 60000 10
  1116. MARTIN SALESMAN 15000 30
  1117. MILLER CLERK 15600 10
  1118. SCOTT ANALYST 36000 20
  1119. SMITH CLERK 9600 20
  1120. TURNER SALESMAN 18000 30
  1121. WARD SALESMAN 15000 30
  1122.  
  1123. Ordonarea de default a datelor
  1124. Ordinea sortarii de default este ascendenta:
  1125. Valorile numerice cele mai mici primele
  1126. Valorile de tip date calendaristice cele mai mici primele.
  1127. Valorile de tip caracter in ordinea alfabetica.
  1128. Inversarea ordinii de default
  1129. Pentru a inversa aceasta ordine cuvintul de comanda DESC este specificat dupa numele coloanei in clauza ORDER BY.
  1130. Pentru a inversa ordinea coloanei HIREDATE, deci datele cele mai tirzii sa fie afisate primele,introduceti:
  1131. SELECT ENAME,JOB,HIREDATE
  1132. FROM EMP
  1133. ORDER BY HIREDATE DESC;
  1134.  
  1135.  
  1136. ENAME JOB HIREDATE
  1137. --------- --------- ---------
  1138. JAMES CLERK 23-JUL-84
  1139. KING PRESIDENT 09-JUL-84
  1140. BLAKE MANAGER 11-JUN-84
  1141. TURNER SALESMAN 04-JUN-84
  1142. ADAMS CLERK 04-JUN-84
  1143. CLARK MANAGER 14-MAY-84
  1144. WARD SALESMAN 26-MAR-84
  1145. SCOTT ANALYST 05-MAR-84
  1146. MARTIN SALESMAN 05-DEC-83
  1147. FORD ANALYST 05-DEC-83
  1148. MILLER CLERK 21-NOV-83
  1149. JONES MANAGER 31-OCT-83
  1150. ALLEN SALESMAN 15-AUG-83
  1151. SMITH CLERK 13-JUN-83
  1152.  
  1153. Ordonarea dupa mai multe coloane
  1154. Este posibil sa se ordoneze dupa mai multe coloane.Limita este numarul de coloane din tabela.In clauza ORDER BY se specifica coloanele pentru ordonat separate prin virgula.Daca una sau toate coloanele trebuie sa fie inversate specificati DESC dupa fiecare coloana.
  1155. Pentru a ordona dupa doua coloane si afisa in ordinea inversa a salariului, introduceti:
  1156. SELECT DEPTNO,JOB,ENAME
  1157. FROM EMP
  1158. ORDER BY DEPTNO,SAL DESC;
  1159.  
  1160. DEPTNO JOB ENAME
  1161. ------ ------------ -------
  1162. 10 PRESIDENT KING
  1163. 10 MANAGER CLARK
  1164. 10 CLERK MILLER
  1165. 20 ANALYST SCOTT
  1166. 20 ANALYST FORD
  1167. 20 MANAGER JONES
  1168. 20 CLERK ADAMS
  1169. 20 CLERK SMITH
  1170. 30 MANAGER BLAKE
  1171. 30 SALESMAN ALLEN
  1172. 30 SALESMAN TURNER
  1173. 30 SALESMAN WARD
  1174. 30 SALESMAN MARTIN
  1175. 30 CLERK JAMES
  1176. Pentru a ordona dupa o coloana nu este necesar sa o avem SELECT-ata.
  1177. ORDER BY si valorile nule
  1178. In Oracle7,valorile nule sunt afisate ultimele pentru secventele ascendente si sint raportate primele cind rindurile sunt sortate in ordine descendenta.
  1179. Atentie: Clauza ORDER BY este utilizata intr-o interogare cind se doreste sa se afiseze rindurile intr-o ordine specifica .Fara clauza ORDER BY randurile sunt returnate intr-o ordine convenita de ORACLE si va trebui sa ne bazam pe el- ordinea determinata fiind consistenta de la cerere la cerere.De notat ca ordinea de afisare a rindurilor nu influenteaza ordinea interna a rindurilor asa cum sunt stocate in tabela.
  1180. Clauza WHERE
  1181. Clauza WHERE corespunde operatorului 'Restrictie' din algebra relationala. Contine o conditie pe care rindurile trebuie sa o indeplineasca in ordinea afisarii lor. Clauza WHERE ,daca este folosita , trebuie sa urmeze clauzei FROM :
  1182. SELECT coloane
  1183. FROM tabela
  1184. WHERE anumite conditii sunt intilnite
  1185.  
  1186. Clauza WHERE poate compara valori in coloana ,valori literale,expresii aritmetice sau functii. Clauza WHERE asteapta trei elemente:
  1187. 1. Un nume de coloana
  1188. 2. Un operator de comparatie
  1189. 3. Un nume de coloana, constanta sau lista de valori.
  1190. Operatorii de comparatie sunt utilizati in clauza WHERE si pot fi impartiti in doua categorii: logici si SQL.
  1191. Operatorii logici
  1192. Acesti operatori verifica urmatoarele conditii:
  1193. Operator Semnificatie
  1194. -------- ------------
  1195. = egal cu
  1196. > mai mare decit
  1197. >= mai mare sau egal
  1198. < mai mic decit
  1199. <= mai mic sau egal
  1200. Sirurile de caractere si datele calendaristice in clauza WHERE
  1201. Coloanele din ORACLE pot avea urmatoarele tipuri:caracter,numar sau data calendaristica. Sirurile de caractere si datele calendaristice din clauza WHERE trebuie sa fie inchise in ghilimele simple('). Sirurile de caractere trebuie sa se supra- puna cu valoarea coloanei daca nu, trebuie modificate de o functie.
  1202. Pentru a afisa numele,numerele,ocupatia si departamentele tuturor functionarilor, introduceti:
  1203. SELECT ENAME, EMPNO, JOB, DEPTNO
  1204. FROM EMP
  1205. WHERE JOB = 'CLERK';
  1206.  
  1207. ENAME EMPNO JOB DEPTNO
  1208. --------- ----- ------- ------
  1209. SMITH 7369 CLERK 20
  1210. ADAMS 7876 CLERK 20
  1211. JAMES 7900 CLERK 30
  1212. MILLER 7934 CLERK 10
  1213. Pentru a gasi toate numele de departamente cu numerele de departament mai mare ca 20 ,introduceti:
  1214. SELECT DNAME, DEPTNO
  1215. FROM DEPT
  1216. WHERE DEPTNO >20;
  1217.  
  1218. DNAME DEPTNO
  1219. ---------- ------
  1220. SALES 30
  1221. OPERATIONS 40
  1222. Compararea unei coloane cu alta in cadrul aceluiasi rand
  1223. Puteti compara o coloana cu o alta coloana in acelasi rand,la fel ca si cu o valoare constanta. De exemplu , presupunem ca dorim sa obtinem acei angajati al caror comision estå mai mare decat salariul lor:
  1224. SELECT ENAME, SAL, COMM
  1225. FROM EMP
  1226. WHERE COMM> SAL;
  1227. ENAME SAL COMM
  1228. ------ -------- --------
  1229. MARTIN 1,250.00 1,400.00
  1230. Operatori SQL Sint patru operatori SQL care opereaza pe toate tipuril de date:
  1231. Operatori SQL
  1232.  
  1233. Operator Semnificatie
  1234. -------- ------------
  1235. BETWEEN..AND... intre doua valori(inclusiv)
  1236. IN(list) compara cu o lista de valori
  1237. LIKE compara cu un model de tip caracter
  1238. IS NULL estå o valoare nula
  1239. Operatorul BETWEEN
  1240. Realizeaza teste pentru valori intre,si inclusiv,o valoare minima si o valoare maxima. Presupunind ca dorim sa vedem angajatii ai caror salariu este intre 1000 si 2000:
  1241.  
  1242. SELECT ENAME,SAL
  1243. FROM EMP
  1244. WHERE SAL BETWEEN 1000 AND 2000;
  1245.  
  1246. ENAME SAL
  1247. ------- ----------
  1248. ALLEN 1,600.00
  1249. WARD 1,250.00
  1250. MARTIN 1,250.00
  1251. TURNER 1,500.00
  1252. ADAMS 1,100.00
  1253. MILLER 1,300.00
  1254. De notat ca valorile specificate sunt inclusive si ca limita minima trebuie specificata prima.
  1255. Operatorul IN
  1256. Testeaza valorile dintr-o lista specificata. Presupunem ca dorim sa gasim angajatii care au unul din cele trei numere de marca(MGR):
  1257.  
  1258. SELECT EMPNO, ENAME, SAL, MGR
  1259. FROM EMP
  1260. WHERE MGR IN (7902,7566,7788);
  1261.  
  1262. EMPNO ENAME SAL MGR
  1263. ----- ----- --------- -----
  1264. 7369 SMITH 800.00 7902
  1265. 7788 SCOTT 3,000.00 7566
  1266. 7876 ADAMS 1,100.00 7788
  1267. 7902 FORD 3,000.00 7566
  1268.  
  1269. Daca, caracterele sau datele calendaristice sunt utilizate,ele trebuie introduse intre ghilimele(' ').
  1270. Operatorul LIKE
  1271. Uneori nu se cunosc valorile exacte pe care le cautam.Utilizand operatorul LIKE este posibil sa selectam randurile care se potrivesc cu un model specificat de caractere.Operatia de petter-matching a caracterelor poate fi asemanata cu o cautare 'wild-card'.Doi simboli se pot utiliza la construirea sirului de cautare.
  1272. Simbol Reprezentare
  1273. ------ ------------
  1274. % orice secventa de zero sau mai multe caractere
  1275. - un singur caracter oarecare
  1276. Pentru a lista toti angajatii al caror nume incepe cu un S,introduceti:
  1277.  
  1278. SELECT ENAME
  1279. FROM EMP
  1280. WHERE ENAME LIKE 'S%';
  1281.  
  1282. ENAME
  1283. --------
  1284. SMITH
  1285. SCOTT
  1286. Caracterul '_' poate fi utilizat pentru cautarea unui anumit numar de caractere.
  1287. De exemplu pentru a lista toti angajatii care au un nume exact de patru caractere lungime:
  1288.  
  1289. SELECT ENAME
  1290. FROM EMP
  1291. WHERE ENAME LIKE '____';
  1292.  
  1293. ENAME
  1294. -----
  1295. WARD
  1296. KING
  1297. FORD
  1298. Semnele '%' si '_'pot fi utilizate in orice combinatie de caractere.
  1299. Operatorul IS NULL
  1300. Operatorul IS NULL face teste specifice pentru valorile care sunt NULL.
  1301.  
  1302. SELECT ENAME,MGR
  1303. FROM EMP
  1304. WHERE MGR IS NULL;
  1305.  
  1306. ENAME MGR
  1307. ------ ----
  1308. KING
  1309. Negarea expresiilor
  1310. Urmatorii operatori fac teste de negatie:
  1311.  
  1312. Operator Descriere
  1313. --------- ----------
  1314. != diferit de(VAX,UNIX,PC)
  1315. ^= diferit de(IBM)
  1316. <> diferit de(toate o/s)
  1317. NOT NUMECOL= diferit de
  1318. NOT NUMECOL> mai mic sau egal
  1319.  
  1320. Operatori SQL
  1321.  
  1322. Operator Descriere
  1323. -------- ---------
  1324. NOT BETWEEN nu se afla intre doua valori date
  1325. NOT IN nu se afla intr-o lista data de valori
  1326. NOT LIKE diferit de sirul
  1327. IS NOT NULL nu este o valoare nula
  1328. Pentru a gasi angajatii ai caror salariu nu este intr-un interval,introdu- ceti:
  1329.  
  1330. SELECT ENAME,SAL
  1331. FROM EMP
  1332. WHERE SAL NOT BETWEEN 1000 AND 2000;
  1333.  
  1334. ENAME SAL
  1335. --------- --------
  1336. SMITH 800.00
  1337. JONES 2,975.00
  1338. BLAKE 2,850.00
  1339. CLARK 2,450.00
  1340. SCOTT 3,000.00
  1341. KING 5,000.00
  1342. JAMES 950.00
  1343. FORD 3,000.00
  1344.  
  1345. Pentru a afla acei angajati a caror meserie nu incepe cu M,introduceti:
  1346.  
  1347. SELECT ENAME,JOB
  1348. FROM EMP
  1349. WHERE JOB NOT LIKE 'M%';
  1350.  
  1351. ENAME JOB
  1352. -------- --------
  1353. SMITH CLERK
  1354. ALLEN SALESMAN
  1355. WARD SALESMAN
  1356. MARTIN SALESMAN
  1357. SCOTT ANALYST
  1358. KING PRESIDENT
  1359. TURNER SALESMAN
  1360. ADAMS CLERK
  1361. JAMES CLERK
  1362. FORD ANALYST
  1363. MILLER CLERK
  1364.  
  1365. Pentru a afla toti angajatii care au un manager(MGR),introduceti:
  1366.  
  1367. SELECT ENAME,MGR
  1368. FROM EMP
  1369. WHERE MGR IS NOT NULL;
  1370.  
  1371. ENAME MGR
  1372. ------- -----
  1373. SMITH 7902
  1374. ALLEN 7698
  1375. WARD 7698
  1376. JONES 7839
  1377. MARTIN 7698
  1378. BLAKE 7839
  1379. CLARK 7839
  1380. SCOTT 7566
  1381. TURNER 7698
  1382. ADAMS 7788
  1383. JAMES 7698
  1384. FORD 7566
  1385. MILLER 7782
  1386.  
  1387. Nota: Daca o valoare NULL este utilizata intr-o comparatie ,atunci operatorul de comparatie trebuie sa fie IS sau IS NOT NULL. Daca acesti operatori nu sunt uti lizati si valoarea NULL este comparata,atunci rezultatul este intotdeauna FALSE. De exemplu, COMM!=NULL este intotdeauna falsa.Rezultatul este fals deoarece o valoare NULL poate sa nu fie egala sau diferita cu orice alta valoare alta decat NULL. De notat ca o astfel de eroare nu este semnalata,rezultatul fiind intotdea- una fals.
  1388. Interogarea datelor cu conditii multiple
  1389. Operatorii AND sau OR pot fi utilizati pentru a compune expresii logice.
  1390. Predicatul AND este adevarat numai daca ambele conditii sunt 'adevarate'; predicatul OR este adevarat daca cel putin una din conditii este 'adevarata'.
  1391. In urmatoarele doua exemple,conditiile sunt aceleasi,dar predicatele difera Priviti cum rezultatul este dramatic modificat.
  1392. Pentru a gasi toti functionarii care castiga intre 1000 si 2000,introduceti:
  1393. SELECT EMPNO,ENAME,JOB,SAL
  1394. FROM EMP
  1395. WHERE SAL BETWEEN 1000 AND 2000
  1396. AND JOB = 'CLERK';
  1397. EMPNO ENAME JOB SAL
  1398. ---- ------- -------- --------
  1399. 7876 ADAMS CLERK 1,100.00
  1400. 7934 MILLER CLERK 1,300.00
  1401.  
  1402. Pentru a afla toti angajatii care sunt si functionari si/sau functionari care castiga intre 1000 si 2000,introduceti:
  1403.  
  1404. SELECT EMPNO,ENAME,JOB,SAL
  1405. FROM EMP
  1406. WHERE SAL BETWEEN 1000 AND 2000
  1407. OR JOB = 'CLERK';
  1408.  
  1409. EMPNO ENAME JOB SAL
  1410. ----- -------- ------- --------
  1411. 7369 SMITH CLERK 800.00
  1412. 7499 ALLEN SALESMAN 1,600.00
  1413. 7521 WARD SALESMAN 1,250.00
  1414. 7654 MARTIN SALESMAN 1,250.00
  1415. 7844 TURNER SALESMAN 1,500.00
  1416. 7876 ADAMS CLERK 1,100.00
  1417. 7900 JAMES CLERK 950.00
  1418. 7934 MILLER CLERK 1,300.00
  1419. Puteti combina AND sau OR in acceasi expresie logica. Cand AND sau OR apar in aceeasi clauza WHERE, toti operatorii AND sunt evaluati mai intai si apoi toti operatorii OR. Vom spune ca operatorii AND au o precedenta mai mare decat OR.
  1420. Deoarece AND are o precedenta mai mare decat OR urmatoarea declaratie SQL intoarce toti managerii cu salarii peste 1500$ si toti vanzatorii.
  1421. SELECT EMPNO,ENAME,JOB,SAL,DEPTNO
  1422. FROM EMP
  1423. WHERE SAL> 1500
  1424. AND JOB = 'MANAGER'
  1425. OR JOB = 'SALESMAN';
  1426.  
  1427. EMPNO ENAME JOB SAL DEPTNO
  1428. ----- ------- -------- -------- ------
  1429. 7499 ALLEN SALESMAN 1,600.00 30
  1430. 7521 WARD SALESMAN 1,250.00 30
  1431. 7566 JONES MANAGER 2,975.00 20
  1432. 7654 MARTIN SALESMAN 1,250.00 30
  1433. 7698 BLAKE MANAGER 2,850.00 30
  1434. 7782 CLARK MANAGER 2,450.00 10
  1435. 7844 TURNER SALESMAN 1,500.00 30
  1436.  
  1437. Daca doriti sa selectati toti managerii si vanzatorii cu salarii peste 1500$ puteti introduce:
  1438.  
  1439. SELECT EMPNO,ENAME,JOB,SAL,DEPTNO
  1440. FROM EMP
  1441. WHERE SAL >1500
  1442. AND (JOB = 'MANAGER'
  1443. OR JOB = 'SALESMAN');
  1444.  
  1445. EMPNO ENAME JOB SAL DEPTNO
  1446. ----- ------ --------- -------- ------
  1447. 7499 ALLEN SALESMAN 1,600.00 30
  1448. 7566 JONES MANAGER 2,975.00 20
  1449. 7698 BLAKE MANAGER 2,850.00 30
  1450. 7782 CLARK MANAGER 2,450.00 10
  1451. Parantezele specifica ordinea in care operatorii vor fi evaluati. In al doilea exemplu operatorul OR este evaluat inaintea operatorului AND.
  1452.  
  1453.  
  1454.  
  1455. TIPURI DE DATE CARACTER SI CONDITII
  1456. ENAME
  1457. (VARCHAR2)
  1458. ___________
  1459. WHERE ENAME = 'SCOTT' | |
  1460. | SCOTT V V|
  1461. | ___|
  1462. | SCOTT|____
  1463. | |
  1464. | MILLER |
  1465. | |
  1466. ~~~~ ~~ ~~~
  1467.  
  1468. Oracle nu face umplerea cu blancuri la compararea cu coloanele VARCHAR2
  1469.  
  1470. ENAME
  1471. (CHAR)
  1472. ------------
  1473. | |
  1474. | SCOTT V V|
  1475. WHERE ENAME = 'SCOTT' | ....|
  1476. | SCOTT|V V|
  1477. | |. |
  1478. | MILLER| V|
  1479. ~~~~ ~~~~ ~~
  1480.  
  1481. Oracle face umplerea cu blancuri la compararea cu coloanele CHAR.
  1482.  
  1483. Tipurile de date caracter si conditii
  1484. Tipurile de baza ale datelor stocate intr-o tabela oracle sunt:caracter, valoare numerica sau data calendaristica.Vom discuta toate variantele in detaliu mai tarziu.De cate ori rezultatele unei conditii implica date de tip caracter, acestea pot varia in functie de tipul coloanei;ORACLE inzestreaza coloanela cu tipul CHAR pentru valori de lungime fixa si cu tipul VARCHAR2 pentru valori de lungime variabila.
  1485. Pentru coloanele cu tipul VARCHAR2 ,Oracle nu umple sirul de comparare si de aceea va face o potrivire exacta.In primul exemplu,doar un singur rand este intors pentru conditia:
  1486. WHERE ENAME = 'SCOTT'
  1487.  
  1488. cand un alt rand stocat in coloana ENAMe are mai multe caractere decat sirul de comparat.
  1489. Pentru coloanele cu tipul CHAR ,oricum,Oraclå face umplere cand valorile coloanelor sunt initial stocate,facandu-le pe toate de aceeasi lungime.
  1490. Aceeasi conditie va intoarce ambele randuri pentru SCOTT ,indiferent de cate spatii de sfarsit au fost adaugate cand valorile au fost stocate in tabela.
  1491. Oracle umple cu blancuri sirul de comparat in cel deal doilea caz si de aceea spatiile stocate sunt nesemnificative.
  1492. Precedenta operatorilor
  1493. Toti operatorii sunt aranjati intr-o ierarhie ceea ce le determina precedenta .Intr-o expresie operatiile sunt executate in ordinea precedentei lor de la mare la mica.
  1494. Cand operatorii au precedenta egala atunci ei se evalueaza de la stanga la dreapta.
  1495. 1. Toti operatorii de comparatie si SQL au precedenta egala: =,!=,<,>,<=,>=,BETWEEN...AND,IN,LIKE,IS NULL.
  1496. 2. NOT(pentru a inversa rezultatul unei expresii logice.De ex: WHERE not(sal>2000))
  1497. 3. AND
  1498. 4. OR.
  1499. De fiecare data cand sunteti in dubiu despre care dintre doua operatii vor fi executate mai intai cand o expresie este evaluata, sunteti liberi sa utilizati parantezele pentru a clarifica semnificatia dorita si pentru a va asigura ca SQL*Plus face ceea ce doriti.
  1500. Sa presupunem ca doriti sa gasiti toti managerii, din orice departament,si toti functionarii din departamentul 10:
  1501. SELECT *
  1502. FROM EMP
  1503. WHERE JOB='MANAGER' OR (JOB = 'CLERK' AND DEPTNO = 10);
  1504. Parantezele de deasupra sunt necesare, AND are o precedenta mai mare decat OR ,dar ele clarifica semnificatia expresiei.
  1505. SELECT-Sumar
  1506. Urmatoarele clauze sunt inchise in comanda SELECT:
  1507. SELECT [DISTINCT] [*,coloana alias],...]
  1508. FROM tabela
  1509. WHERE conditie(ii)
  1510. ORDER BY [coloana,expr] [ASC/DESC];
  1511. SELECT selecteaza cel putin o coloana
  1512. Alias poate fi folosit pentru coloanele din lista selectata
  1513. * desemneza toate coloanele
  1514. DISTINCT poate fi utilizat pentru eliminarea duplicatelor
  1515. FROM Tabela desemneaza tabela din care provin coloanele
  1516. WHERE restrictioneaza cererea la randurile care indeplinesc o conditie. Poate contine
  1517. valori de coloane,expresii si literali
  1518. AND/OR poate fi utilizat intr-o clauza WHERE pentru a construi conditii mai complexe.
  1519. AND are prioritate peste OR.
  1520. () pot fi utilizate pentru a forta prioritatea
  1521. ORDER BY intotdeauna apare la sfarsit .Specifica ordinea de sortare.Una sau mai multe
  1522. coloane pot fi specificate aici.
  1523. ASC ordinea ascendenta este ordinea de sortarå ( implicita) si nu trebuie specificat.
  1524. DESC inverseaza ordinea de sortare de default si trebuie specificat dupa un nume de
  1525. coloana.
  1526. Clauzele pot fi introduse pe linii separate in buffer si tabelarea este utilizata pentru claritate si in editare.
  1527. Exercitii
  1528. 1. Selectati toate informatiile din tabela EMP.
  1529. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  1530. ----- ----- ------- ---- -------- -------- ------- ------
  1531. 7369 SMITH CLERK 7902 13-JUN-83 800.00 20
  1532. 7499 ALLEN SALESMAN 7698 15-AUG-83 1,600.00 300.00 30
  1533. 7521 WARD SALESMAN 7698 26-MAR-84 1,250.00 500.00 30
  1534. 7566 JONES MANAGER 7839 31-OCT-83 2,975.00 20
  1535. 7654 MARTIN SALESMAN 7698 05-DEC-83 1,250.00 1,400.00 30
  1536. 7698 BLAKE MANAGER 7839 11-JUL-84 2,850.00 30
  1537. 7782 CLARK MANAGER 7839 14-MAY-84 2,450.00 10
  1538. 7788 SCOTT ANALYST 7566 05-MAR-84 3,000.00 20
  1539.  
  1540. 2. Listati toti angajatii care au salariul intre 1000 si 2000.
  1541. ENAME DEPTNO SAL
  1542. ----- ------ --------
  1543. ALLEN 30 1,600.00
  1544. WARD 30 1,250.00
  1545. MARTIN 30 1,250.00
  1546. ADAMS 20 1,100.00
  1547. MILLER 10 1,300.00
  1548.  
  1549. 3. Listati numerele de departament si numele in ordinea numelor departamentelor.
  1550. DEPTNO DNAME
  1551. ------ ----------
  1552. 10 ACCOUNTING
  1553. 40 OPERATIONS
  1554. 20 RESEARCH
  1555. 30 SALES
  1556.  
  1557. 4. Afisati toate tipurile diferite de job-uri.
  1558. JOB
  1559. ---------
  1560. ANALYST
  1561. CLERK
  1562. MANAGER
  1563. PRESIDENT
  1564. SALESMAN
  1565.  
  1566. 5. Listati detaliile angajatilor din departamentele 10 si 20 in ordinea alfabetica a numelui.
  1567. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  1568. ----- ----- ----- ---- --------- -------- ---- ------
  1569. 7876 ADAMS CLERK 7788 04-JUN-84 1,100.00 20
  1570. 7782 CLARK MANAGER 7839 14-MAY-84 2,450.00 10
  1571. 7902 FORD ANALYST 7566 05-DEC-83 3,000.00 20
  1572. 7566 JONES MANAGER 7839 31-OCT-83 2,975.00 20
  1573. 7839 KING PRESIDENT 09-JUL-84 5,000.00 10
  1574. 7934 MILLER CLERK 7782 21-NOV-83 1,300.00 10
  1575. 7788 SCOTT ANALYST 7566 05-MAR-84 3,000.00 20
  1576.  
  1577. 6. Listati numele si ocupatiile tuturor functionarilor in departamentul 20.
  1578. ENAME JOB
  1579. ------ -----
  1580. SMITH CLERK
  1581. ADAMS CLERK
  1582.  
  1583. 7. Afisati toti angajatii ai caror nume contine TH sau LL in interior.
  1584. ENAME
  1585. ------
  1586. SMITH
  1587. ALLEN
  1588. MILLER
  1589.  
  1590. 8. Listati urmatoarele detalii pentru toti angajatii care au un manager.
  1591.  
  1592. ENAME JOB SAY
  1593. ------ -------- --------
  1594. SMITH CLERK 800.00
  1595. ALLEN SALESMAN 1,600.00
  1596. WARD SALESMAN 1,250.00
  1597. JONES MANAGER 2,975.00
  1598. MARTIN SALESMAN 1,250.00
  1599. BLAKE MANAGER 2,850.00
  1600. CLARK MANAGER 2,450.00
  1601. SCOTT ANALYST 3,000.00
  1602. TURNER SALESMAN 1,500.00
  1603. 9. Afiseaza numele si totalul remuneratiei pentru toti angajatii.
  1604.  
  1605. ENAME REMUNERATION
  1606. ------- ------------
  1607. SMITH 9600
  1608. ALLEN 19500
  1609. WARD 15500
  1610. JONES 35700
  1611. MARTIN 16400
  1612. BLAKE 34200
  1613. CLARK 29400
  1614. SCOTT 36000
  1615. KING 60000
  1616. TURNER 18000
  1617. ADAMS 13200
  1618.  
  1619. 10. Afiseaza toti salariatii care au fost angajati in anul 1983.
  1620.  
  1621. ENAME DEPTNO HIREDATE
  1622. ------- ------ ---------
  1623. SMITH 20 13-JUN-83
  1624. ALLEN 30 15-AUG-83
  1625. JONES 20 31-OCT-83
  1626. MARTIN 30 05-DEC-83
  1627. FORD 20 05-DEC-83
  1628. MILLER 10 21-NOV-830
  1629.  
  1630. 11. Afisati numele,salariul anual si comisionul pentru toti vanzatorii ai caror salariu lunar este mai mare decat comisionul lor.Iesirea va fi ordonata dupa salariu , cele m ai mari primele. Daca doi sau mai multi angajati au acelasi salariu trebuie sortati dupa nume in odinea celor mai mari salarii.
  1631.  
  1632. ENAME ANNUAL_SAL COMM
  1633. ------ ---------- --------
  1634. ALLEN 19200 300.00
  1635. TURNER 18000 .00
  1636. WARD 15000 500.00
  1637.  
  1638. 12. Selectati informatiile dupa cum sunt selectate.
  1639.  
  1640. Cine,cand si cum
  1641. --------------------------------------------------------------------
  1642. SMITH HAS HELD THE POSITION OF CLERK IN DEPT 20 SINCE 13-JUN-83
  1643. ALLEN HAS HELD THE POSITION OF SALESMAN IN DEPT 30 SINCE 15-AUG-83
  1644. WARD HAS HELD THE POSITION OF SALESMAN IN DEPT 30 SINCE 26-MAR-84
  1645. JONES HAS HELD THE POSITION OF MANAGER IN DEPT 20 SINCE 31-OCT-83
  1646. MARTIN HAS HELD THE POSITION OF SALESMAN IN DEPT 30 SINCE 05-DEC-83
  1647. BLAKE HAS HELD THE POSITION OF MANAGER IN DEPT 30 SINCE 11-JUN-84
  1648. CLARK HAS HELD THE POSITION OF MANAGER IN DEPT 10 SINCE 14-MAY-84
  1649. SCOTT HAS HELD THE POSITION OF ANALYST IN DEPT 20 SINCE 05-MAR-84
  1650. KING HAS HELD THE POSITION OF PRESIDENT IN DEPT 10 SINCE 09-JUL-84
  1651. TURNER HAS HELD THE POSITION OF SALESMAN IN DEPT 30 SINCE 04-JUN-84
  1652. ADAMS HAS HELD THE POSITION OF CLERK IN DEPT 20 SINCE 04-JUN-84
  1653. JAMES HAS HELD THE POSITION OF CLERK IN DEPT 30 SINCE 23-JUL-84
  1654. FORD HAS HELD THE POSITION OF ANALYST IN DEPT 20 SINCE 05-DEC-83
  1655. MILLER HAS HELD THE POSITION OF CLERK IN DEPT 10 SINCE 21-NOV-83
  1656.  
  1657. Rezolvari
  1658. 1. SELECT * FROM EMP;
  1659. 2. SELECT ENAME, DEPTNO, SAL
  1660. FROM EMP
  1661. WHERE SAl BETWEEN 1000 AND 2000;
  1662. 3. SELECT DEPTNO, DNAME FROM DEPT
  1663. ORDER BY DNAME;
  1664. 4. SELECT DISTINCT JOB FROM EMP;
  1665. 5. SELECT * FROM EMP
  1666. WHERE DEPTNO IN (10,20)
  1667. ORDER BY ENAME;
  1668. 6. SELECT ENAME,JOB FROM EMP
  1669. WHERE JOB = 'CLERK'
  1670. AND DEPTNO = 20;
  1671. 7. SELECT ENAME FROM EMP
  1672. WHERE ENAME LIKE '%TH%'
  1673. OR ENAME LIKE '%LL%';
  1674. 8. SELECT ENAME, JOB, SAL FROM EMP
  1675. WHERE MGR IS NOT NULL;
  1676.  
  1677. 9. SELECT ENAME, SAL*12+NVL(COMM,0) REMUNERATION FROM EMP;
  1678. 10. SELECT ENAME, DEPTNO, HIREDATE FROM EMP
  1679. WHERE HIREDATE LIKE '%83';
  1680. 11. SELECT ENAME, SAL*12 ANNUAL SAL, COMM FROM EMP
  1681. WHERE SAL >COMM AND JOB = 'SALESMAN'
  1682. ORDER BY SAL DESC, ENAME;
  1683. 12. SELECT ENAME||' HAS HELD THE POSITION OF '|| JOB||' IN DEPT '||DEPTNO||
  1684. ' SINCE '|| HIREDATE "Who, what and when" FROM EMP;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement