1. Podać nazwiska studentów kończące się na literę K i zawierające literę A na trzeciej pozycji.
SELECT nazwisko FROM studenci WHERE nazwisko LIKE '__A%K'
2. Podać tematy, które mają temat nadrzędny (wartość pola NR_TEM_NADRZ nie jest pusta (NULL)).
SELECT * FROM tematy WHERE nr_tem_nadrz IS NOT NULL
3. Podać nazwiska studentów studiujących na kierunku INFORMATYKA.
SELECT s.nazwisko FROM studenci s JOIN kierunki k ON s.nr_kier = k.nr_kier WHERE k.nazwa_kier = 'INFORMATYKA'
4. Podać (w odwróconym porządku alfabetycznym) nazwiska studentek, które z dowolnego przedmiotu otrzymały ocenę równą 5 lub mniejszą niż 3. Nazwiska nie powinny się powtarzać.
SELECT DISTINCT s.nazwisko, s.plec FROM studenci s JOIN oceny o ON s.NR_STUD = o.NR_STUD WHERE s.PLEC = 'K' AND (o.ocena = 5 OR o.ocena < 3) ORDER BY nazwisko DESC
5. Podać nazwy przedmiotów i nazwy ich przedmiotów nadrzędnych.
SELECT p1.nazwa_przedm AS pod, p2.nazwa_przedm AS nad FROM przedmioty p1 JOIN przedmioty p2 ON p2.nr_przedm = p1.nr_przedm_nadrz SELECT p1.nazwa_przedm AS pod, p2.nazwa_przedm AS nad FROM przedmioty p1 LEFT JOIN przedmioty p2 ON p2.nr_przedm = p1.nr_przedm_nadrz
6. Podać nazwy zespołów wraz z liczbą pracowników. Uwzględnić zespoły bez pracowników.
SELECT z.nazwa_zesp, COUNT(p.nr_prac) FROM zespoly z LEFT JOIN pracownicy p ON z.nr_zesp = p.nr_zesp GROUP BY z.nr_zesp, z.nazwa_zesp
7. Podać datę urodzenia najstarszego studenta.
F-cje agregujace count, max, min, avg
SELECT MIN(data_ur) FROM studenci
8. Dla każdego przedmiotu podać średnią ocen.
group by - wszystko dzielimy na grupy
SELECT o.nr_przedm, avg(ocena) FROM oceny o GROUP BY o.nr_przedm
9. Dla każdego studenta podać liczbę ocen, które otrzymał z poszczególnych przedmiotów.
SELECT s.nazwisko, p.nazwa_przedm, AVG(ocena) AS srednia FROM przedmioty p JOIN oceny o ON p.NR_PRZEDM = o.NR_PRZEDM JOIN studenci s ON s.nr_stud = o.nr_stud GROUP BY s.NR_STUD, s.nazwisko, p.nr_przedm, p.nazwa_przedm
10. Podać nazwy przedmiotów, z których średnia ocen jest mniejsza niż 4.
SELECT o.nr_przedm, avg(ocena) FROM oceny o GROUP BY o.nr_przedm HAVING avg(ocena) < 4
11. Podać nazwiska studentów, którzy są starsi od studenta WILK (wykorzystać podzapytanie).
SELECT nazwisko FROM studenci WHERE data_ur < (SELECT data_ur FROM studenci WHERE nazwisko = 'wilk')
12. Podać nazwiska studentów, którzy nie otrzymali jeszcze żadnej oceny. a) z wykorzystaniem operatora (NOT) IN b) z wykorzystaniem operatora (NOT) EXISTS
a)
SELECT * FROM studenci WHERE nr_stud NOT IN (SELECT nr_stud FROM oceny)
b)
SELECT * FROM studenci s WHERE NOT EXISTS (SELECT * FROM oceny o WHERE o.nr_stud = s.nr_stud)
13. Podać nazwy przedmiotów, z których średnia ocen jest mniejsza niż średnia ocen z przedmiotu ALGEBRA.
SELECT p.nazwa_przedm, AVG(ocena) AS srednia FROM przedmioty p JOIN oceny o ON p.NR_PRZEDM = o.NR_PRZEDM GROUP BY p.NR_PRZEDM, p.NAZWA_PRZEDM HAVING AVG(ocena) < ( SELECT AVG(ocena) FROM przedmioty p JOIN oceny o ON p.NR_PRZEDM = o.NR_PRZEDM WHERE p.nazwa_przedm = 'algebra' )
14. Podaj nazwiska najmłodszych pracowników w poszczególnych zespołach.
SELECT nazwa_zesp, nazwisko, data_ur FROM pracownicy p JOIN zespoly z ON p.NR_ZESP = z.NR_ZESP WHERE data_ur = ( SELECT MAX(data_ur) FROM pracownicy p2 WHERE p2.nr_zesp = p.NR_ZESP )
15. Podaj przedmioty realizowane przez największą liczbę pracowników.
SELECT p.nazwa_przedm FROM przedmioty p JOIN rozklady r ON p.nr_przedm = r.nr_przedm GROUP BY p.NR_PRZEDM, p.nazwa_przedm HAVING COUNT(DISTINCT r.nr_prac) >= ALL( SELECT COUNT(DISTINCT nr_prac) FROM rozklady GROUP BY nr_przedm )
16. Podać nazwiska studentów kierunku INFORMATYKA starszych od dowolnego pracownika z zespołu OPROGRAMOWANIE (wykorzystać operator ANY).
SELECT nazwisko, data_ur FROM studenci s JOIN kierunki k ON s.NR_KIER = k.NR_KIER WHERE k.nazwa_kier = 'informatyka' AND data_ur < ANY( SELECT data_ur FROM pracownicy p JOIN zespoly z ON p.nr_zesp = z.nr_zesp WHERE z.nazwa_zesp = 'oprogramowanie' GROUP BY data_ur )
17. Podać nazwiska studentów, którzy są starsi od studenta WILK (wykorzystać połączenie zwrotne).
SELECT s1.nr_stud, s1.nazwisko, s1.data_ur FROM studenci s1 JOIN studenci s2 ON s1.data_ur < s2.data_ur WHERE s2.NAZWISKO = 'wilk'
18. Podać nazwisko najstarszego studenta, ale takiego który jest młodszy od najstarszego ze wszystkich studentów.
SELECT nr_stud, nazwisko, data_ur FROM studenci WHERE data_ur = ( SELECT MIN(data_ur) FROM studenci WHERE data_ur > ( SELECT MIN(data_ur) FROM studenci ) )
19. Podać nazwiska studentów, którzy mają tyle samo ocen z przedmiotu ORACLE co z przedmiotu TABAKS. Uwzględnić również studentów, którzy nie mają ocen z obu tych przedmiotów.
SELECT s.nr_stud, s.nazwisko FROM studenci s WHERE ( SELECT COUNT(*) FROM oceny o JOIN przedmioty p ON o.nr_przedm = p.nr_przedm WHERE p.nazwa_przedm = 'oracle' AND o.nr_stud = s.nr_stud ) = ( SELECT COUNT(*) FROM oceny o JOIN przedmioty p ON o.nr_przedm = p.nr_przedm WHERE p.nazwa_przedm = 'tabaks' AND o.nr_stud= s.nr_stud )