Ćwiczenie 5
Podzapytania
Podzapytania zwracające jeden wiersz
Podzapytania zwracające wiele wierszy
Podzapytanie to wewnętrzny SELECT wykonywany w pierwszej kolejności, po to, aby jego wynik został użyty do wykonania zapytania zewnętrznego.
Podzapytania zwracające pojedynczą wartość można traktować jak zwykłe wyrażenie
.
SELECT kolumna_1, kolumna_2, …
FROM tabela
WHERE kolumna = (SELECT kolumna
FROM tabela
WHERE warunek)
ORDER BY kolumna;
warunki porównawcze dzielimy na operatory jednowierszowe (>, =, >=, <, <=) i operatory wielowierszowe (IN, ANY,ALL)
Podzapytania mogą występować również w klauzuli HAVING (przypominamy — klauzula HAVING odnosi się do grup wierszy). Nie istnieje limit na liczbę poziomów zagnieżdżania podzapytań
Operatory ALL i ANY można stosować w podzapytaniach zwracających więcej niż jeden wiersz. Podaje się je w klauzulach WHERE i HAVING razem z operatorami porównywania.
Operator ANY — wiersz zostanie wybrany, jeśli wyrażenie jest zgodne co najmniej z jedną wartością wybraną w podzapytaniu
Operator ALL — warunek musi być spełniony przez wszystkie wartości wybrane w podzapytaniu.
Wybierzmy wszystkich pracowników, którzy zarabiają więcej niż ktokolwiek w departamencie 30:
SELECT ENAME, SAL, DEPTNO
FROM EMP
WHERE SAL > ALL (SELECT DISTINCT SAL
FROM EMP
WHERE DEPTNO=30)
W podzapytaniu nie może występować klauzula ORDER BY. Klauzula ORDER BY może wystąpić tylko raz dla całego zapytania i wtedy musi pojawić się jako ostatnia.
Zadania do zapytań SQL:
Wybierz urzędników (CLERK) mających pensję poniżej średniej dla wszystkich
Wybierz pracowników dostających najniższą pensję.
Wybierz pracowników, których pensja jest najwyższa w departamentach
Wybierz zawody, w których średnia płaca jest wyższa niż średnia płaca w zawodzie 'MANAGER'
Wybierz wszystkich zatrudnionych na tym samym stanowisku co SMITH
Wyświetl nazwiska i daty zatrudnienia każdego pracownika zatrudnionego w tym samym departamencie co pracownik BLAKE, ale bez pracownika BLAKE.
Wyświetl nazwisko i pensję każdego pracownika, który podlega pracownikowi KING
Wyświetl numer departamentu, nazwisko i stanowisko wszystkich pracowników w departamencie RESEARCH
Znajdź stanowisko o najniższych średnich zarobkach
Znajdź tych pracowników, którzy zostali zatrudnieniu przed przyjęciem do pracy ich kierowników.
Znajdź pracowników zarabiających maksymalna pensję na ich stanowiskach pracy. Uporządkuj ich według malejących zarobków
Wskaż dla każdego departamentu najwcześniej zatrudnionych pracowników.
Uporządkuj według dat zatrudnienia
Warunek, w którym porównujemy wiele wartości
SELECT ENAME, SAL, DEPTNO
FROM EMP
WHERE (SAL,DEPTNO) IN (SELECT MAX(SAL), DEPTNO
FROM EMP
GROUP BY DEPTNO);
SQL Ćwiczenia Strona 2
Podzapytanie to polecenie SELECT zagnieżdżone w innym poleceniu SELECT
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO----- ------- --------- ----- -------- ------ ------ ------
7839 KING PRESIDENT 81/11/17 5000 10
7698 BLAKE MANAGER 7839 81/05/01 2850 30
7782 CLARK MANAGER 7839 81/06/09 2450 10
7566 JONES MANAGER 7839 81/04/02 2975 20
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7900 JAMES CLERK 7698 81/12/03 950 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7902 FORD ANALYST 7566 81/12/03 3000 20
7369 SMITH CLERK 7902 80/12/17 800 20
7788 SCOTT ANALYST 7566 82/12/09 3000 20
7876 ADAMS CLERK 7788 83/01/12 1100 20
7934 MILLER CLERK 7782 82/01/23 1300 10
DEPTNO DNAME LOC
----- ------------ --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON