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.