SQL ZADANIA


I. ZAPYTANIA SQL 1
1. Wybrać numery departamentów, nazwiska pracowników oraz numery pracownicze ich szefów z tabeli EMP
SELECT deptno , ename , mgr FROM emp;
2. Wybrać wszystkie kolumny z tabeli EMP
SELECT * FROM emp;
3. Wyliczyć roczną pensję podstawową dla każdego pracownika
SELECT sal*12 FROM emp;
4. Wyliczyć roczną pensję podstawową dla każdego pracownika gdyby każdemu dać podwyżkę o 250
SELECT (sal+250)*12 FROM emp;
5. Wybrane wyrażenie SAL*12 zaetykietować nagłówkiem ROCZNA
SELECT sal*12 ROCZNA FROM emp;
6. Wybrane wyrażenie SAL*12 zaetykietować nagłówkiem Roczna Pensja
SELECT sal*12 "ROCZNA PENSJA" FROM emp;
7. Połączyć EMPNO i nazwisko, opatrzyć je nagłówkiem EMPLOYEE
SELECT empno || ' nazwisko ' || ename EMPLOYEE FROM emp;
8. Utworzyć zapytanie zwracające wynik w postaci np. "Kowalski pracuje w dziale 20".
SELECT ename || ' pracuje w dziale ' || deptno FROM emp;
9. Wyliczyć roczną pensję całkowitą dla każdego pracownika
SELECT 12*sal + NVL(comm, 0) As 'Roczna pensja' FROM emp;
10. Wyświetlić wszystkie numery departamentów występujące w tabeli EMP
SELECT DISTINCT deptno FROM emp;
11. Wyświetlić wszystkie różne numery departamentów występujące w tabeli EMP
SELECT deptno FROM emp;
12. Wybrać wszystkie wzajemnie różne kombinacje wartości DEPTNO i JOB
SELECT DISTINCT depnto , job FROM emp;
13. Posortować wszystkie dane tabeli EMP według ENAME
SELECT * FROM emp ORDER BY ename;
14. Posortować malejąco wszystkie dane tabeli EMP według daty ich zatrudnienia począwszy od ostatnio zatrudnionych
SELECT * FROM emp ORDER BY hiredate DESC;
15. Posortować dane tabeli EMP według wzrastających wartości kolumn DEPTNO oraz malejących wartości kolumny SAL (bez wypisywania kolumny SAL)
SELECT empno, ename, deptno FROM emp ORDER BY deptno DESC, sal ASC;
16. Wybrać nazwiska, numery prac., stanowiska pracy i numery departamentów wszystkich pracowników zatrudnionych na stanowisku CLERK
SELECT ename , empno , job , deptno FROM emp WHERE job='CLERK';
17. Wybrać wszystkie nazwy i numery departamentów większe od nr 20
SELECT deptno , dname FROM dept where deptno >20;
18. Wybrać pracowników, których prowizja przekracza miesięczną pensję
SELECT empno , sal , comm FROM emp WHERE comm > sal;
19. Wybrać dane tych pracowników, których zarobki mieszczą się pomiędzy 1000 a 2000.
SELECT empno , sal FROM emp WHERE sal>= 1000 AND sal =< 2000;
SELECT empno , sal FROM emp WHERE sal between 1000 and 2000;
20. Wybrać dane pracowników, których bezpośrednimi szefami są 7902,7566 lub 7788
SELECT empno , mgr FROM emp WHERE mgr in (7902, 7566, 7788);
21. Wybrać dane tych pracowników, których nazwiska zaczynają się na S
SELECT empno, ename FROM emp WHERE ename like 'S%';
22. Wybrać dane tych pracowników, których nazwiska są czteroliterowe
SELECT * FROM emp WHERE length(ename) = 4;
23. Wybrać dane tych pracowników, którzy nie posiadają szefa
SELECT * FROM emp WHERE mgr is null;
24. Wybrać dane tych pracowników, których zarobki są poza przedziałem <1000,2000>
SELECT empno , sal FROM emp WHERE sal not between 1000 and 2000;
25. Wybrać dane tych pracowników, których nazwiska nie zaczynają się na M
SELECT empno, ename FROM emp WHERE ename not like 'M%';
26. Wybrać dane tych pracowników, którzy mają szefa
SELECT * FROM emp WHERE mgr is not null;
27. Wybrać dane tych pracowników zatrudnionych na stanowisku CLERK których zarobki SAL mieszczą się w przedziale >1000 <2000
SELECT * FROM emp WHERE job='CLERK' AND sal between 1000 and 2000;
28. Wybrać dane tych pracowników albo zatrudnionych na stanowisku CLERK albo ich zarobki SAL mieszczą się w przedziale <1000 2000)
SELECT * FROM emp WHERE job='CLERK' OR sal between 1000 and 2000;
29. Wybrać wszystkich pracowników zatrudnionych na stanowisku MANAGER z pensją powyżej 1500 oraz wszystkich pracowników na stanowisku SALESMAN
SELECT * FROM emp WHERE job='SALESMAN' OR (job='MANAGER' and sal >1500);
30. Wybrać wszystkich pracowników zatrudnionych na stanowisku MANAGER lub na stanowisku SALESMAN lecz zarabiających powyżej 1500
SELECT * FROM emp WHERE (job='SALESMAN' OR job='MANAGER') and sal >1500;
31. Wybrać wszystkich pracowników zatrudnionych na stanowisku MANAGER ze wszystkich departamentów wraz ze wszystkimi pracownikami zatrudnionymi na stanowisku CLERK w departamencie 10
SELECT * FROM emp WHERE job='MANAGER' OR (job='CLERK' and deptno =10);
-------------------------------------------------------------------------------------------------------------
32. Wybrać wszystkie dane z tabeli SALGRADE
SELECT * FROM salgrade;
33. Wybrać wszystkie dane z tabeli DEPT
SELECT * FROM dept;
34. Wybrać dane tych pracowników, których zarobki mieszczą się w przedziale <1000,2000>
SELECT * FROM emp WHERE sal between 1000 and 2000;
35. Wybrać numery i nazwy departamentów sortując według numerów departamentów
SELECT deptno, dname FROM dept ORDER BY 1;
36. Wybrać wszystkie wzajemnie różne stanowiska pracy
SELECT DISTINCT job FROM emp;
SELECT job FROM emp group by job;
37. Wybrać dane pracowników zatrudnionych w departamentach 10 i 20 we kolejności alfabetycznej ich nazwisk
SELECT * FROM emp WHERE deptno in (10,20) ORDER BY ename;
38. Wybrać nazwiska i stanowiska pracy wszystkich pracowników z departamentu 20 zatrudnionych na stanowisku CLERK
SELECT job , ename FROM emp WHERE deptno ='20' AND job ='CLERK';
39. Wybrać nazwiska tych pracowników , w których nazwisku występuje ciąg "TH" lub "LL"
SELECT ename FROM emp WHERE ename LIKE '%TH%' OR ename LIKE '%LL%';
40. Wybrać nazwisko, stanowisko i pensję pracowników, którzy posiadają szefa
SELECT ename , job , sal FROM emp WHERE mgr is not null;
41. Wybrać nazwiska i całkowite roczne zarobki wszystkich pracowników
SELECT 12*sal + NVL(comm, 0) As 'Roczna pensja' FROM emp;
42. Wybrać ENAME, DEPTNO i HIREDATE tych pracowników, którzy zostali zatrudnieni w 1980r.
SELECT ename, deptno, hiredate FROM emp WHERE hiredate like '80%';
43. Wybrać nazwiska, roczna pensję oraz prowizję tych wszystkich sprzedawców, których miesięczna pensja przekracza prowizję. Wyniki posortować według malejących zarobków, potem nazwisk
SELECT ename , sal*12, comm FROM emp WHERE sal > comm ORDER BY sal DESC, ename;
II. WYBIERANIE DANYCH Z WIELU TABEL
1. Połącz dane z tabeli EMP i DEPT przy pomocy warunku złączenia w WHERE.
SELECT * FROM emp , dept WHERE emp.deptno= dept.deptno;
2. Połącz dane z tabeli EMP i DEPT przy pomocy INNER JOIN.
SELECT * FROM emp INNER JOIN dept ON dept.deptno= emp.deptno;
3. Wybierz nazwiska oraz nazwy departamentów wszystkich pracowników w kolejności alfabetycznej.
SELECT emp.ename , dept.deptno FROM emp , dept WHERE emp.deptno= dept.deptno;
4. Wybierz nazwiska wszystkich pracowników wraz z numerami i nazwami departamentów w których są zatrudnieni.
SELECT emp.ename , dept.deptno , dept.dname FROM emp , dept WHERE emp.deptno= dept.deptno;
5. Dla pracowników o miesięcznej pensji powyżej 1500 podaj ich nazwiska, miejsca usytuowania ich departamentów oraz nazwy tych departamentów.
SELECT emp.ename , dept.loc , dept.dname FROM emp , dept WHERE emp.deptno= dept.deptno;
6. Utwórz listę pracowników podając ich nazwisko, zawód, pensję i stopień zaszeregowania.
SELECT emp.ename , emp.job , emp.sal, salgrade.grade FROM emp, salgrade;
7. Wybierz informacje o pracownikach, których zarobki odpowiadają klasie 3.
SELECT emp.ename , emp.job , emp.sal, salgrade.grade FROM emp, salgrade WHERE salgrade.grade= '3';
8. Wybierz pracowników zatrudnionych w Dallas.
SELECT emp.* FROM emp , dept WHERE emp.deptno= dept.deptno AND dept.loc= 'DALLAS';
9. Wybierz nazwiska pracowników, nazwy działów i stopnie zaszeregowania.
SELECT emp.ename , dept.dname , salgrade.grade FROM emp, salgrade, dept WHERE emp.deptno= dept.deptno;
10. Wypisz dane wszystkich działów oraz ich pracowników tak, aby dane działu pojawiły się, nawet jeśli nie ma w dziale żadnego pracownika.
SELECT * FROM emp , dept WHERE emp.deptno(+)= dept.deptno;
----------------------------------------------------------------------------------------------------------
11. Wybierz nazwiska i nazwę działu dla pracowników z działu 30 oraz w tym samym zapytaniu nazwę działu 20 bez nazwisk zatrudnionych tam pracowników.
SELECT distinct dept.deptno , dept.dname ,
case when dept.deptno= '20' then null else ename end ename
FROM emp , dept WHERE emp.deptno= dept.deptno and dept.deptno in (20,30);
-----------------
SELECT ename, loc, dname, dept.deptno FROM emp INNER JOIN dept ON emp.deptno = dept.deptno WHERE sept.deptno != 20
UNION SELECT ' ' Prac, loc, dname, dept.deptno
FROM emp INNER JOIN dept
ON emp.deptno = dept.deptno
12. Wypisz stanowiska występujące w dziale 10 oraz 30.
SELECT DISTINCT emp.job FROM emp , dept WHERE emp.deptno= dept.deptno and dept.deptno in (10,30);
13. Wybierz pracowników, którzy zarabiają mniej od swoich kierowników.
SELECT b.ename Pracownik, a.ename Szef FROM emp a, emp b WHERE a.empno= b.MGR and a.sal> b.sal;
14. Dla każdego pracownika wypisz jego nazwisko oraz nazwisko jego szefa. Posortuj według nazwiska szefa, kolumny nazwij odpowiednio Pracownik i Szef.;
SELECT b.ename Pracownik, a.ename Szef FROM emp a, emp b WHERE a.empno(+)= b.MGR;

