Materiały:
dokumentacja – podzapytania wierszy
dokumentacja – operatory: ANY, IN, SOME, ALL, EXISTS, NOT EXISTS
dokumentacja – boczne tabele pochodne
dokumentacja – skorelowane
Przykłady:
1. podzapytania wierszy
Wyświetl nazwę stanowiska oraz imię i nazwisko pracownika, który zarabia najwięcej na danym stanowisku. Wynik posortuj alfabetycznie według nazwy stanowiska i nazwiska pracownika.
select nazwa, imie, nazwisko
from pracownicy p join stanowiska s
on s.Id_stanowisko = p.Id_stanowisko
where (p.Id_stanowisko, wynagrodzenie)= SOME
(select id_stanowisko, max(wynagrodzenie)
from pracownicy
group by id_stanowisko)
order by nazwa asc, nazwisko asc
lub
select nazwa, imie, nazwisko, p.Id_stanowisko, wynagrodzenie
from pracownicy p join stanowiska s
on s.Id_stanowisko = p.Id_stanowisko
where (p.Id_stanowisko, wynagrodzenie) in
(select id_stanowisko, max(wynagrodzenie)
from pracownicy
group by id_stanowisko)
order by nazwa asc, nazwisko asc
2.any/some:
Wyświetl dane pracowników, którzy zarabiają więcej niż którykolwiek pracownik z działu księgowości.
Select imie, nazwisko, wynagrodzenie
from pracownicy
where wynagrodzenie > any(SELECT wynagrodzenie
from pracownicy p join stanowiska s
on s.Id_stanowisko = p.Id_stanowisko
where s.nazwa = „Księgowy”)
order by wynagrodzenie desc
3. in:
Wyświetl dane pracowników, którzy pracują na stanowiskach na których pracuje co najmniej dwóch pracowników.
select imie, nazwisko
from pracownicy
where id_stanowisko IN (SELECT id_stanowisko
from pracownicy
group by Id_stanowisko
having count(*)>=2)
Wyświetl dane czytelników, którzy wypożyczyli książki z poza działu informatyka.
select distinct c.nr_czytelnika, imie, Nazwisko
from czytelnicy c join wypozyczenia w
on c.Nr_czytelnika=w.Nr_czytelnika
where w.sygnatura not in(
select k.sygnatura
from ksiazki k join dzialy d
on k.Id_dzial = d.id_dzial
where nazwa=”informatyka”)
4. all:
Wyświetl dane pracowników, który zarabiają więcej niż średnie na wszystkich stanowiskach.
select imie, nazwisko, wynagrodzenie
from pracownicy
where wynagrodzenie > all
(select avg(wynagrodzenie)
FROM pracownicy
group by id_stanowisko)
5. skorelowane:
Wyświetl imiona pracowników, które powtarzają się w imionach czytelników.
SELECT imie FROM pracownicy
WHERE ( SELECT count(*) FROM czytelnicy
WHERE czytelnicy.imie=pracownicy.imie ) > 0
6. boczne tabele pochodne:
Wyświetl imię i nazwisko czytelnika i cenę najdroższej książki jaką wypożyczył:
SELECT imie, Nazwisko,(select max(cena) as max_cena
from ksiazki k join wypozyczenia w
on k.Sygnatura = w.Sygnatura
where w.Nr_czytelnika = c.nr_czytelnika)
from czytelnicy c
7. exists/not exists:
Wyświetl dane czytelników, którzy wśród wypożyczonych książek nie mają żadnej książki z działu informatyka.
select Nr_czytelnika, imie, Nazwisko
from czytelnicy c
where not exists(
select k.sygnatura
from (ksiazki k join dzialy d
on k.Id_dzial = d.id_dzial) join wypozyczenia w
on w.sygnatura=k.sygnatura
where nazwa=”informatyka” and w.Nr_czytelnika = c.Nr_czytelnika)
Zadania do domu (odesłać do 14.03) na zeromski.czest@gmail.com – nie podlega ocenie:
- Wyświetl dane pracowników, którzy zarabiają najmniej na danym stanowisku.
- Wyświetl czytelników, którzy wypożyczyli więcej książek, niż wynosi średnia liczba wypożyczonych książek w bibliotece.
- Wyświetl dane czytelników, którzy wypożyczyli książki w miesiącu grudzień. (podzapytanie skorelowane)