Bazy danych - MySQL Warunki zaliczenia tych zajęć Rozwiązania zadań domowych proszę zapisać do pliku o nazwie Bazy danych i wysłać do mnie jako załącznik. Ostateczny termin: niedziela, 9.06, godzina 24:00. Podstawowe informacje Baza danych jest dostępna na serwerze MySQL zainstalowanym na komputerze znajdującym się w sali 67. Niestety jest on wyłączany i dlatego nie zawsze jest możliwy dostęp do bazy danych (np. z domu). Sposób logowania: W przeglądarce internetowej wpisujemy adres: 150.254.91.64/phpmyadmin Użytkownik: Student Hasło: 123 Baza: NIFK Struktura bazy danych Tabela Oddziały ID Oddzial Adres 10 POZNAN Kwiatowa 3 20 WARSZAWA al. Jerozolimskie 22 30 KRAKOW Planty 14 40 WROCLAW Nad Odra 16 50 GDANSK Portowa 30 Tabela Stanowiska Stanowisko Placa_min Placa_max BRYGADZISTA 2510,00 3750,00 DYREKTOR 8100,00 9200,00 KIEROWNIK 3800,00 5500,00 MONTER 1300,00 2500,00 PRAKTYKANT 1150,00 1250,00 SEKRETARKA 1270,00 2050,00 Tabela Pracownicy ID Nazwisko Stanowisko Szef Zatrudniony Placa_pod Placa_dod ID_Oddz 100 SUMINSKI DYREKTOR NULL 1968-01-01 8130,00 420,50 10 110 BARTCZAK KIEROWNIK 100 1973-05-01 4350,00 210,00 40 120 MALINOWSKI KIEROWNIK 100 1977-09-01 4070,00 NULL 30 130 BRZEZINSKI KIEROWNIK 100 1968-07-01 4960,00 NULL 20 140 ZABLOCKI BRYGADZISTA 130 1975-09-15 4830,00 105,00 20 150 LEWANDOWSKI BRYGADZISTA 130 1977-09-01 2645,50 NULL 20 160 KOPROWSKI BRYGADZISTA 130 1985-03-01 2590,00 NULL 20 170 JEZIERSKI MONTER 130 1992-10-01 1439,70 80,50 20 NIF Strona 1
180 BOGULA SEKRETARKA 100 1985-02-20 1410,20 NULL 10 190 MALINIAK MONTER 140 1993-09-01 1371,00 NULL 20 200 URBANIAK PRAKTYKANT 140 1994-07-15 908,00 NULL 30 210 CELINSKI PRAKTYKANT 130 1993-10-15 950,00 170,60 30 220 KOWAL MONTER 110 1993-01-10 1480,00 NULL 20 230 HANTCZAK MONTER 120 1992-09-01 1480,00 90,00 30 Schemat prostego zapytania SQL pobierającego dane z bazy SELECT lista_kolumn * FROM nazwa_tabeli WHERE warunek warunek_złożony ORDER BY lista_kolumn2 ASC DESC Zadania Struktura bazy danych 1. Dlaczego pierwsze kolumny zostały zaznaczone kolorem pomarańczowym? 2. Dlaczego trzy kolumny w tabeli Pracownicy zostały zaznaczone kolorem różowym? 3. Narysować schemat powiązań między tabelami bazy danych Zapytania SQL 1. Wyświetl całość informacji z relacji ODDZIALY. 2. Wyświetl całość informacji z relacji PRACOWNICY. 3. Wyświetl nazwiska i roczne dochody pracowników (mnożenie * 12) z uwzględnieniem płac dodatkowych. Uwaga: Skorzystaj z funkcji IFNULL (lub ISNULL w MS SQL Server). Nazwisko Roczne_zarobki --------------- --------------------- SUMINSKI 13176,00 4. W zadaniu 3 dodatkowo posortuj wyniki wg wysokości zarobków. Skorzystaj z ORDER BY z opcją ASC. Sprawdź wynik, gdy ASC zostanie zamienione na DESC. 5. W poprzednim zadaniu dodaj nazwy stanowisk i zamień roczne dochody na dochody miesięczne z uwzględnieniem płac dodatkowych. Nazwisko Stanowisko Miesieczne_zarobki ------- ----------- --------------------- SUMINSKI DYREKTOR 8550,50 6. Wyświetl całość informacji o oddziałach sortując wynik według nazw oddziałów Skorzystaj z ORDER BY. ID Nazwa Adres ------ -------------------- --------------------- 10 POZNAN Kwiatowa 3 NIF Strona 2
7. Wyświetl listę stanowisk (bez duplikatów) na których zatrudnieni są pracownicy. Skorzystaj z SELECT DISTINCT. Stanowisko --------------- DYREKTOR 8. Wyświetl wszystkie informacje o kierownikach. Wykorzystaj klauzulę WHERE. ID Nazwisko itd ---- -------------------- --------------------- 110 BARTCZAK KIEROWNIK 9. Wybierz poniższe dane o pracownikach oddziałów 30 i 40 w kolejności malejących zarobków. Skorzystaj z WHERE, funkcji IN i ORDER BY ID Nazwisko Stanowisko Placa_pod Id_Oddz --- -------- ----------- ----------- ------------- 110 BARTCZAK KIEROWNIK 4350,00 40 10. Wybierz dane o pracownikach których płace podstawowe mieszczą się w przedziale od 1300 do 1800 zł. Skorzystaj z WHERE i funkcji BETWEEN. Nazwisko Oddzial Placa_pod ----------- ---------- --------------------- JEZIERSKI 20 80,50 11. Wyświetl poniższe informacje o pracownikach, których nazwisko kończy się na SKI. Skorzystaj z funkcji LIKE. Nazwisko Stanowisko Oddzial -------- -------------- --------------------- SUMINSKI DYREKTOR 10 12. Wyświetl poniższe informacje o tych pracownikach, którzy zarabiają powyżej 2000 złotych i posiadają szefa. Skorzystaj z warunku IS NOT NULL. ID Szef Nazwisko Placa_pod ---- ------ --------- -------------------- 110 100 BARTCZAK 4350,00 13. Wyświetl nazwiska i identyfikatory oddziałów pracowników zatrudnionych w oddziale nr 20, których nazwisko zaczyna się na M lub kończy na SKI. Skorzystaj z funkcji LIKE. Nazwisko Oddzial --------------- --------------------- BRZEZINSKI 20 MALINIAK 20 NIF Strona 3
Złączenia tabel Przykład złączenia tabel: SELECT a.*, b.* FROM Tabela a INNER JOIN DrugaTabela b ON b.atrybutb = a.atrybuta 1. Wyświetl nazwiska, etaty, numery oddziałów i nazwy oddziałów wszystkich pracowników. Wyniki posortuj według nazwisk. Skorzystaj ze złączenia INNER JOIN Nazwisko Stanowisko ID_Oddz Nazwa ------------------- --------- ----------- BARTCZAK KIEROWNIK 40 WROCLAW 2. Wyświetl wszystkich pracowników z Warszawy. Uporządkuj wyniki według nazwisk pracowników. Nazwisko Stanowisko ID_Oddz Nazwa ---------- -------------------- ----------- -------------------- BRZEZINSKI KIEROWNIK 20 WARSZAWA 3. Wyświetl nazwiska, miasta i adresy miejsc pracy oraz nazwy etatów tych pracowników, których płaca podstawowa przekracza 2500,00. Wyniki posortuj według płacy. Nazwisko Adres Stanowisko Placa_pod --------- ------------------------------- -------------------- --------- KOPROWSKI WARSZAWA al. Jerozolimskie 22 BRYGADZISTA 2590,00 4. Dla każdego pracownika wyświetl jego stanowisko, płacę podstawową i widełki płacowe w jakich mieści się pensja pracownika. Nazwisko Stanowisko Placa_pod Placa_min Placa_max -------- ---------- --------- --------- ----------- BARTCZAK KIEROWNIK 4350,00 3800,00 5500,00 5. Wyświetl nazwiska tych brygadzistów, których rzeczywiste zarobki nie odpowiadają widełkom płacowym przewidzianym dla brygadzistów. Nazwisko Stanowisko Placa_pod Placa_min Placa_max -------- ---------- --------- --------- ---------- ZABLOCKI BRYGADZISTA 4830,00 2510,00 3750,00 6. Wyświetl nazwiska, stanowiska, nazwy oddziałów i płace podstawowe pracowników nie będących praktykantami. Wyniki uszereguj zgodnie z malejącym wynagrodzeniem. Nazwisko Stanowisko Nazwa Placa_pod -------- ---------- ----- ------------ SUMINSKI DYREKTOR POZNAN 8130,00 NIF Strona 4
7. Wyświetl poniższe nazwiska tych pracowników których minimalna roczna płaca przekracza 15000. Wyniki posortuj według nazwisk. Nazwisko Stanowisko Roczna płaca min. -------- ---------- -------------------- BARTCZAK KIEROWNIK 45600,00 8. Wyświetl nazwiska i numery pracowników wraz z numerami i nazwiskami ich szefów. ID Nazwisko Szef Nazwisko --- -------- --- ---------- 110 BARTCZAK 100 SUMINSKI Funkcje grupujące 1. Wyświetl najniższą i najwyższą pensję w firmie. Wyświetl informację o różnicy dzielącej najlepiej i najgorzej zarabiających pracowników. Skorzystaj z funkcji MIN i MAX MINIMUM MAKSIMUM RÓŻNICA ---------- ---------- ---------- 908 8130 7222 2. Wyświetl średnie pensje dla wszystkich stanowisk. Wyniki uporządkuj wg malejącej średniej pensji. Skorzystaj z funkcji AVG STANOWISKO SREDNIA ---------- ---------- DYREKTOR 8130 3. Wyświetl liczbę zatrudnionych kierowników. Skorzystaj z funkcji COUNT. KIEROWNICY ------------ 4 4. Znajdź sumaryczne miesięczne płace dla każdego oddziału. Nie zapomnij o płacach dodatkowych. Skorzystaj z funkcji SUM ID_ODDZ SUMARYCZNE_PLACE ---------- ---------------- 10 9960,7 5. Zmodyfikuj zapytanie z zadania poprzedniego w taki sposób, aby jego wynikiem była sumaryczna miesięczna płaca w zespole, który wypłaca swoim pracownikom najwięcej pieniędzy. Skorzystaj z funkcji SUM oraz operacji ORDER BY i LIMIT 1 w MySQL (SELECT TOP 1 w MS SQL). NIF Strona 5
MAKS_SUM_PLACA -------------------------- 19501,70 6. Dla każdego pracownika wyświetl pensję najgorzej zarabiającego podwładnego. Wyniki uporządkuj wg malejącej pensji. Skorzystaj z funkcji MIN. SZEF MINIMALNA ---- ---------------- 120 1570,00 Zadania domowe 1. Wyświetl nazwiska, stanowiska i stawki godzinowe tych pracowników, którzy nie są ani brygadzistami ani monterami ani praktykantami i którzy nie zarabiają w przedziale od 1400 do 1800 złotych. Skorzystaj z NOT IN, NOT BETWEEN. Nazwisko Stanowisko Stawka ---------- ---------- --------- MALINOWSKI KIEROWNIK 25,4375 2. Wyświetl poniższe informacje o pracownikach, dla których suma płacy podstawowej i dodatkowej jest wyższa niż 3000 złotych. Wyniki uporządkuj według nazw stanowisk. Jeżeli dwóch pracowników ma to samo stanowisko, to posortuj ich według nazwisk. Nazwisko Stanowisko Placa_pod Placa_dod -------- ---------- --------- ---------- SUMINSKI DYREKTOR 8130,00 420,50 3. Dla każdego oddziału wyświetl jego nazwę, liczbę zatrudnionych w nim pracowników i ich średnią płacę. ID_Oddz Oddział Ilość prac. Średnia placa ------- ------- ----------- --------------------- 10 POZNAN 2 4770,10 4. Dla każdego pracownika posiadającego podwładnych wyświetl ich liczbę. Wyniki posortuj zgodnie z malejącą liczbą podwładnych. Nazwisko Ilość podwł. -------- ------------ BRZEZINSKI 5 NIF Strona 6