Zapytania SQLPL 1


  1. ZAPYTANIA SQL 1

  1. Wybrać numery departamentów, nazwiska pracowników oraz numery pracownicze ich szefów z tabeli EMP

SELECT deptno, ename, empno FROM emp;

  1. Wybrać wszystkie kolumny z tabeli EMP

SELECT * FROM emp;

  1. Wyliczyć roczną pensję podstawową dla każdego pracownika

SELECT ename, sal*12 AS "Roczna pensja" FROM emp;

  1. Wyliczyć roczną pensję podstawową dla każdego pracownika gdyby każdemu dać podwyżkę o 250

SELECT ename, (sal*12)+250 AS "Roczna pensja" FROM emp;

  1. Wybrane wyrażenie SAL*12 zaetykietować nagłówkiem ROCZNA

SELECT ename, sal*12 AS "ROCZNA" FROM emp;

  1. Wybrane wyrażenie SAL*12 zaetykietować nagłówkiem Roczna Pensja

SELECT ename, sal*12 AS "Roczna pensja" FROM emp;

  1. Połączyć EMPNO i nazwisko, opatrzyć je nagłówkiem EMPLOYEE

SELECT empno || ename AS "EMPLOYEE" FROM emp;

  1. Utworzyć zapytanie zwracające wynik w postaci np. „Kowalski pracuje w dziale 20”.

SELECT ename || ' pracuje w dziale ' || empno AS "Praca" FROM emp;

  1. Wyliczyć roczną pensję całkowitą dla każdego pracownika

SELECT ename, sal*12 + NVL(comm, 0) AS "Pensja całkowita" FROM emp;

  1. Wyświetlić wszystkie numery departamentów występujące w tabeli EMP

SELECT deptno FROM emp;

  1. Wyświetlić wszystkie różne numery departamentów występujące w tabeli EMP

SELECT DISTINCT deptno FROM emp;

  1. Wybrać wszystkie wzajemnie różne kombinacje wartości DEPTNO i JOB

SELECT DISTINCT empno || job FROM emp;

  1. Posortować wszystkie dane tabeli EMP według ENAME

SELECT * FROM emp

ORDER BY Ename DESC;

  1. Posortować malejąco wszystkie dane tabeli EMP według daty ich zatrudnienia począwszy od ostatnio zatrudnionych

SELECT * FROM emp

ORDER BY hiredate DESC;

  1. 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, job, mgr, hiredate, comm, deptno FROM emp

ORDER BY deptno ASC, sal DESC;

  1. Wybrać nazwiska, numery prac., stanowiska pracy i numery departamentów wszystkich pracowników zatrudnionych na stanowisku CLERK

SELECT ename, deptno, job

FROM emp

WHERE job='CLERK';

  1. Wybrać wszystkie nazwy i numery departamentów większe od nr 20

SELECT dname, deptno

FROM dept

WHERE deptno>20;

  1. Wybrać pracowników, których prowizja przekracza miesięczną pensję

SELECT ename, sal, comm FROM emp

WHERE comm>sal;

  1. Wybrać dane tych pracowników, których zarobki mieszczą się pomiędzy 1000 a 2000.

SELECT ename FROM emp

WHERE Sal BETWEEN 1000 AND 2000;

  1. Wybrać dane pracowników, których bezpośrednimi szefami są 7902,7566 lub 7788

SELECT * FROM emp

WHERE MGR in ('7902','7566','7788');

  1. Wybrać dane tych pracowników, których nazwiska zaczynają się na S

SELECT * FROM emp

WHERE ename LIKE 'S%';

  1. Wybrać dane tych pracowników, których nazwiska są czteroliterowe

SELECT * FROM emp WHERE length(ename) = 4;

  1. Wybrać dane tych pracowników, którzy nie posiadają szefa

SELECT * FROM emp

WHERE mgr IS NULL;

  1. Wybrać dane tych pracowników, których zarobki są poza przedziałem <1000,2000>

SELECT ename FROM emp

WHERE Sal NOT BETWEEN 1000 AND 2000;

  1. Wybrać dane tych pracowników, których nazwiska nie zaczynają się na M

SELECT * FROM emp

WHERE ename NOT LIKE 'M%';

  1. Wybrać dane tych pracowników, którzy mają szefa

SELECT * FROM emp

WHERE mgr IS NOT NULL;

  1. 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;

  1. 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;

  1. 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='MANAGER' AND sal>1500 OR job='SALESMAN';

  1. Wybrać wszystkich pracowników zatrudnionych na stanowisku MANAGER lub na stanowisku SALESMAN lecz zarabiających powyżej 1500

SELECT * FROM emp

WHERE job='MANAGER' OR job='SALESMAN' AND sal>1500;

  1. 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;
-------------------------------------------------------------------------------------------------------------

  1. Wybrać wszystkie dane z tabeli SALGRADE

SELECT * FROM salgrade;

  1. Wybrać wszystkie dane z tabeli DEPT

SELECT * FROM dept;

  1. Wybrać dane tych pracowników, których zarobki mieszczą się w przedziale <1000,2000>

SELECT * FROM emp

WHERE sal BETWEEN 1000 AND 2000;

  1. Wybrać numery i nazwy departamentów sortując według numerów departamentów

SELECT * FROM dept

ORDER BY deptno;

  1. Wybrać wszystkie wzajemnie różne stanowiska pracy

SELECT DISTINCT job FROM emp;

  1. Wybrać dane pracowników zatrudnionych w departamentach 10 i 20 we kolejności alfabetycznej ich nazwisk

SELECT * FROM emp

WHERE deptno=10 OR deptno=20

ORDER BY ename;

  1. Wybrać nazwiska i stanowiska pracy wszystkich pracowników z departamentu 20 zatrudnionych na stanowisku CLERK

SELECT ename, job FROM emp

WHERE deptno=10 AND job='CLERK';

  1. Wybrać nazwiska tych pracowników , w których nazwisku występuje ciąg „TH” lub „LL”

  2. Wybrać nazwisko, stanowisko i pensję pracowników, którzy posiadają szefa

SELECT ename, job FROM emp

WHERE mgr IS NOT NULL;

  1. Wybrać nazwiska i całkowite roczne zarobki wszystkich pracowników

SELECT ename, sal*12 + NVL(comm, 0) AS "Pensja całkowita" FROM emp;

  1. Wybrać ENAME, DEPTNO i HIREDATE tych pracowników, którzy zostali zatrudnieni w 1980r.

SELECT ename, deptno, hiredate FROM emp

WHERE hiredate BETWEEN '80/01/01' AND '80/12/31';

  1. 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 AS "Roczna pensja", comm AS "Premia" FROM emp

WHERE sal>comm

ORDER BY sal DESC, ename DESC;

  1. 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;

  1. Połącz dane z tabeli EMP i DEPT przy pomocy INNER JOIN.

SELECT * FROM emp INNER JOIN dept

ON emp.deptno= dept.deptno;

  1. Wybierz nazwiska oraz nazwy departamentów wszystkich pracowników w kolejności alfabetycznej.

SELECT ename, dname FROM emp INNER JOIN dept

ON emp.deptno= dept.deptno

ORDER BY ename;

  1. Wybierz nazwiska wszystkich pracowników wraz z numerami i nazwami departamentów w których są zatrudnieni.

SELECT emp.ename, dept.dname, dept.deptno FROM emp INNER JOIN dept

ON emp.deptno= dept.deptno

  1. 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 INNER JOIN dept

ON emp.deptno= dept.deptno

WHERE emp.sal>1500;

  1. Utwórz listę pracowników podając ich nazwisko, zawód, pensję i stopień zaszeregowania.

SELECT ename, job, sal, grade FROM emp INNER JOIN salgrade

ON Sal BETWEEN Losal AND Hisal;

  1. Wybierz informacje o pracownikach, których zarobki odpowiadają klasie 3.

SELECT * FROM emp LEFT JOIN salgrade

ON salgrade.grade = '3';

  1. Wybierz pracowników zatrudnionych w Dallas.

SELECT * FROM emp INNER JOIN dept

ON emp.deptno= dept.deptno

WHERE dept.loc='DALLAS';

  1. Wybierz nazwiska pracowników, nazwy działów i stopnie zaszeregowania.

SELECT ename, dname, grade FROM emp

LEFT JOIN dept ON emp.deptno= dept.deptno

LEFT JOIN salgrade ON emp.deptno= dept.deptno;

  1. 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 dept

LEFT JOIN emp on dept.deptno = emp.deptno;

----------------------------------------------------------------------------------------------------------

  1. 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 emp.ename AS "Nazwisko", dept.dname AS "Nazwa_dzialu" FROM emp INNER JOIN dept

ON emp.deptno= dept.deptno

WHERE dept.deptno = '30';

  1. Wypisz stanowiska występujące w dziale 10 oraz 30.

SELECT DISTINCT job, deptno FROM emp

WHERE deptno = '10' OR deptno = '30';

  1. Wybierz pracowników, którzy zarabiają mniej od swoich kierowników.

  2. Dla każdego pracownika wypisz jego nazwisko oraz nazwisko jego szefa. Posortuj według nazwiska szefa, kolumny nazwijj odpowiednio Pracownik i Szef.

SELECT k.ename AS "Szef", p.ename AS "Pracownik"

FROM emp k INNER JOIN emp p

ON p.mgr = k.empno;

  1. FUNKCJE GRUPUJĄCE

  1. Oblicz średni zarobek w firmie.

SELECT AVG(sal) FROM emp;

  1. Znajdź minimalne zarobki na stanowisku CLERK.

SELECT MIN(sal) FROM emp WHERE job = 'CLERK'

  1. Znajdź ilu pracowników zatrudniono w departamencie 20.

SELECT COUNT(emp.empno) FROM emp

WHERE deptno = '20';

  1. Obliczyć średnie zarobki na każdym ze stanowisk pracy.

  2. Obliczyć średnie zarobki na każdym ze stanowisk pracy z wyjątkiem stanowiska MANAGER.

  3. Obliczyć średnie zarobki na każdym ze stanowisk pracy w każdym departamencie.

  4. Dla każdego stanowiska oblicz maksymalne zarobki..

  5. Wybrać średnie zarobki tylko tych departamentów, które zatrudniają więcej niż trzech pracowników.

  6. Wybrać tylko te stanowiska, na których średni zarobek wynosi 3000 lub więcej.
    -------------------------------------------------------------------------------------------------------------

  7. Znajdź średnie miesięczne pensje oraz średnie roczne zarobki dla każdego stanowiska, pamiętaj o prowizji.

  8. Znajdź różnicę miedzy najwyższą i najniższa pensją.

  9. Znajdź departamenty zatrudniające powyżej trzech pracowników.

  10. Sprawdź, czy wszystkie numery pracowników są rzeczywiście wzajemnie różne.

  11. 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.
    -------------------------------------------------------------------------------------------------------------

  12. Wypisz ilu pracowników ma dział mający siedzibę w DALLAS.

  13. Podaj maksymalne zarobki dla każdej klasy zarobkowej.

  14. Sprawdź, które wartości zarobków powtarzają się.

  15. Podaj średni zarobek pracowników z drugiej klasy zarobkowej

  16. Sprawdź ilu podwładnych ma każdy kierownik.

  17. Podaj sumę, którą zarabiają razem wszyscy pracownicy z pierwszej klasy zarobkowej.

  1. Podzapytania

  1. Znaleźć pracowników z pensją równą minimalnemu zarobkowi w firmie.

SELECT * FROM emp

WHERE emp.sal=(SELECT MIN(sal) FROM emp);

  1. Znaleźć wszystkich pracowników zatrudnionych na tym samym stanowisku co BLAKE.

SELECT * FROM emp

WHERE emp.job=(SELECT emp.job FROM emp WHERE emp.ename = 'BLAKE');

  1. Znaleźć pracowników o pensjach z listy najniższych zarobków osiągalnych w departamentach.

SELECT * FROM emp

WHERE emp.sal IN (SELECT MIN(emp.sal) FROM emp GROUP BY emp.deptno)

  1. Znaleźć pracowników o najniższych zarobkach w ich departamentach.

SELECT * FROM emp

WHERE (emp.deptno,emp.sal) IN (SELECT deptno, MIN(sal) FROM emp GROUP BY deptno)

  1. Stosując operator ANY wybrać pracowników zarabiających powyżej najniższego zarobku z departamentu 30.

SELECT emp.ename, emp.sal FROM emp

WHERE emp.sal > ANY (SELECT emp.sal FROM emp WHERE emp.deptno = '30');

  1. Znaleźć pracowników, których zarobki są wyższe od pensji każdego pracownika z departamentu 30.

SELECT * FROM emp

WHERE emp.sal > ALL (SELECT emp.sal FROM emp WHERE emp.deptno='30')

  1. Wybrać departamenty, których średnie zarobki przekraczają średni zarobek departamentu 30.

SELECT emp.deptno FROM emp

HAVING AVG(emp.sal) > (SELECT AVG(emp.sal) FROM emp WHERE emp.deptno='30') GROUP BY emp.deptno

  1. Znaleźć stanowisko, na którym są najwyższe średnie zarobki.

  2. Znaleźć pracowników, których zarobki przekraczają najwyższe pensje z departamentu SALES.

  3. Znaleźć pracowników, którzy zarabiają powyżej średniej w ich departamentach.

  4. Znaleźć pracowników, którzy posiadają podwładnych za pomocą operatora EXISTS.

  5. Znaleźć pracowników, których departament nie występuje w tabeli DEPT.
    -------------------------------------------------------------------------------------------------------------

  6. Dla każdego stanowiska wypisać maksymalną pensję z dopiskiem „Maksymalna” oraz minimalną z dopiskiem „Minimalna”. Posortować wynik według stanowiska.

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

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

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

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



Wyszukiwarka