Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2020
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.00 KB | None | 0 0
  1. Zad. 1
  2. BAZA TURNIEJE MA UMOŻLIWIĆ PRZECHOWYWAĆ INFORMACJE O ZAWODNIKACH TENISA ZIEMNEGO, TURNIEJACH, W KTÓRYCH UCZESTNICZĄ, A CO ZA TYM IDZIE WSZELKIE INFORMACJE O MECZACH PRZEZ NICH ROZEGRANYCH.
  3. DLA KAŻDEGO ZAWODNIKA PRZECHOWYWANY JEST UNIKALNY NUMER, NAZWISKO, NAZWA KLUBU, PŁEĆ ORAZ DATA URODZENIA. ZAWODNIK MOŻE UCZESTNICZYĆ W WIELU TURNIEJACH RÓŻNEGO TYPU. TURNIEJ OPISANY JEST PRZEZ UNIKALNY NUMER, NAZWĘ, DATĘ ROZPOCZĘCIA,
  4. DATĘ ZAKOŃCZENIA, ILOŚĆ UCZESTNIKÓW. ZAWODNICY UCZESTNICZĄ W WIELU MECZACH. KAŻDY MECZ JEST OPISANY ZA POMOCĄ UNIKALNEGO NUMERU, DATY, GODZINY, ETAPU, WYNIKU INFORMACJI DODATKOWYCH.
  5.  
  6. a) Baza danych - TURNIEJE
  7. Tabele - Zawodnicy, Turnieje, Mecze.
  8. Atrybuty:
  9. - Dla tabeli Zawodnicy: Unikalny numer, nazwisko, nazwa klubu, płeć, data urodzenia
  10. - Dla tabeli Turnieje: Unikalny numer, nazwa, data rozpoczęcia, data zakończenia, ilość uczestników
  11. - Dla tabeli mecz: Unikalny numer, data, godzina, etap, wynik informacji dodatkowych
  12.  
  13. Relacje:
  14. 1:n między Zawodnicy a Mecze
  15.  
  16. b)
  17. To samo co wyżej, tylko:
  18. Tabele -> encje
  19. Relacje -> Związki
  20. Atrybuty -> atrybuty :D
  21.  
  22. c)
  23.  
  24.  
  25. Zad. 2
  26. GMINA = {ID_DZIALKI, ID_OBSZARU, POWIERZCHNIA, CENA, PODATEK}
  27. Nie ogarniam tego zadania kompletnie xD
  28.  
  29. Zad. 1
  30. Podobnie...
  31.  
  32. Zad. 2
  33.  
  34. a)
  35. SELECT nazwisko - pobierz kolumnę nazwisko
  36. FROM czytelnicy INNER JOIN wypozyczenia - z tabeli czytelnicy, wykonaj wewnętrzne złączenie z tabelą
  37. ON czytelnicy.id_czytelnika=wypozyczenia.id_czytelnika - wykonaj złączenie dla pasujących wartości kolumny id.czytelnika
  38. GROUP BY nazwisko - pogrupuj po kolumnie nazwisko
  39. HAVING COUNT(*) > 1 - filtruj grupy, minimum 1 wystąpienie w grupie
  40. ORDER BY nazwisko - sortuj rosnąco według kolumny nazwisko
  41.  
  42. b)
  43. Wynik zapytania = pusty
  44.  
  45. SELECT nazwisko
  46. FROM czytelnicy INNER JOIN wypozyczenia
  47. ON czytelnicy.id_czytelnika = wypozyczenia.id_czytelnika
  48. GROUP BY nazwisko
  49. HAVING COUNT(*) > 1
  50. ORDER BY nazwisko
  51.  
  52. SELECT nazwisko FROM czytelnicy => wszystkie nazwiska
  53.  
  54. SELECT nazwisko
  55. FROM czytelnicy INNER JOIN wypozyczenia
  56. ON czytelnicy.id_czytelnika = wypozyczenia.id_czytelnika => to samo, ponieważ id są takie same i wszystkie rekordy pasujących
  57.  
  58. SELECT nazwisko
  59. FROM czytelnicy INNER JOIN wypozyczenia
  60. ON czytelnicy.id_czytelnika = wypozyczenia.id_czytelnika
  61. GROUP BY nazwisko => to samo, ponieważ każda grupa składa się z jednego nazwiska
  62.  
  63. SELECT nazwisko
  64. FROM czytelnicy INNER JOIN wypozyczenia
  65. ON czytelnicy.id_czytelnika = wypozyczenia.id_czytelnika
  66. GROUP BY nazwisko
  67. HAVING COUNT(*) > 1 => pusto, ponieważ nie ma grupy zawierającej więcej niż jeden rekord
  68.  
  69. SELECT nazwisko
  70. FROM czytelnicy INNER JOIN wypozyczenia
  71. ON czytelnicy.id_czytelnika = wypozyczenia.id_czytelnika
  72. GROUP BY nazwisko
  73. HAVING COUNT(*) > 1
  74. ORDER BY nazwisko => pusto, nie ma już czego sortować xD
  75.  
  76. c) No nie wiem alternatywne rozwiązanie czego, skoro zapytanie zwraca pusty wynik. Albo tu jest błąd albo zadanie pułapka, bo sprawdzałem nawet wynik w MySQL na tych danych i jest pusto :)
  77.  
  78. Zad. 3
  79. a)
  80. CREATE TABLE -> tworzy tabele o nazwie KSIAZKI, zawiera kolumny:
  81. - ID_KSIAZKI o typie całkowitym, jest identyfikatorem (automatycznie zwiększa wartość o 1) i kluczem podstawowym
  82. - TYTUL o typie tekstowym, z rozmiarem 40
  83. - CENA o typie MONEY
  84. - ILOSC o type INT
  85.  
  86. ALTER TABLE - dodanie więzu integralności CHECK na kolumnę CENY sprawdzający czy jest większa bądź równa 5
  87.  
  88. DROP TABLE - usuwa tabele książki
  89.  
  90. b) INSERT INTO - dodaje nowe rekordy z poszczególnymi wartościami np. TYTUL1, 17, 5
  91. UPDATE KSIAZKI SET CENA = CENA * 2 WHERE CENA < 10 ===> ustawia cene dwa razy większą dla rekordów z ceną mniejszą niż 10
  92. UPDATE KSIAZKI SET CENA = CENA / 2 WHERE CENA > 10 ===> ustawia cene dwa razy większą dla rekordów z ceną większą niż 10
  93. Wartości po 1 UPDATE:
  94. 1 rekord => cena = 8.5
  95. 2 rekord => cena = 6
  96. 3 rekord => cena = 14
  97. 4 rekord => cena = 10 (bez zmian)
  98.  
  99. Wartości po 2 UPDATE:
  100. 1 rekord => cena = 17
  101. 2 rekord => cena = 12
  102. 3 rekord => cena = 7
  103. 4 rekord => cena = 10 (bez zmian)
  104.  
  105. c) Wartości wróciły do swoich początkowych wartości, więc również nie wiem o jakie alternatywne rozwiązanie chodzi. Równie dobrze można by nie wykonywać tych UPDATE :D
  106.  
  107. Zad. 4
  108. a)
  109. UPDATE -> aktualizuje tabele KSIAZKI, ustawia kolumnę TYTUL na wartość 'brak' dla każdego rekordu, którego ID_KSIAZKI zawiera w zbiorze zwrócony przez podzapytanie SELECT -> SELECT zwraca wszystkie ID_KSIAZKI, które są aktualnie dodawane
  110.  
  111. b)
  112. Typy:
  113. AFTER - wykonuje się po zapytaniu
  114. BEFORE - wykonuje się przed zapytaniem
  115.  
  116. Zdarzenia:
  117. * Manipulacji danych
  118. UPDATE - zdarzenie aktualizacji danych
  119. INSERT - zdarzenie dodania danych
  120. DELETE - zdarzenie usunięcia danych
  121. * Definiowania danych
  122. CREATE - zdarzenie tworzenia tabeli
  123. ALTER - zdarzenie zmiany tabeli
  124. DROP - zdarzenie usunięcia tabeli
  125. * Logowania
  126. LOGON - logowanie do bazy
  127.  
  128. c) Tabele koncepcyjne:
  129. DELETED - tabela zawierająca usunięte lub usuwane właśnie rekordy
  130. INSERTED - tabela zawierająca dodane lub dodawane właśnie rekordy
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement