Potrzebuję pomocy z zapytaniami, Zadania akademickie

0

Witam.
Mam problem z napisaniem kilku kwerend code do bazy danych Wampirów (na dole podaję komendy Create Table i Insert).
Czy moglibyście mi pomóc?

Zad. 15. Znaleźć wampiry, które znają tyle samo języków obcych co posiadają sprawności.

Wampir Liczba


Bolek 1
Czerwony 2
Gacek 1
Komar 1
Opoj 3
Pijawka 1
Zyleta 1
Zadanie powinno zostać wykonane za pomocą pod zapytań a nie JOINów

Zad. 18. Wyświetlić uporządkowane malejąco trzy największe objętości donacji wraz z pseudonimami dawców, od których donacje pochodzą (zastosować podzapytanie skorelowane).

Objetosc Dawca


   703 Wytrawny
   680 Miodzio
   644 Miodzio

Zad. 19. Określić pseudonimy i grupy krwi dawców, od których pobierały krew wampiry znające język polski. Zadanie rozwiązać na dwa sposoby: wykorzystując wyłącznie podzapytania oraz wyłącznie złączenia relacji. W tym drugim przypadku wyświetlić dodatkowo pseudonimy wampirów pobierających krew. Wyjaśnić dlaczego w pierwszym przypadku było to niemożliwe. Wyjaśnić także różnicę w wyniku. (Tylko wersję z podzapytaniami).

Jeszcze pytanie. Dlaczego to zapytanie jest niepoprawne?

-- zad 19 A
select dawcy.pseudo_dawcy "Dawca", dawcy.grupa_krwi "Grupa" from dawcy 
where dawcy.pseudo_dawcy = 
(
  select donacje.pseudo_dawcy from donacje 
  where donacje.pseudo_wampira = 
  (
    select wampiry.pseudo_wampira from wampiry
    where wampiry.pseudo_wampira = 
    (
      select jezyki_obce_w.pseudo_wampira from jezyki_obce_w
      where jezyki_obce_w.jezyk_obcy = 'polski'
    )
  )
);

Zad. 20. Sprawdzić, czy istniał rok, w którym do Rodziny wstąpił więcej niż jeden wampir. Wyświetlić lata wstąpienia i pseudonimy takich wampirów (wykorzystać podzapytanie).

Wampir Rok wstapienia


Komar 1911
Zyleta 1911

Create table:

CREATE TABLE Wampiry(
    pseudo_wampira VARCHAR2(15) CONSTRAINT wa_pk PRIMARY KEY,
    wampir_w_rodzinie DATE NOT NULL,
    plec_wampira CHAR(1) NOT NULL CONSTRAINT wa_plec CHECK (plec_wampira IN ('K','M')),
    pseudo_szefa VARCHAR2(15) CONSTRAINT wa_fk_wa REFERENCES Wampiry(pseudo_wampira)
);

CREATE TABLE Dawcy
(pseudo_dawcy VARCHAR2(15) CONSTRAINT da_pk PRIMARY KEY,
 rocznik_dawcy NUMBER(4) NOT NULL,
 plec_dawcy CHAR(1) NOT NULL CONSTRAINT da_plec
                     CHECK (plec_dawcy IN ('K','M')),
 grupa_krwi VARCHAR2(2) NOT NULL  CONSTRAINT da_grupa
                   CHECK (grupa_krwi IN ('0','A','B','AB')));

CREATE TABLE Sprawnosci
(sprawnosc VARCHAR2(20) CONSTRAINT sp_pk PRIMARY KEY);

CREATE TABLE Jezyki_obce
(jezyk_obcy VARCHAR2(25) CONSTRAINT jo_pk PRIMARY KEY);
CREATE TABLE Sprawnosci_w
(pseudo_wampira VARCHAR2(15) CONSTRAINT sw_fk_wa
                     REFERENCES Wampiry(pseudo_wampira),
 sprawnosc VARCHAR2(20) CONSTRAINT sw_fk_sp
                     REFERENCES Sprawnosci(sprawnosc),
 sprawnosc_od DATE NOT NULL,
 CONSTRAINT sw_pk PRIMARY KEY (pseudo_wampira,sprawnosc));

CREATE TABLE Jezyki_obce_w
(pseudo_wampira VARCHAR2(15) CONSTRAINT jw_fk_wa
                     REFERENCES Wampiry(pseudo_wampira),
 jezyk_obcy VARCHAR2(25) CONSTRAINT jw_fk_jo
                     REFERENCES Jezyki_obce(jezyk_obcy),
 jezyk_obcy_od DATE NOT NULL,
 CONSTRAINT jw_pk PRIMARY KEY (pseudo_wampira,jezyk_obcy));

CREATE TABLE Zlecenia(
    nr_zlecenia NUMBER(6) CONSTRAINT zl_pk PRIMARY KEY CONSTRAINT zl_n_z CHECK (nr_zlecenia>0),
    data_zlecenia DATE NOT NULL,
    pseudo_wampira VARCHAR2(15) NOT NULL CONSTRAINT zl_fk_wa REFERENCES Wampiry(pseudo_wampira)
);

CREATE TABLE Donacje
(nr_zlecenia NUMBER(6) CONSTRAINT do_fk_zl
                     REFERENCES Zlecenia(nr_zlecenia),
 pseudo_dawcy VARCHAR2(15) CONSTRAINT do_fk_da
                     REFERENCES Dawcy(pseudo_dawcy),
 data_oddania DATE NOT NULL,
 ilosc_krwi NUMBER(3) CONSTRAINT do_ilosc
                     CHECK (ilosc_krwi>0),
 pseudo_wampira VARCHAR2(15) CONSTRAINT do_fk_wa
                     REFERENCES Wampiry(pseudo_wampira),
 data_wydania DATE,
 CONSTRAINT do_pk PRIMARY KEY (nr_zlecenia,pseudo_dawcy),
 CONSTRAINT do_data_wyd_data_odd
                     CHECK (data_wydania>=data_oddania));

Insert:

ALTER SESSION SET NLS_DATE_FORMAT='DD.MM.YYYY';
INSERT INTO Wampiry VALUES('Drakula','12.12.1217','M',NULL);
INSERT INTO Wampiry VALUES('Opoj','07.11.1777','M','Drakula');
INSERT INTO Wampiry VALUES('Wicek','11.11.1721','M','Drakula');
INSERT INTO Wampiry VALUES('Baczek','13.04.1855','M','Opoj');
INSERT INTO Wampiry VALUES('Bolek','31.05.1945','M','Opoj');
INSERT INTO Wampiry VALUES('Gacek','21.02.1891','M','Wicek');
INSERT INTO Wampiry VALUES('Pijawka','03.11.1901','K','Wicek');
INSERT INTO Wampiry VALUES('Czerwony','13.09.1823','M','Wicek');
INSERT INTO Wampiry VALUES('Komar','23.07.1911','M','Wicek');
INSERT INTO Wampiry VALUES('Zyleta','23.09.1911','K','Opoj');
INSERT INTO Wampiry VALUES('Predka','29.03.1877','K','Drakula');

INSERT INTO Zlecenia VALUES(221,'04.07.2005','Opoj');
INSERT INTO Zlecenia VALUES(222,'04.07.2005','Baczek');
INSERT INTO Zlecenia VALUES(223,'17.07.2005','Bolek');
INSERT INTO Zlecenia VALUES(224,'22.07.2005','Opoj');
INSERT INTO Zlecenia VALUES(225,'01.08.2005','Pijawka');
INSERT INTO Zlecenia VALUES(226,'07.08.2005','Gacek');

INSERT INTO Dawcy VALUES('Slodka',1966,'K','AB');
INSERT INTO Dawcy VALUES('Miodzio',1983,'M','B');
INSERT INTO Dawcy VALUES('Gorzka',1958,'K','0');
INSERT INTO Dawcy VALUES('Lolita',1987,'K','0');
INSERT INTO Dawcy VALUES('Wytrawny',1971,'M','A');
INSERT INTO Dawcy VALUES('Okocim',1966,'M','B');
INSERT INTO Dawcy VALUES('Adonis',1977,'M','AB');
INSERT INTO Dawcy VALUES('Zywiec',1969,'M','A');
INSERT INTO Dawcy VALUES('Eliksir',1977,'M','0');
INSERT INTO Dawcy VALUES('Zenek',1959,'M','B');
INSERT INTO Dawcy VALUES('Zoska',1963,'K','0');
INSERT INTO Dawcy VALUES('Czerwonka',1953,'M','A');