III. FUNKCJE GRUPUJĄCE
1. Oblicz średni zarobek w firmie.
SELECT AVG(sal) FROM emp;
2. Znajdź minimalne zarobki na stanowisku CLERK.
SELECT MIN(sal) FROM emp WHERE job= 'CLERK';
3. Znajdź ilu pracowników zatrudniono w departamencie 20.
SELECT count(*) FROM emp WHERE deptno= '20';
4. Obliczyć średnie zarobki na każdym ze stanowisk pracy.
SELECT job,avg(sal) FROM emp group by job;
5. Obliczyć średnie zarobki na każdym ze stanowisk pracy z wyjątkiem stanowiska MANAGER.
SELECT job,avg(sal) FROM emp WHERE job<> 'MANAGER' group by job;
6. Obliczyć średnie zarobki na każdym ze stanowisk pracy w każdym departamencie.
SELECT job, deptno, avg(sal) FROM emp group by job, deptno;
7. Dla każdego stanowiska oblicz maksymalne zarobki..
SELECT job, MAX(sal) FROM emp group by job;
8. Wybrać średnie zarobki tylko tych departamentów, które zatrudniają więcej niż trzech pracowników.
SELECT AVG(emp.sal) , dept.deptno FROM emp , dept WHERE emp.deptno = dept.deptno group by dept.deptno having count(*)> 3;
9. Wybrać tylko te stanowiska, na których średni zarobek wynosi 3000 lub więcej.
SELECT job,avg(sal) FROM emp group by job having avg(sal)> 3000;
-------------------------------------------------------------------------------------------------------------
10. Znajdź średnie miesięczne pensje oraz średnie roczne zarobki dla każdego stanowiska, pamiętaj
o prowizji.
SELECT job,avg(sal),avg(12*sal + NVL(comm, 0)) avg_rok FROM emp group by job;
11. Znajdź różnicę miedzy najwyższą i najniższa pensją.
SELECT MAX(sal)-MIN(sal) FROM emp;
12. Znajdź departamenty zatrudniające powyżej trzech pracowników.
SELECT dept.deptno , count(*) FROM emp , dept WHERE emp.deptno = dept.deptno GROUP BY dept.deptno HAVING count(*)> 3;
13. Sprawdź, czy wszystkie numery pracowników są rzeczywiście wzajemnie różne.
SELECT count(1) , empno FROM emp GROUP BY empno having count(1)> 1;
14. Podaj najniższe pensje wypłacane podwładnym swoich kierowników. Wyeliminuj grupy o minimalnych zarobkach
niższych niż 1000. Uporządkuj według pensji.
SELECT min(b.sal), a.ename Szef FROM emp a, emp b WHERE a.empno= b.MGR GROUP BY a.ename having min(b.sal) < 1000 ORDER BY min(b.sal);

-------------------------------------------------------------------------------------------------------------
15. Wypisz ilu pracowników ma dział mający siedzibę w DALLAS.
SELECT count(*) FROM emp, dept WHERE emp.deptno = dept.deptno AND dept.loc= 'DALLAS';
16. Podaj maksymalne zarobki dla każdej klasy zarobkowej.
SELECT grade, max(emp.sal) FROM salgrade, emp WHERE emp.sal between salgrade.losal and salgrade.hisal GROUP BY grade ORDER BY grade;
17. Sprawdź, które wartości zarobków powtarzają się.
SELECT sal FROM emp GROUP BY sal HAVING count(sal)> 1;
18. Podaj średni zarobek pracowników z drugiej klasy zarobkowej
SELECT grade, avg(emp.sal) FROM salgrade, emp WHERE emp.sal between salgrade.losal and salgrade.hisal GROUP BY grade having grade = 2;
19. Sprawdź ilu podwładnych ma każdy kierownik.
SELECT count(*), a.ename Szef FROM emp a, emp b WHERE a.empno= b.MGR GROUP BY a.ename;
20. Podaj sumę, którą zarabiają razem wszyscy pracownicy z pierwszej klasy zarobkowej.\
SELECT grade, sum(emp.sal) FROM salgrade, emp WHERE emp.sal between salgrade.losal and salgrade.hisal GROUP BY grade having grade = 1;

IV. PODZAPYTANIA
1. Znaleźć pracowników z pensją równą minimalnemu zarobkowi w firmie.
SELECT * FROM emp WHERE sal = (SELECT MIN(sal) FROM emp);
2. Znaleźć wszystkich pracowników zatrudnionych na tym samym stanowisku co BLAKE.
SELECT * FROM emp WHERE job = (SELECT job FROM emp WHERE ename = 'BLAKE');
3. Znaleźć pracowników o pensjach z listy najniższych zarobków osiągalnych w departamentach.
SELECT * FROM emp WHERE sal in (SELECT MIN(sal) FROM emp GROUP BY deptno);
4. Znaleźć pracowników o najniższych zarobkach w ich departamentach.
SELECT * FROM emp WHERE deptno , sal in (SELECT deptno , MIN(sal) FROM emp GROUP BY deptno);
5. Stosując operator ANY wybrać pracowników zarabiających powyżej najniższego zarobku z departamentu 30.
SELECT * FROM emp WHERE sal > ANY (SELECT min(sal) FROM emp WHERE deptno ='30');
6. Znaleźć pracowników, których zarobki są wyższe od pensji każdego pracownika z departamentu 30.
SELECT * FROM emp WHERE sal > ALL ( SELECT sal FROM emp WHERE deptno='30');
7. Wybrać departamenty, których średnie zarobki przekraczają średni zarobek departamentu 30.
SELECT deptno , avg(sal) FROM emp GROUP BY deptno having avg(sal) > (SELECT avg(sal) FROM emp WHERE deptno='30');
8. Znaleźć stanowisko, na którym są najwyższe średnie zarobki.
SELECT deptno , avg(sal) FROM emp GROUP BY deptno HAVING avg(sal) = (SELECT max(avg(sal)) FROM emp GROUP BY deptno);
9. Znaleźć pracowników, których zarobki przekraczają najwyższe pensje z departamentu SALES.
SELECT * FROM emp WHERE sal > (SELECT max(emp.sal) FROM emp , dept WHERE emp.deptno = dept.deptno AND dname='SALES');
10. Znaleźć pracowników, którzy zarabiają powyżej średniej w ich departamentach.
SELECT a.deptno , a.ename, a.sal FROM emp a WHERE sal > (SELECT AVG(sal) FROM Emp b WHERE b.deptno = a.deptno);
11. Znaleźć pracowników, którzy posiadają podwładnych za pomocą operatora EXISTS.
SELECT * FROM emp a , emp b WHERE a.empno= b.MGR;
SELECT count(*), a.ename Szef FROM emp a, emp b WHERE a.empno= b.MGR GROUP BY a.ename;
12. Znaleźć pracowników, których departament nie występuje w tabeli DEPT.
SELECT * FROM emp , dept WHERE NOT EXISTS ( emp.deptno = dept.deptno;
-------------------------------------------------------------------------------------------------------------
13. Dla każdego stanowiska wypisać maksymalną pensję z dopiskiem "Maksymalna" oraz minimalną z dopiskiem "Minimalna". Posortować wynik według stanowiska.

14. Napisz zapytanie zwracające procentowy udział liczby pracowników w każdym dziale.

15. Wskazać dla każdego departamentu ostatnio zatrudnionych pracowników. Uporządkować według dat zatrudnienia.

16. Podać ENAME, SALARY i DEPTNO dla pracowników, których zarobki przekraczają średnią ich departamentów.

17. Stosując podzapytanie znaleźć departamenty, w których nikt nie pracuje.

18. Wypisz nazwiska, numery departamentów, daty zatrudnienia wszystkich pracowników. Przy ostatnio zatrudnionym umieść gwiazdkę w dodatkowej kolumnie nazwanej MaxDate. Posortuj wyniki po nazwiskach.

19. Dla każdego pracownika wypisz nazwisko, płacę i numer departamentu oraz srednią płacę w jego departamencie.

20. Znajdź nazwiska trzech najlepiej zarabiających pracowników w firmie.


Wyszukiwarka

Podobne podstrony:
SQL zadania z rozwiazaniami
zadania sql
Analiza Matematyczna 2 Zadania
sql framework aug94
ZARZĄDZANIE FINANSAMI cwiczenia zadania rozwiazaneE
ZADANIE (11)
zadanie domowe zestaw
sql
Zadania 1
W 4 zadanie wartswa 2013
Sprawdzian 5 kl 2 matematyka zadania
zadania1
Zadania 2015 9
Logika W8 zadania

więcej podobnych podstron