2 savarankiškas sfw

mail@pastecode.io avatar
unknown
mysql
2 years ago
5.9 kB
2
Indexable
Never
/*--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;