2 savarankiškas sfw
unknown
mysql
3 years ago
5.9 kB
3
Indexable
/*--1. Pateikite darbuotojų pavardes ir atlyginimus, padidintus 15% ir išreikštus sveikais skaičiais.*/ SELECT ename, round(sal * 1.15, 0) FROM emp; /*--2. Išveskite į ekraną informaciją žemiau parodytu būdu. EMPLOYEE_AND_JOB -------------------------------------------- SMITH CLERK ALLEN SALESMAN */ SELECT concat(rpad(ename, 10), lpad(job, 10)) "EMPLOYEE_AND_JOB" FROM emp; /*--3. Išveskite į ekraną darbuotojų pavardes, jų priėmimo į darbą ir atlyginimo peržiūrėjimo (REVIEW) datas. Tarkime, kad atlyginimo peržiūrėjimo data yra po metų nuo priėmimo į darbą datos. Duomenis pateikite atlyginimo peržiūrėjimo datos didėjimo tvarka.*/ SELECT ename, hiredate, add_months(hiredate, 12) AS REVIEW FROM emp ORDER BY REVIEW ASC; /*--4. Parašykite užklausą, pateikiančią, kiek laiko darbuotojas dirba įmonėje. Galite naudoti DEFINE komandą, kad nereikėtų pakartotinai suvedinėti išraiškų. ENAME LENGTH OF SERVICE --------------- ------------------------------- KING 11 YEARS 7 MONTHS */ define dirba = months_between(sysdate, hiredate) SELECT ename, FLOOR(&laikas / 12) || ' YEARS ' || FLOOR(MOD(&dirba, 12)) || ' MONTHS' "LENGTH OF SERVICE" FROM emp; /*--arba*/ define laikas = months_between(sysdate, hiredate) SELECT ename, concat(concat(FLOOR(FLOOR(&laikas)/12), ' YEARS '), concat(FLOOR(MOD(&laikas, 12)), ' MONTHS')) "LENGTH OF SERVICE" FROM emp; /* 5. Darbuotojams, kurie priimti į darbą iki mėnesio 15-os dienos, pirmas darbo užmokestis mokamas paskutinį to mėnesio penktadienį. Darbuotojams, kurie priimti į darbą vėliau 15-os mėnesio dienos, pirmas darbo užmokestis mokamas kito mėnesio paskutinį penktadienį. Pateikite informaciją apie darbuotojus, jų priėmimo į darbą ir pirmo darbo užmokesčio gavimo datas. Surūšiuokite pagal priėmimo į darbą datą. */ SELECT ename, hiredate, next_day(last_day(round(hiredate, 'MONTH'))-7, 5) "FIRST SALARY" FROM emp ORDER BY hiredate ASC; /*--6. Išveskite į ekraną informaciją žemiau parodytu būdu: EMPLOYEE --------------------- SMITH(Clerk) ALLEN(Salesman) */ SELECT ename || '(' || initcap(job) || ')' "EMPLOYEE" FROM emp; /*--arba*/ SELECT concat(ename, concat('(', concat(initcap(job), ')'))) "EMPLOYEE" FROM emp; /*--7. Parašykite užklausą, nepriklausančią nuo to, kaip bus nurodytos darbuotojų pareigos: didžiosiomis ar mažosiomis raidėmis. Enter value for job: clerk*/ SELECT * FROM emp WHERE job = UPPER('&pareigos'); /* 8. Pastebėta, kad 30-ame skyriuje ne visi pardavėjai vyrai. Išveskite į ekraną informaciją, kaip parodyta žemiau, pakeisdami SALESMAN į SALESPERSON. ENAME DEPTNO JOB ----------------- ------------------- ------------- ALLEN 30 Salesperson WARD 30 Salesperson BLAKE 30 Manager */ SELECT ename, deptno, initcap(REPLACE(job, 'SALESMAN', 'SALESPERSON')) FROM emp WHERE deptno = 30; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~4 LABORATORINIS DARBAS~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /*FUNKCIJOS SQL 2021-10-12*/ /*1. Pateikite darbuotojų, kurie dirba 20-ame skyriuje, pavardes ir priėmimo į darbą datas. Pavadinkite antrąjį stulpelį “DATE_HIRED”, kad visi duomenys sutilptų į vieną eilutę (pagal nutylėjimą stulpelio plotis yra 80 simbolių).*/ SELECT ename, to_char(hiredate, 'FMMonth, DD "d." YYYY', 'nls_date_language=english') AS DATE_HIRED FROM emp WHERE deptno=20; /*2. Pateikite darbuotojų sąrašą, kuriame kiekvienam darbuotojui priklausomai nuo jo atlyginimo būtų nurodyta: „Below 1500“, jei atlyginimas mažesnis už 1500 „On Target“, jei atlyginimas lygus 1500 atlyginimo reikšmė visais kitais atvejais.*/ SELECT ename, decode(sign(sal-1500), -1, 'Below 1500', 0, 'On Targer', sal) AS ATLYGINIMAS FROM emp; /*3. Parašykite užklausą, kuri parodytų savaitės dieną, kiekvienai formate DD.MM.YYYY nurodytai datai. */ SELECT to_char(to_date('&anydate', 'DD.MM.YYYY'), 'DAY', 'nls_date_language=english') FROM dual; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~5 LABORATORINIS DARBAS~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /*1. Suraskite mažiausią darbuotojų atlyginimą. */ SELECT MIN(sal) FROM emp; /*2. Suraskite darbuotojų didžiausią, mažiausią ir vidutinį atlyginimus. */ SELECT MAX(sal), round(avg(sal)), MIN(sal) FROM emp; /*3. Pateikite mažiausią ir didžiausią atlyginimus kiekvienoms pareigoms.*/ SELECT MIN(sal), MAX(sal), job FROM emp GROUP BY job; /*4. Suraskite, kiek yra vadybininkų, neišvardinant jų.*/ SELECT COUNT(job) FROM emp WHERE job = 'MANAGER'; /*5. Paskaičiuokite atlyginimų vidurkį ir visų pajamų vidurkį kiekvienoms pareigoms. Nepamirškite, kad pardavėjai uždirba komisinius. */ SELECT round(avg(sal)) AS ATLYGINIMU_AVG, round(avg(sal + nvl(comm, 0))) AS VISU_PAJAMU_AVG, job FROM emp GROUP BY job; /*6. Suraskite skirtumą tarp didžiausio ir mažiausio darbo užmokesčio.*/ SELECT MAX(sal) - MIN(sal) FROM emp; /*7. Suraskite visus skyrius, kuriuose dirba daugiau kaip 3 darbuotojai. */ SELECT deptno AS SKYRIUS, COUNT(deptno) AS DARBUOTOJU_KIEKIS FROM emp GROUP BY deptno HAVING COUNT(deptno) > 3; /*8. Patikrinkite, ar darbuotojų numeriai iš tikrųjų nepasikartoja. */ SELECT COUNT(empno) - COUNT(DISTINCT(empno)) AS SKIRTUMAS FROM emp; SELECT empno FROM emp GROUP BY empno HAVING COUNT(*) > 1; /*9. Pateikite kiekvieno vadovo mažiausiai apmokamo darbuotojo atlyginimą. Neįtraukite tų grupių, kur atlyginimas yra mažesnis už 1000. Informaciją pateikite atlyginimų didėjimo tvarka. */ SELECT mgr AS VADOVO_NUMERIS, MIN(sal) AS MIN_ATLYGINIMAS FROM emp WHERE mgr IS NOT NULL GROUP BY mgr HAVING MIN(sal) > 1000 ORDER BY MIN(sal) ASC;
Editor is loading...