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 )