INSERT INTO Donacje VALUES(221,'Slodka','04.07.2005',455,'Drakula','06.08.2005');
INSERT INTO Donacje VALUES(221,'Miodzio','04.07.2005',680,'Gacek','15.08.2005');
INSERT INTO Donacje VALUES(221,'Gorzka','05.07.2005',471,'Pijawka','11.08.2005');
INSERT INTO Donacje VALUES(221,'Lolita','05.07.2005',340,'Czerwony','21.08.2005');
INSERT INTO Donacje VALUES(222,'Wytrawny','07.07.2005',703,'Drakula','17.07.2005');
INSERT INTO Donacje VALUES(222,'Okocim','07.07.2005',530,'Komar','01.09.2005');
INSERT INTO Donacje VALUES(222,'Adonis','08.07.2005',221,'Zyleta','11.09.2005');
INSERT INTO Donacje VALUES(223,'Zywiec','17.07.2005',587,'Wicek','18.09.2005');
INSERT INTO Donacje VALUES(224,'Gorzka','22.07.2005',421,'Drakula','23.08.2005');
INSERT INTO Donacje VALUES(224,'Eliksir','25.07.2005',377,'Predka','26.07.2005');
INSERT INTO Donacje VALUES(225,'Zenek','04.08.2005',600,'Opoj','15.08.2005');
INSERT INTO Donacje VALUES(225,'Zoska','06.08.2005',450,NULL,NULL);
INSERT INTO Donacje VALUES(226,'Czerwonka','10.08.2005',517,'Pijawka','30.09.2005');
INSERT INTO Donacje VALUES(226,'Miodzio','11.08.2005',644,NULL,NULL);

INSERT INTO Sprawnosci VALUES('podryw');
INSERT INTO Sprawnosci VALUES('gorzala');
INSERT INTO Sprawnosci VALUES('kasa');
INSERT INTO Sprawnosci VALUES('przymus');
INSERT INTO Sprawnosci VALUES('niesmiertelnosc');

INSERT INTO Sprawnosci_w VALUES('Drakula','podryw','12.12.1217');
INSERT INTO Sprawnosci_w VALUES('Drakula','gorzala','12.12.1217');
INSERT INTO Sprawnosci_w VALUES('Wicek','kasa','11.11.1721');
INSERT INTO Sprawnosci_w VALUES('Wicek','przymus','07.01.1771');
INSERT INTO Sprawnosci_w VALUES('Opoj','podryw','07.11.1777');
INSERT INTO Sprawnosci_w VALUES('Czerwony','niesmiertelnosc','13.09.1823');
INSERT INTO Sprawnosci_w VALUES('Drakula','kasa','13.09.1823');
INSERT INTO Sprawnosci_w VALUES('Opoj','gorzala','11.12.1844');
INSERT INTO Sprawnosci_w VALUES('Baczek','gorzala','13.04.1855');
INSERT INTO Sprawnosci_w VALUES('Drakula','przymus','14.06.1857');
INSERT INTO Sprawnosci_w VALUES('Drakula','niesmiertelnosc','21.08.1858');
INSERT INTO Sprawnosci_w VALUES('Opoj','przymus','15.07.1861');
INSERT INTO Sprawnosci_w VALUES('Wicek','gorzala','19.01.1866');
INSERT INTO Sprawnosci_w VALUES('Predka','podryw','29.03.1877');
INSERT INTO Sprawnosci_w VALUES('Czerwony','kasa','03.02.1891');
INSERT INTO Sprawnosci_w VALUES('Gacek','kasa','21.02.1891');
INSERT INTO Sprawnosci_w VALUES('Pijawka','podryw','03.11.1901');
INSERT INTO Sprawnosci_w VALUES('Komar','gorzala','23.07.1911');
INSERT INTO Sprawnosci_w VALUES('Zyleta','przymus','23.09.1911');
INSERT INTO Sprawnosci_w VALUES('Bolek','gorzala','31.05.1945');

INSERT INTO Jezyki_obce VALUES('niemiecki');
INSERT INTO Jezyki_obce VALUES('wegierski');
INSERT INTO Jezyki_obce VALUES('bulgarski');
INSERT INTO Jezyki_obce VALUES('rosyjski');
INSERT INTO Jezyki_obce VALUES('portugalski');
INSERT INTO Jezyki_obce VALUES('francuski');
INSERT INTO Jezyki_obce VALUES('angielski');
INSERT INTO Jezyki_obce VALUES('polski');
INSERT INTO Jezyki_obce VALUES('hiszpanski');
INSERT INTO Jezyki_obce VALUES('czeski');
INSERT INTO Jezyki_obce VALUES('wloski');
INSERT INTO Jezyki_obce VALUES('szwedzki');

