Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Temat 5
- SQL – proste zapytania
- 1. Wybierz numery departamentów, nazwiska pracowników oraz numery pracownicze ich szefów z tabeli EMP.
- SELECT ename, deptno, mgr
- FROM emp;
- 2. Wybierz wszystkie kolumny z tabeli EMP.
- SELECT *
- FROM emp;
- 3. Wylicz roczną pensję podstawową dla każdego pracownika.
- SELECT ename, sal * 12
- FROM emp;
- 4. Wylicz roczną pensję podstawową dla każdego pracownika gdyby każdemu dać podwyżkę o 250.
- SELECT ename, (sal + 250) * 12
- FROM emp;
- 5. Wybrane wyrażenie SAL*12 zaetykietuj nagłówkiem ROCZNA.
- SELECT ename, sal*12 AS roczna
- FROM emp;
- 6. Wybrane wyrażenie SAL*12 zaetykietuj nagłówkiem R PENSJA.
- SELECT ename, sal*12 AS ”r pensja”
- FROM emp;
- Jeżeli chcemy użyć spacji lub innych znaków specjalnych w etykiecie kolumny, to używamy cudzysłowu.
- 7. Połącz EMPNO i nazwisko, opatrz je nagłówkiem EMPLOYEE.
- SELECT empno || ename AS employee
- FROM emp;
- W MS SQL istnieje konieczność konwertowania wartości numerycznych do tekstowych (w Oracle nie). Operatorem konkatenacji jest w tym wypadku + a nie ||
- SELECT CONVERT(VARCHAR, empno) + ename AS employee
- FROM emp;
- 8. Utwórz zapytanie zwracające wynik w postaci np. „Kowalski pracuje w dziale 20”.
- SELECT ename || ‘ pracuje w dziale nr ' || deptno
- FROM emp;
- MS SQL:
- SELECT ename + ‘ pracuje w dziale nr ' + CONVERT(VARCHAR,deptno)
- FROM emp;
- 9. Wylicz roczną pensję całkowitą dla każdego pracownika (z uwzględnieniem prowizji).
- SELECT ename, (sal * 12 + NVL(comm,0))
- FROM emp;
- Użycie funkcji NVL jest niezbędne, gdyż kolumna comm u niektórych pracowników zawiera wartość NULL. Wykonywanie operacji arytmetycznych na wartości NULL daje również NULL np. 2 + NULL = NULL, natomiast 2 + NVL(NULL, 0) = 2.
- W MS SQL odpowiednikiem funkcji NVL jest ISNULL:
- SELECT ename, (sal * 12 + ISNULL(comm,0))
- FROM emp;
- 10. Wyświetl wszystkie numery departamentów występujące w tabeli EMP.
- SELECT deptno
- FROM Emp;
- 11. Wyświetl wszystkie różne numery departamentów występujące w tabeli EMP.
- SELECT DISTINCT deptno
- FROM Emp;
- 12. Wybierz wszystkie wzajemnie różne kombinacje wartości DEPTNO i JOB.
- SELECT DISTINCT deptno, job
- FROM Emp;
- 13. Posortuj wszystkie dane tabeli EMP według ENAME.
- SELECT *
- FROM emp
- ORDER BY ename;
- 14. Posortuj malejąco wszystkie dane tabeli EMP według daty ich zatrudnienia począwszy od ostatnio zatrudnionych.
- SELECT * FROM emp ORDER BY hiredate DESC;
- 15. Posortuj 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
- FROM emp
- ORDER BY deptno, sal DESC;
- Domyślnie przyjęty jest porządek rosnący i dlatego nie musimy pisać ASC po deptno.
- 16. Wybierz nazwiska, numery, stanowiska pracy i numery departamentów wszystkich pracowników zatrudnionych na stanowisku CLERK.
- SELECT ename, job, sal, deptno FROM emp
- WHERE job = 'CLERK';
- 17. Wybierz wszystkie nazwy i numery departamentów większe od nr 20.
- SELECT deptno, dname
- FROM dept
- WHERE deptno > 20;
- 18. Wybierz pracowników, których prowizja przekracza miesięczną pensję.
- SELECT *
- FROM emp
- WHERE comm > sal;
- 19. Wybierz dane tych pracowników, których zarobki mieszczą się pomiędzy 1000 a 2000.
- SELECT *
- FROM emp
- WHERE sal BETWEEN 1000 AND 2000;
- 20. Wybierz dane pracowników, których bezpośrednimi szefami są 7902,7566 lub 7788.
- SELECT *
- FROM emp
- WHERE mgr IN (7902, 7566, 7788);
- Rozwiązanie bez użycia IN:
- SELECT * FROM emp WHERE mgr = 7902 OR mgr = 7566 OR mgr = 7788;
- 21. Wybierz dane tych pracowników, których nazwiska zaczynają się na S.
- SELECT *
- FROM emp
- WHERE ename LIKE 'S%';
- 22. Wybierz dane tych pracowników, których nazwiska są czteroliterowe.
- SELECT *
- FROM emp
- WHERE LENGTH(ename) = 4;
- MS SQL:
- SELECT *
- FROM emp
- WHERE LEN(ename) = 4;
- Inne rozwiązanie:
- SELECT *
- FROM emp
- WHERE ename LIKE ‘____’
- 23. Wybierz dane tych pracowników, którzy nie posiadają szefa.
- SELECT *
- FROM emp
- WHERE mgr IS NULL;
- 24. Wybierz dane tych pracowników, których zarobki są poza przedziałem <1000,2000>.
- SELECT *
- FROM emp
- WHERE NOT sal BETWEEN 1000 AND 2000;
- Rozwiązanie bez użycia BETWEEN:
- SELECT * FROM emp
- WHERE sal < 1000 OR sal > 2000;
- 25. Wybierz dane tych pracowników, których nazwiska nie zaczynają się na M.
- SELECT *
- FROM emp
- WHERE NOT ename LIKE 'M%';
- Lub:
- SELECT * FROM emp
- FROM emp
- WHERE ename NOT LIKE 'M%';
- 26. Wybierz dane tych pracowników, którzy mają szefa.
- SELECT *
- FROM emp
- WHERE mgr IS NOT NULL;
- 27. Wybierz 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 >= 1000 AND sal < 2000;
- 28. Wybierz dane pracowników zatrudnionych na stanowisku CLERK albo takich, których zarobki SAL mieszczą się w przedziale <1000.2000).
- SELECT *
- FROM emp
- WHERE job = 'CLERK' OR (sal >= 1000 AND sal < 2000);
- 29. Wybierz wszystkich pracowników zatrudnionych na stanowisku MANAGER z pensją powyżej 1500 oraz wszystkich pracowników na stanowisku SALESMAN, niezależnie od pensji.
- SELECT *
- FROM emp
- WHERE (sal > 1500 AND job = 'MANAGER') OR job = 'SALESMAN';
- 30. Wybierz 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);
- 31. Wybierz 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. Wybierz wszystkie dane z tabeli SALGRADE.
- SELECT *
- FROM salgrade;
- 33. Wybierz wszystkie dane z tabeli DEPT.
- SELECT *
- FROM dept;
- 34. Wybierz numery i nazwy departamentów sortując według numerów departamentów.
- SELECT deptno, dname
- FROM dept
- ORDER BY deptno;
- 35. Wybierz wszystkie wzajemnie różne stanowiska pracy.
- SELECT DISTINCT job
- FROM emp;
- 36. Wybierz 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;
- 37. Wybierz nazwiska 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%’
- 38. Wybierz ENAME, DEPTNO i HIREDATE tych pracowników, którzy zostali zatrudnieni w 1980 r.
- SELECT ename, deptno, hiredate
- FROM emp
- WHERE hiredate >= ‘01/01/80’ AND hiredate <= ‘31/12/80’
- Format daty może zależeć od ustawień serwera. Warto wcześniej sprawdzić, jaki format jest ustawiony na serwerze lub lepiej, użyć funkcji konwertujących / porównujących daty. MS SQL:
- SELECT ename, deptno, hiredate
- FROM emp
- WHERE YEAR(hiredate) = 1980;
- Oracle:
- SELECT ename, deptno, hiredate
- FROM emp
- WHERE EXTRACT (YEAR FROM hiredate) = 1980;
- 39. Wybierz nazwiska, roczną pensję oraz prowizję tych wszystkich sprzedawców, których miesięczna pensja przekracza prowizję. Wyniki posortuj według malejących zarobków, potem nazwisk.
- SELECT ename, sal * 12, comm
- FROM emp
- WHERE sal > NVL(comm,0)
- ORDER BY sal DESC, ename;
- MS SQL
- SELECT ename, sal * 12, comm
- FROM emp
- WHERE sal > ISNULL(comm,0)
- ORDER BY sal DESC, ename;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement