Laboratorium 1
Transkrypt
Laboratorium 1
Laboratorium 1 Powtórka SQL - zapytania SQL Pracujemy w SQL Developer. Dane do połączenia: Hostname: oracle4.icis.pcz.pl Port: 1521 SID: oracle4 Struktura zapytania SELECT [DISTINCT] lista_wyrazen FROM lista_relacji [WHERE warunki] [GROUP BY kryteria [HAVING warunki]] [ORDER BY kryteria [DESC]]; Ćwiczenia na 4 tabelach: STUDENCI, PRACOWNICY, POJAZDY, KIEROWCY Przeglądany zawartość i budowę tabel. Proszę wykonać w SQL poniższe zapytania. Zapytania proste 1. 2. 3. 4. 5. 6. Wyświetlenie nazwy zalogowanego użytkownika Lista wszystkich informacji o studentach. Lista nazwisk studentów złożonych z 3 znaków. Lista studentów specjalności „Zintegrowane systemy zarządzania i analizy danych”. Lista różnych imion męskich nie dłuższych niż 6 znaków. Lista studentów, których nazwiska zaczynają się na A, B, C albo D posortowana malejąco po nazwiskach. 7. Lista wszystkich studentek o nazwisku zaczynającym się na literę R i kolejne (S, T, U, ...). 8. Wszystkie informacje o studentach będących na studiach stacjonarnych, przynajmniej na dwa sposoby. 9. Lista całkowitych dochodów wszystkich pracowników, którzy nie są dyrektorami. Daty 10. Lista studentów, którzy urodzili się w marcu. 11. Lista studentów (imiona i nazwisko) wraz z ich wiekiem. 12. Lista studentów, którzy urodzili się w sobotę. 13. Liczba dni od naszego urodzenia. 14. Dzień tygodnia, w którym rozpoczęła się II wojna światowa. Zapytania z grupowaniem 15. Liczba studentów na każdym roku studiów. 16. Lista nazwisk studentów, które się powtarzają. 17. Liczba studentów na każdym z rodzajów studiów. 18. Liczba studentów na każdej specjalności, ale tylko tych z II-stopnia. 19. Wyświetlić nazwiska osób, które mają ten sam dzień urodzenia :) 20. Wyświetlić najdłuższe nazwiska wśród studentów. 21. Wyświetlić statystykę występowania imion w tabeli STUDENCI. 22. Dla dociekliwych: W statystyce imion można uwzględnić pierwsze imię (jeśli student ma dwa) pomijając drugie. Np. do liczby wystąpień imienia MARCIN dojdzie też MARCIN, JACEK. 23. Wyświetlić średnią płacę wszystkich pracowników. 24. Wyświetlić maksymalne zarobki w każdym z działów, tabela PRACOWNICY. 25. Maksymalne i minimalne zarobki na danym stanowisku. 26. Z tabeli PRACOWNICY wyświetlić dział, który jest najliczniejszy. 27. Z tabeli POJAZDY wyświetlić listę marek samochodów wraz z ich liczbą jeśli jest ona większa niż 100. Złączenia 28. Na tabeli PRACOWNICY wyświetlić kolumny: NR_AKT, NAZWISKO, STANOWISKO, KIEROWNIK, SZEF. Ostatnia kolumna powinna zawierać nazwisko kierownika danego pracownika. 29. Wyświetlić liczbę wszystkich rekordów otrzymaną z iloczynu kartezjańskiego z tabel KIEROWCY i POJAZDY. 30. Wyświetlić nazwę właściciela (imię i nazwisko w jednej kolumnie) wraz z marką i kolorem samochodu. 31. Wyświetlić nazwę właściciela (imię i nazwisko w jednej kolumnie) wraz z jego numerem ID i liczbą jego samochodów. Tworzenie i modyfikacja tabel, wypełnianie tabel danymi (1) 1. Utwórz trzy tabele z odpowiednimi atrybutami: • WIZYTA (Id_wizyty, Data_wizyty, Lekarz, Pacjent, Opis, Refundacja) • LEKARZ (Id_lekarza, Imie, Nazwisko, Specjalizacja) • PACJENT (Id_pacjenta, Imie, Nazwisko, Data_urodzenia, Adres). Każda tabela powinna zawierać wyłącznie klucz główny oraz odpowiednie dowiązania do pozostałych tabel. Klucz główny w tabeli Lekarze powinien być w formacie 'L001', klucz główny w tabeli Pacjent – 'P001', a klucz główny w tabeli Wizyta – typu numerycznego. Dobierz odpowiednie typy. Zwróć uwagę na odpowiednią kolejność tworzenia tabel. 2. Dodaj do tabeli Pacjent kolumnę Telefon. 3. Dodaj ograniczenie do tabeli Pacjent tak, aby telefon był obowiązkową kolumną. 4. Ustaw wartość domyślną daty urodzenia na datę wybuchu II wojny światowej. 5. Ustaw wartość domyślną daty wizyty na bieżącą datę. 6. Dodaj ograniczenie do kolumny specjalizacja, aby ta mogła przybierać jedną z trzech wartości: 'Kardiolog', 'Neurolog', 'Pediatra'. 7. Zmień typ kolumny refundacja na jednoznakowy. 8. Dodaj do kolumny refundacja ograniczenie tak, aby mogła przyjmować jedynie wartości 'T' lub 'N”. 9. Wstaw po 5 wierszy do każdej tabeli. (W ramach powtórzenia można również poćwiczyć modyfikowanie danych w tabelach za pomocą poleceń UPDATE i DELETE). 10. Utwórz perspektywę wizyty_data, zawierającą id_lekarza, nazwisko pacjenta, datę wizyty, jej opis i informację o tym, czy wizyta będzie refundowana przez NFZ. 11. Utwórz perspektywę lekarze zawierającą imię, nazwisko i specjalizację lekarza oraz ile łącznie przyjął pacjentów. 12. Utwórz perspektywę zawierającą wszystkie możliwe informacje o pacjentach wizyt, które nie będą refundowane przez NFZ. Tworzenie i modyfikacja tabel, wypełnianie tabel danymi (2) Tworzymy tabele pozwalające przechowywać informację o dzieciach w przedszkolu. Mamy więc odpowiednie informacje o każdym dziecku (DZIECI), mamy informację o zajęciach dodatkowych (ZAJECIA_DODATKOWE), na które dzieci uczęszczają. Mamy tabelę z możliwymi wariantami jedzonych przez dzieci posiłków (POSILKI). Mamy też informację o godzinach dodatkowych (powyżej 5 godzin) spędzanych w przedszkolu przez każde z dzieci każdego dnia (tabela GODZINY_DODATKOWE). Powiązanie dzieci z zajęciami, na które uczęszczają jest powiązaniem wiele do wielu. Wymaga więc osobne tabeli DZIECI_ZAJECIA. Mamy więc do utworzenia 5 tabel: ZAJECIA_DODATKOWE z polami: id_zajecia rodzaj cena Rodzajów zajęć powinno być przynajmniej 5, każde zajęcia mają inną cenę. Przykłady: rytmika, logopeda, szachy, gimnastyka korekcyjna, angielski, warsztaty z informatyki, … POSILKI id_posilku rodzaj cena Możliwe są trzy rodzaje posiłków z trzema różnymi opłatami za nie: wszystkie – 7 zł, śniadania i obiad – 5 zł, obiad – 3 zł. DZIECI id_dziecka imie nazwisko data_ur posilki komitet_rodzicielski Komitet rodzicielski to wartość miesięcznych opłat zadeklarowanych przez rodziców dziecka. Kwota dowolna. Można ustalić wartość domyślną. Pole posilki to klucz obcy na polu id_posilku tabeli POSILKI. DZIECI_ZAJECIA id_dziecka id_zajecia Oba pola tej tabeli razem tworzą klucz główny, muszą mieć też odniesienia (klucz obcy) na klucze główne tabel DZIECI i ZAJECIA. GODZINY_DODATKOWE id_dziecka dzien liczba_godzin Pola id_dziecka i dzien (pole typy DATA) tworzą razem klucz główny tej tabeli. id_dziecka jest kluczem obcym tabeli DZIECI. Należy zapewnić wszystkie odpowiednie połączenia między tabelami, więzy integralności. Można sobie pomóc poniższym diagramem. Typy danych w każdej z tabel należy określić samemu. Po odpowiednim utworzeniu wszystkich 5 tabel wypełniamy je poprawnymi i sensownymi danymi. Dzieci docelowo (można dokończyć w domu) powinno być nie mniej niż 20.