INSERT INTO Jezyki_obce_w VALUES('Drakula','niemiecki','12.12.1217');
INSERT INTO Jezyki_obce_w VALUES('Drakula','wegierski','12.12.1217');
INSERT INTO Jezyki_obce_w VALUES('Drakula','bulgarski','03.04.1455');
INSERT INTO Jezyki_obce_w VALUES('Wicek','rosyjski','11.11.1721');
INSERT INTO Jezyki_obce_w VALUES('Opoj','portugalski','07.11.1777');
INSERT INTO Jezyki_obce_w VALUES('Czerwony','francuski','13.09.1823');
INSERT INTO Jezyki_obce_w VALUES('Drakula','angielski','13.09.1823');
INSERT INTO Jezyki_obce_w VALUES('Wicek','polski','18.08.1835');
INSERT INTO Jezyki_obce_w VALUES('Opoj','hiszpanski','12.03.1851');
INSERT INTO Jezyki_obce_w VALUES('Baczek','czeski','13.04.1855');
INSERT INTO Jezyki_obce_w VALUES('Wicek','niemiecki','11.06.1869');
INSERT INTO Jezyki_obce_w VALUES('Wicek','wloski','14.03.1873');
INSERT INTO Jezyki_obce_w VALUES('Predka','czeski','29.03.1877');
INSERT INTO Jezyki_obce_w VALUES('Opoj','polski','13.09.1883');
INSERT INTO Jezyki_obce_w VALUES('Czerwony','rosyjski','23.11.1888');
INSERT INTO Jezyki_obce_w VALUES('Gacek','polski','21.02.1891');
INSERT INTO Jezyki_obce_w VALUES('Predka','niemiecki','07.06.1894');
INSERT INTO Jezyki_obce_w VALUES('Baczek','angielski','04.12.1899');
INSERT INTO Jezyki_obce_w VALUES('Pijawka','angielski','03.11.1901');
INSERT INTO Jezyki_obce_w VALUES('Komar','szwedzki','23.07.1911');
INSERT INTO Jezyki_obce_w VALUES('Zyleta','angielski','23.09.1911');
INSERT INTO Jezyki_obce_w VALUES('Bolek','francuski','31.05.1945');

SELECT * FROM Wampiry;
SELECT * FROM Zlecenia;
SELECT * FROM Dawcy;
SELECT * FROM Donacje;
SELECT * FROM Sprawnosci;
SELECT * FROM Sprawnosci_w;
SELECT * FROM Jezyki_obce;
SELECT * FROM Jezyki_obce_w;

Z góry dziękuję za rozwiązania i drobne komentarze do nich :)
Pozdrawiam :)

0
REGULAMIN napisał(a)

Zabronione jest umieszczanie w postach prośby o rozwiązanie zadań domowych, zadań zaliczeniowych. Lenistwo nie jest tolerowane. Można poprosić o rozwiązanie konkretnego problemu, a nie całego zadania, paru zadań.

0
MAGx2 napisał(a)

z góry dziękuję za rozwiązania i drobne komentarze do nich :)
Pozdrawiam :)

Przepraszam, że zapytam.... Widzę treść pięciu zadań - gdzie jakiś konkretny problem?

0
madmike napisał(a)
MAGx2 napisał(a)

z góry dziękuję za rozwiązania i drobne komentarze do nich :)
Pozdrawiam :)

Przepraszam, że zapytam.... Widzę treść pięciu zadań - gdzie jakiś konkretny problem?

Tutaj:

 -- zad 19 A
select dawcy.pseudo_dawcy "Dawca", dawcy.grupa_krwi "Grupa" from dawcy 
where dawcy.pseudo_dawcy = 
(
  select donacje.pseudo_dawcy from donacje 
  where donacje.pseudo_wampira = 
  (
    select wampiry.pseudo_wampira from wampiry
    where wampiry.pseudo_wampira = 
    (
      select jezyki_obce_w.pseudo_wampira from jezyki_obce_w
      where jezyki_obce_w.jezyk_obcy = 'polski'
    )
  )
);

Zamiast = powinno byc IN

btw nie 5 a 4 :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1