Mam problem podczas pokazywania wyników złożonego zapytania z podzapytaniami oraz łączeniem tabel.
Język: Oracle SQL
Środowisko: SQL Developer
Schemat tabel poniżej:
Cały plik: wyszukać po frazie "zadania select dla eds" w google. 1 wynik. Polecam do ćwiczeń ogólnie ten zestaw.
Dla tego zadania podaje tylko istotne objaśnienia tabel:
EMP - tabela z pracownikami:
ename - nazwa pracownika
sal - pensja pracownika
deptno - numer departamentu, do którego pracownik jest przypisany. Klucz obcy tabeli Dept
DEPT - tabela departamentów:
deptno - numer departamentu, do którego pracownik jest przypisany. Klucz główny.
dname - nazwa departamentu
SALGRADE
Grade – grupa zaszeregowania. Klucz główny.
Losal – minimalna stawka płacy w danej grupie
Hisal – maksymalna stawka płacy w danej grupie
Treść zadania: Podaj nazwisko, pensję i nazwę departamentu pracowników, których płaca przekracza średnią ich grup zarobkowych. Moje zapytanie (troche rozszerzyłem, żeby najpierw sprawdzić czy działa - niestety nie działa):
SELECT ename, sal, dname,grade
from emp
INNER JOIN dept
ON emp.deptno=dept.deptno
INNER JOIN salgrade
ON emp.sal BETWEEN losal AND hisal
WHERE sal > ANY(SELECT avg(sal)
FROM emp
INNER JOIN salgrade
ON sal BETWEEN losal AND hisal
group by grade)
order by grade desc, sal desc;
Dostaję:
Więc zdecydowanie zapytanie zwraca za dużo wyników.
Średnie zarobki dla grup :
I tutaj moje pytania:
1. Co robię źle, że nie zwraca poprawnie wyników?
Jakikolwiek operator logiczny nie wstawię po "WHERE Sal" i tak dostaję to samo.
2. Pomijając błąd, czy moje zapytania są bardzo nieoptymalne?
Dziękuję z góry za każdą podpowiedź.