ZAPYTANIA SQL 1
Wybrać numery departamentów, nazwiska pracowników oraz numery pracownicze ich szefów z tabeli EMP
SELECT deptno, ename, empno FROM emp;
Wybrać wszystkie kolumny z tabeli EMP
SELECT * FROM emp;
Wyliczyć roczną pensję podstawową dla każdego pracownika
SELECT ename, sal*12 AS "Roczna pensja" FROM emp;
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;
Wybrane wyrażenie SAL*12 zaetykietować nagłówkiem ROCZNA
SELECT ename, sal*12 AS "ROCZNA" FROM emp;
Wybrane wyrażenie SAL*12 zaetykietować nagłówkiem Roczna Pensja
SELECT ename, sal*12 AS "Roczna pensja" FROM emp;
Połączyć EMPNO i nazwisko, opatrzyć je nagłówkiem EMPLOYEE
SELECT empno || ename AS "EMPLOYEE" FROM emp;
Utworzyć zapytanie zwracające wynik w postaci np. „Kowalski pracuje w dziale 20”.
SELECT ename || ' pracuje w dziale ' || empno AS "Praca" FROM emp;
Wyliczyć roczną pensję całkowitą dla każdego pracownika
SELECT ename, sal*12 + NVL(comm, 0) AS "Pensja całkowita" FROM emp;
Wyświetlić wszystkie numery departamentów występujące w tabeli EMP
SELECT deptno FROM emp;
Wyświetlić wszystkie różne numery departamentów występujące w tabeli EMP
SELECT DISTINCT deptno FROM emp;
Wybrać wszystkie wzajemnie różne kombinacje wartości DEPTNO i JOB
SELECT DISTINCT empno || job FROM emp;
Posortować wszystkie dane tabeli EMP według ENAME
SELECT * FROM emp
ORDER BY Ename DESC;
Posortować malejąco wszystkie dane tabeli EMP według daty ich zatrudnienia począwszy od ostatnio zatrudnionych
SELECT * FROM emp
ORDER BY hiredate DESC;
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;
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';
Wybrać wszystkie nazwy i numery departamentów większe od nr 20
SELECT dname, deptno
FROM dept
WHERE deptno>20;
Wybrać pracowników, których prowizja przekracza miesięczną pensję
SELECT ename, sal, comm FROM emp
WHERE comm>sal;
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;
Wybrać dane pracowników, których bezpośrednimi szefami są 7902,7566 lub 7788
SELECT * FROM emp
WHERE MGR in ('7902','7566','7788');
Wybrać dane tych pracowników, których nazwiska zaczynają się na S
SELECT * FROM emp
WHERE ename LIKE 'S%';
Wybrać dane tych pracowników, których nazwiska są czteroliterowe
SELECT * FROM emp WHERE length(ename) = 4;
Wybrać dane tych pracowników, którzy nie posiadają szefa
SELECT * FROM emp
WHERE mgr IS NULL;
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;
Wybrać dane tych pracowników, których nazwiska nie zaczynają się na M
SELECT * FROM emp
WHERE ename NOT LIKE 'M%';
Wybrać dane tych pracowników, którzy mają szefa
SELECT * FROM emp
WHERE mgr IS NOT NULL;
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;
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;
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';
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;
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;
-------------------------------------------------------------------------------------------------------------
Wybrać wszystkie dane z tabeli SALGRADE
SELECT * FROM salgrade;
Wybrać wszystkie dane z tabeli DEPT
SELECT * FROM dept;
Wybrać dane tych pracowników, których zarobki mieszczą się w przedziale <1000,2000>
SELECT * FROM emp
WHERE sal BETWEEN 1000 AND 2000;
Wybrać numery i nazwy departamentów sortując według numerów departamentów
SELECT * FROM dept
ORDER BY deptno;
Wybrać wszystkie wzajemnie różne stanowiska pracy
SELECT DISTINCT job FROM emp;
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;
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';
Wybrać nazwiska tych pracowników , w których nazwisku występuje ciąg „TH” lub „LL”
Wybrać nazwisko, stanowisko i pensję pracowników, którzy posiadają szefa
SELECT ename, job FROM emp
WHERE mgr IS NOT NULL;
Wybrać nazwiska i całkowite roczne zarobki wszystkich pracowników
SELECT ename, sal*12 + NVL(comm, 0) AS "Pensja całkowita" FROM emp;
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';
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;
Wybieranie danych z wielu tabel
Połącz dane z tabeli EMP i DEPT przy pomocy warunku złączenia w WHERE.
SELECT * FROM emp, dept
WHERE emp.deptno= dept.deptno;
Połącz dane z tabeli EMP i DEPT przy pomocy INNER JOIN.
SELECT * FROM emp INNER JOIN dept
ON emp.deptno= dept.deptno;
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;
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
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;
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;
Wybierz informacje o pracownikach, których zarobki odpowiadają klasie 3.
SELECT * FROM emp LEFT JOIN salgrade
ON salgrade.grade = '3';
Wybierz pracowników zatrudnionych w Dallas.
SELECT * FROM emp INNER JOIN dept
ON emp.deptno= dept.deptno
WHERE dept.loc='DALLAS';
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;
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;
----------------------------------------------------------------------------------------------------------
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';
Wypisz stanowiska występujące w dziale 10 oraz 30.
SELECT DISTINCT job, deptno FROM emp
WHERE deptno = '10' OR deptno = '30';
Wybierz pracowników, którzy zarabiają mniej od swoich kierowników.
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;
FUNKCJE GRUPUJĄCE
Oblicz średni zarobek w firmie.
SELECT AVG(sal) FROM emp;
Znajdź minimalne zarobki na stanowisku CLERK.
SELECT MIN(sal) FROM emp WHERE job = 'CLERK'
Znajdź ilu pracowników zatrudniono w departamencie 20.
SELECT COUNT(emp.empno) FROM emp
WHERE deptno = '20';
Obliczyć średnie zarobki na każdym ze stanowisk pracy.
Obliczyć średnie zarobki na każdym ze stanowisk pracy z wyjątkiem stanowiska MANAGER.
Obliczyć średnie zarobki na każdym ze stanowisk pracy w każdym departamencie.
Dla każdego stanowiska oblicz maksymalne zarobki..
Wybrać średnie zarobki tylko tych departamentów, które zatrudniają więcej niż trzech pracowników.
Wybrać tylko te stanowiska, na których średni zarobek wynosi 3000 lub więcej.
-------------------------------------------------------------------------------------------------------------
Znajdź średnie miesięczne pensje oraz średnie roczne zarobki dla każdego stanowiska, pamiętaj o prowizji.
Znajdź różnicę miedzy najwyższą i najniższa pensją.
Znajdź departamenty zatrudniające powyżej trzech pracowników.
Sprawdź, czy wszystkie numery pracowników są rzeczywiście wzajemnie różne.
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.
-------------------------------------------------------------------------------------------------------------
Wypisz ilu pracowników ma dział mający siedzibę w DALLAS.
Podaj maksymalne zarobki dla każdej klasy zarobkowej.
Sprawdź, które wartości zarobków powtarzają się.
Podaj średni zarobek pracowników z drugiej klasy zarobkowej
Sprawdź ilu podwładnych ma każdy kierownik.
Podaj sumę, którą zarabiają razem wszyscy pracownicy z pierwszej klasy zarobkowej.
Podzapytania
Znaleźć pracowników z pensją równą minimalnemu zarobkowi w firmie.
SELECT * FROM emp
WHERE emp.sal=(SELECT MIN(sal) FROM emp);
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');
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)
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)
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');
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')
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
Znaleźć stanowisko, na którym są najwyższe średnie zarobki.
Znaleźć pracowników, których zarobki przekraczają najwyższe pensje z departamentu SALES.
Znaleźć pracowników, którzy zarabiają powyżej średniej w ich departamentach.
Znaleźć pracowników, którzy posiadają podwładnych za pomocą operatora EXISTS.
Znaleźć pracowników, których departament nie występuje w tabeli DEPT.
-------------------------------------------------------------------------------------------------------------
Dla każdego stanowiska wypisać maksymalną pensję z dopiskiem „Maksymalna” oraz minimalną z dopiskiem „Minimalna”. Posortować wynik według stanowiska.
Napisz zapytanie zwracające procentowy udział liczby pracowników w każdym dziale.
Wskazać dla każdego departamentu ostatnio zatrudnionych pracowników. Uporządkować według dat zatrudnienia.
Podać ENAME, SALARY i DEPTNO dla pracowników, których zarobki przekraczają średnią ich departamentów.
Stosując podzapytanie znaleźć departamenty, w których nikt nie pracuje.