Advertisement
pabblo097

Untitled

Apr 18th, 2020
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 9.96 KB | None | 0 0
  1. /*
  2. Bazy danych
  3. Labolatorium 5
  4. Karol Dobrakowski
  5. Gr. Lab 7
  6. */
  7.  
  8. -- BRAK ZADANIA 21
  9.  
  10.  
  11. /* Zadanie 1
  12.  
  13. W oparciu o dane zgromadzone w tabeli Studenci wyœwietl dane zwi¹zane z najstarszym studentem
  14. (ew. studentami) studiuj¹cym na kierunku informatyka.
  15.  
  16. */
  17.  
  18. SELECT * FROM studenci WHERE kierunek LIKE 'INFORMATYKA' AND data_urodzenia=
  19. (SELECT MIN(data_urodzenia) FROM studenci WHERE kierunek LIKE 'INFORMATYKA');
  20.  
  21. /* Zadanie 2
  22.  
  23. W oparciu o dane zwarte w tabelach Rejestry, Wedkarze, Gatunki i Lowiska wyœwietl informacje
  24. dotycz¹ce po³owu najd³u¿szej ryby danego gatunku w danym roku. W prezentowanej informacji
  25. nale¿y uwzglêdniæ datê po³owu, nazwisko ³owcy (wêdkarza) i miejsce po³owu (nazwa ³owiska).
  26. Dane uporz¹dkuj wed³ug roku a w dalszej kolejnoœci wed³ug nazwy gatunku.
  27.  
  28. */
  29. SELECT
  30.     EXTRACT(YEAR FROM czas) AS rok,
  31.     gatunki.nazwa Gatunki,
  32.     NVL(dlugosc,0),
  33.     trunc(czas) AS Kiedy,
  34.     wedkarze.nazwisko,
  35.     lowiska.nazwa Lowisko
  36. FROM
  37.     rejestry
  38.     JOIN wedkarze USING(id_wedkarza)
  39.     JOIN lowiska USING(id_lowiska)
  40.     LEFT JOIN gatunki USING(id_gatunku)
  41. WHERE (id_wedkarza, EXTRACT(YEAR FROM czas), NVL(dlugosc,0))
  42. IN (SELECT id_wedkarza, EXTRACT(YEAR FROM czas) AS rok, NVL(MAX(dlugosc),0) max_dlugosc FROM rejestry  GROUP BY id_wedkarza, EXTRACT(YEAR FROM czas))
  43. ORDER BY 1,2;
  44.  
  45.  
  46. /* Zadanie 5
  47.  
  48. W oparciu o dane zgromadzone w tabeli Studenci wyœwietl najlepsze studentki (panie) i najlepszych
  49. studentów (panów) studiuj¹cych na danym kierunku studiów (o ile to mo¿liwe to przynajmniej po 1-ym
  50. studencie i 1-ej studentce na ka¿dym kierunku). Dane wyœwietl uporz¹dkowane alfabetycznie wg nazwy
  51. kierunku, œredniej (nierosn¹co) i trybu studiów.
  52.  
  53. */
  54.  
  55. SELECT
  56.     kierunek,
  57.     MAX(srednia),
  58.     nazwisko,
  59.     imiona,
  60.     nr_indeksu,
  61.     stopien,
  62.     rok,
  63.     tryb
  64. FROM
  65.     (SELECT
  66.         kierunek,
  67.         NVL(srednia, 0) AS srednia,
  68.         nazwisko,
  69.         imiona,
  70.         nr_indeksu,
  71.         stopien,
  72.         rok,
  73.         tryb
  74.     FROM studenci)
  75. GROUP BY kierunek, nazwisko, imiona, nr_indeksu, stopien, rok, tryb
  76. ORDER BY 1, 2 DESC, 8;
  77.  
  78.  
  79. /* Zadanie 8
  80. W oparciu o dane zgromadzone w tabelach Studenci i Oceny wyœwietl dane studenta/ów, który uzyska³
  81. najwiêksz¹ liczbê ocen 5.0 (na przestrzeni cyklu dydaktycznego).
  82. */
  83.  
  84. SELECT t1.NR_INDEKSU, t1.NAZWISKO, t1.IMIONA, t1.KIERUNEK, t1.ROK, t2.max_ocen AS "Liczba ocen 5"  FROM
  85. (SELECT * FROM studenci) t1
  86. JOIN
  87. (SELECT nr_indeksu, COUNT(ocena) max_ocen FROM oceny WHERE ocena LIKE '5' GROUP BY nr_indeksu)t2
  88. ON(t1.NR_INDEKSU=t2.NR_INDEKSU) ORDER BY 6 DESC;
  89.  
  90.  
  91. /* Zadanie 9
  92.  
  93. Rozszerzenie zadania 8. W oparciu o dane zgromadzone w tabelach Studenci i Oceny wyœwietl dane
  94. studentów, którzy uzyskali najwiêksz¹ liczbê poszczególnych ocen, z uwzglêdnieniem pozycji Brak oceny.
  95. Dane wyœwietl w sposób uporz¹dkowany w trybie nierosn¹cym po kolumnie liczba ocen
  96.  
  97. */
  98.  
  99. SELECT t1.nr_indeksu, t1.nazwisko, t1.imiona, t1.kierunek, t1.rok, t2.ocena, MAX(t2.ocena_max) AS LICZBA_OCEN FROM
  100. (SELECT nr_indeksu, nazwisko, imiona, kierunek, rok,  max_ocen FROM
  101. (SELECT nr_indeksu, nazwisko, imiona, kierunek, rok, Decode(ocena, NULL, 'Brak ocen', ocena) AS ocena, COUNT(*) AS max_ocen FROM oceny JOIN studenci USING(nr_indeksu) GROUP BY nr_indeksu, nazwisko, imiona, kierunek, rok, ocena
  102. ) GROUP BY nr_indeksu, nazwisko, imiona, kierunek, rok, max_ocen) t1
  103. JOIN
  104. (SELECT ocena, MAX(max_ocen) AS ocena_max FROM
  105. (SELECT nr_indeksu, Decode(ocena, NULL, 'Brak ocen', ocena) AS ocena, COUNT(*) AS max_ocen FROM oceny GROUP BY nr_indeksu, ocena
  106. )GROUP BY ocena) t2
  107. ON (t1.max_ocen = t2.ocena_max) GROUP BY t1.nr_indeksu, t1.nazwisko, t1.imiona, t1.kierunek, t1.rok, t2.ocena ORDER BY 7 DESC;
  108.  
  109. /* Zadanie 13
  110.  
  111. W oparciu o dane zgromadzone w tabeli Pojazdy wyœwietl uporz¹kowan¹ listê (wg kolumny liczebnosc
  112. w trybie nierosn¹cym) zawieraj¹c¹ informacjê o najbardziej popularnych modelach (najliczniejszych)
  113. pojazdów w ramach poszczególnych typów pojazdów. Zaproponuj rozwi¹zanie niezawieraj¹ce
  114. klauzuli Having
  115.  
  116. */
  117.  
  118.     SELECT TYP, MARKA, MODELL, COUNT(TYP) AS Liczbnosc
  119.       FROM POJAZDY
  120.       GROUP BY TYP, MARKA, MODELL
  121.       ORDER BY Liczbnosc DESC;
  122.  
  123. /* Zadanie 15
  124.  
  125. W oparciu o dane zgromadzone w tabelach Rejestry, Gatunki, Lowiska i Wedkarze wyœwietl zdarzenia
  126. po³owów ryb, w ramach których z³owiona ryba by³a d³u¿sza od œredniej d³ugoœci ryb tego gatunku w danym
  127. roku po³owu (np. d³ugoœæ danego sandacza z³owionego w 2018 roku nale¿y porównaæ ze œredni¹ obliczon¹
  128. z d³ugoœci wszystkich sandaczy z³owionych w 2018 r.). Dane wyœwietl uporz¹dkowane kolejno
  129. wg id_gatunku, roku po³owu (chronologicznie) i d³ugoœci ryb (nierosn¹co; patrz Rys. 15).
  130.  
  131. */
  132.  
  133. SELECT
  134.     LR.KIEDY,
  135.     LR.ID_WEDKARZA,
  136.     LR.NAZWISKO,
  137.     GG.NAZWA,
  138.     LR.LOWISKO,
  139.     LR.DLUGOSC,
  140.     LR.SREDNIA
  141. FROM
  142.     (SELECT
  143.         ID_GATUNKU,
  144.         NAZWA
  145.     FROM gatunki) GG
  146. JOIN
  147.     (SELECT
  148.         t2.kiedy AS KIEDY,
  149.         t1.id_wedkarza AS ID_WEDKARZA,
  150.         t1.nazwisko AS NAZWISKO,
  151.         t2.ID_GATUNKU AS GATUNEK,
  152.         t2.NAZWA AS LOWISKO,
  153.         t1.dlugosc AS DLUGOSC,
  154.         t2.srednia AS SREDNIA
  155.     FROM
  156.         (SELECT
  157.             ID_WEDKARZA,
  158.             nazwisko,
  159.             ID_GATUNKU,
  160.             DLUGOSC
  161.         FROM rejestry
  162.         JOIN wedkarze
  163.         USING(id_wedkarza)
  164.     ) t1
  165.     JOIN
  166.     (SELECT
  167.         ID_WEDKARZA,
  168.         EXTRACT(YEAR FROM CZAS) AS kiedy,
  169.         ID_GATUNKU,
  170.         ID_LOWISKA,
  171.         NAZWA,
  172.         round(avg(DLUGOSC), 2) AS srednia
  173.     FROM REJESTRY
  174.         JOIN LOWISKA
  175.         USING(ID_LOWISKA)
  176.         GROUP BY ID_WEDKARZA, EXTRACT(YEAR FROM CZAS), ID_GATUNKU, ID_LOWISKA, NAZWA
  177.     ) t2
  178.     ON (t1.ID_GATUNKU = t2.ID_GATUNKU)
  179.     WHERE t1.dlugosc > t2.srednia ORDER BY 4)LR
  180. ON GG.ID_GATUNKU = LR.GATUNEK ORDER BY 1, 6 DESC;
  181.  
  182.  
  183. /* Zadanie 16
  184.  
  185. W oparciu o dane zgromadzone w tabelach Rejestry i Lowiska wyœwietl listê najlepszych ³owisk w ramach
  186. poszczególnych okrêgów PZW pod wzglêdem ³¹cznej wagi wszystkich z³owionych na nich ryb.
  187. Dane wyœwietl uporz¹dkowane w trybie nierosn¹cym wg ³¹cznej wagi z³owionych ryb (patrz Rys. 16).
  188. Zaproponuj rozwi¹zanie niezawieraj¹ce klauzuli Having
  189.  
  190. */
  191.  
  192. SELECT ROOT.ID_OKREGU,
  193.        ROOT.ID_LOWISKA,
  194.        ROOT.NAZWA,
  195.        POL.polowy,
  196.        RYB.ryb
  197.   FROM (
  198.     SELECT R.ID_LOWISKA,
  199.            L.ID_OKREGU,
  200.            L.NAZWA
  201.       FROM REJESTRY R
  202.         INNER JOIN LOWISKA L ON R.ID_LOWISKA = L.ID_LOWISKA
  203.       GROUP BY R.ID_LOWISKA, L.ID_OKREGU, L.NAZWA
  204.   ) ROOT
  205.     JOIN (
  206.     SELECT ID_LOWISKA,
  207.            COUNT(ID_LOWISKA) AS polowy
  208.       FROM REJESTRY
  209.       GROUP BY ID_LOWISKA
  210.   ) POL ON ROOT.ID_LOWISKA = POL.ID_LOWISKA
  211.     JOIN (
  212.     SELECT ID_LOWISKA,
  213.            COUNT(ID_LOWISKA) AS ryb
  214.       FROM REJESTRY
  215.       WHERE ID_GATUNKU IS NOT NULL
  216.       GROUP BY ID_LOWISKA
  217.   ) RYB ON ROOT.ID_LOWISKA = RYB.ID_LOWISKA;
  218.  
  219. /* Zadanie 17
  220.  
  221. W oparciu o dane zgromadzone w tabeli Studenci utwórz zestawienie zawieraj¹ce informacjê ilu studentów
  222. studiuje w ramach danego (patrz Rys. 17):
  223. • trybu, stopnia, kierunku, roku,
  224. • trybu, stopnia, kierunku
  225. • trybu, stopnia,
  226. • trybu
  227.  
  228. */
  229.  
  230. SELECT *
  231.   FROM (
  232.     SELECT
  233.         TRYB,
  234.         STOPIEN,
  235.         KIERUNEK,
  236.         ROK,
  237.         COUNT(ROK) AS liczba_studentow
  238.       FROM STUDENCI
  239.       GROUP BY TRYB, STOPIEN, KIERUNEK, ROK
  240.   )
  241. UNION
  242. (
  243.   SELECT
  244.     TRYB,
  245.     STOPIEN,
  246.     KIERUNEK,
  247.     NULL AS ROK,
  248.     COUNT(KIERUNEK) AS liczba_studentow
  249.     FROM STUDENCI
  250.     GROUP BY TRYB, STOPIEN, KIERUNEK
  251. )
  252. UNION
  253. (
  254.   SELECT
  255.     TRYB,
  256.     STOPIEN,
  257.     NULL AS KIERUNEK,
  258.     NULL AS ROK,
  259.     COUNT(STOPIEN) AS liczba_studentow
  260.     FROM STUDENCI
  261.     GROUP BY TRYB,
  262.              STOPIEN
  263. )
  264. UNION
  265. (
  266.   SELECT
  267.         TRYB,
  268.         NULL AS STOPEN,
  269.         NULL AS KIERUNEK,
  270.         NULL AS ROK,
  271.         COUNT(TRYB) AS liczba_studentow
  272.     FROM STUDENCI
  273.     GROUP BY TRYB
  274. );
  275.  
  276. /* Zadanie 18
  277.  
  278. Sk³adniê zapytania z zadania nr 17 rozszerz o dodatkow¹ kolumnê o nazwie komentarz, w ramach której
  279. pojawi¹ siê nastêpuj¹ce informacje (patrz Rys. 18):
  280. • Na danym roku w TSK – w przypadku informacji dotycz¹cej liczby studentów studiuj¹cych
  281. na danym roku w ramach danego trybu, stopnia i kierunku studiów,
  282. • Na danym kierunku w TS – w przypadku informacji dotycz¹cej liczby studentów studiuj¹cych
  283. na danym kierunku w ramach danego tryby i stopnia studiów,
  284. • W ramach danego stopnia w T – w przypadku informacji dotycz¹cej liczby studentów studiuj¹cych
  285. na danym stopniu w ramach danego trybu studiów,
  286. • W danym trybie – w przypadku informacji dotycz¹cej liczby studentów studiuj¹cych w ramach
  287. danego trybu studiów,
  288. • Ogolem studiuje – w przypadku informacji dotycz¹cej ogólnej liczby studentów.
  289.  
  290. */
  291.  
  292. SELECT *
  293.   FROM (
  294.     SELECT
  295.         'Na danym roku w TSK' AS KOMENTARZ,
  296.         TRYB,
  297.         STOPIEN,
  298.         KIERUNEK,
  299.         ROK,
  300.         COUNT(ROK)AS liczba_studentow
  301.       FROM STUDENCI
  302.       GROUP BY TRYB, STOPIEN, KIERUNEK, ROK
  303.   )
  304. UNION
  305. (
  306.   SELECT
  307.      'Na danym kierunku w TS' AS KOMENTARZ,
  308.      TRYB,
  309.      STOPIEN,
  310.      KIERUNEK,
  311.      NULL AS ROK,
  312.      COUNT(KIERUNEK) AS liczba_studentow
  313.     FROM STUDENCI
  314.     GROUP BY TRYB, STOPIEN, KIERUNEK
  315. )
  316. UNION
  317. (
  318.   SELECT
  319.     'W ramach danego stopnia w T' AS KOMENTARZ,
  320.      TRYB,
  321.      STOPIEN,
  322.      NULL AS KIERUNEK,
  323.      NULL AS ROK,
  324.      COUNT(STOPIEN) AS liczba_studentow
  325.     FROM STUDENCI
  326.     GROUP BY TRYB,
  327.              STOPIEN
  328. )
  329. UNION
  330. (
  331.   SELECT
  332.     'W danym trybie' AS KOMENTARZ,
  333.     TRYB,
  334.     NULL AS STOPEN,
  335.     NULL AS KIERUNEK,
  336.     NULL AS ROK,
  337.     COUNT(TRYB) AS liczba_studentow
  338.     FROM STUDENCI
  339.     GROUP BY TRYB
  340. )
  341. UNION
  342. (
  343.   SELECT
  344.     'Ogolem studiuje' AS KOMENTARZ,
  345.      NULL AS TRYB,
  346.      NULL AS STOPEN,
  347.      NULL AS KIERUNEK,
  348.      NULL AS ROK,
  349.      COUNT(*) AS liczba_studentow
  350.     FROM STUDENCI
  351. );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement