5 Pytań z sql (oracle)

0

Witam.

Mam następujące pytania, które kiedyś zrobiłem ale błędnie. Chciałbym poznać jak prawidłowo wygląda odpowiedź na nie.

  1. Wyświetl markę i model samochodu wyprodukowanego w krajach, które wyprodukowały swoje samochody w tym samym roku, w którym wyprodukowano najstarszy samochód.
  2. Wyświetl nazwisko i imię autora oraz tytuł książki wydanej przez to samo wydawnictwo, w którym wydano najstarszą książkę, jaka znajduje się w wypożyczalni.
  3. Wyświetl dane klientów, którzy korzystali z wypożyczalni w czasie gdy wypożyczony był samochód marki opel.
  4. Wyświetl imiona i nazwiska klientów dla tych osób, które wypożyczyły samochód, których łączny koszt wypożyczenia był większy od największego kosztu wypożyczenia samochodu marki Opel.
  5. Uaktualnij tabele SAMOCHODY podnosząc koszt_dnia o 5% dla samochodów, których ilość wypożyczeń jest mniejsza od średniej ilości wypożyczeń samochodów wyprodukowanych w Japonii po 2010.

Tabelka dla wypozyczalni samochodów:

SAMOCHÓD


ID_SAMOCHODU
ROK_PRODUKCJI
MARKA
MODEL
KRAJ_PRODUKCJI

WYPOZYCZENIA


ID_WYPOZYCZENIA
ID_SAMOCHODU
ID_KLIENTA
WYPOZYCZONY_OD
WYPOZYCZONY_DO
KOSZT_DNIA

KLIENCI


ID_KLIENTA
IMIE
NAZWISKO

Tabelka dla biblioteki:

AUTOR


ID_AUTORA
IMIE
NAZWISKO

KSIAZKA


ID_AUTORA
ID_KSIAZKI
ID_WYDAWNICTWA
TYTUL
ROK_WYDANIA

WYDAWNICTWO


ID_WYDAWNICTWA
NAZWA

Prosiłbym o konkretne odpowiedzi, w ramach możliwości postaram się sam na to odpowiedzieć, ale proszę o darowanie sobie poszukaj itp albo inne. Liczę na współpracę lub pomoc. Z góry dziękuję.

0

podaj błędne, które zrobiłeś to poprawimy

0
abrakadaber napisał(a):

podaj błędne, które zrobiłeś to poprawimy

Było by to możliwe gdybym miał dostęp do egzaminów. Wiem że brakło mi kilka punktów i chciałbym zobaczyć poprawne. Natomiast w miarę możliwości postaram się napisać (i tak teraz nie mam nic ciekawszego do roboty) i oddać waszej weryfikacji chyba że ktoś napisze wcześniej niż ja :)

0

Odpowiedź na 6.

Odpowiedź na egzaminie była taka sama albo bardzo zbliżona do tej.

SELECT MARKA, MODEL FROM SAMOCHODY WHERE (KRAJ_PRODUKCJI == SELECT KRAJ_PRODUKCJI WHERE (ROK_PRODUKCJI == SELECT MIN(ROK PRODUKCJI))

0

SELECT A.NAZWISKO, A.IMIE, K.TYTUL
FROM AUTOR A, KSIAZA K, WYDAWNICTWO W
WHERE (A.ID_AUTORA == K.ID_AUTORA)
AND (W.ID_WYDAWNICTWA == K.ID_WYDAWNICTWA)
AND (W.ID_WYDAWNICTWA == SELECT W.ID_WYDAWNICTWA
AND (K.ROK_WYDANIA == SELECT MIN(K2.ROK_WYDANIA)
FROM KSIAZKA K2, WYDAWNICTWO W2
WHERE (K2.ID_WYDAWNICTWA == W2.ID_WYDAWNICTWA))

0

Czemu piszesz podwójne znaki równości ?
Kod jest strasznie sformatowany. Robisz nawiasy tam gdzie jest to zupełnie zbędne i wprowadza chaos, a nie robisz często tam gdzie jest to potrzebne.
Odnoszę wrażenie, że nie bardzo potrafisz posługiwać się podzapytaniami. Brakuje słów kluczowych, podzapytania nie są w nawiasie, nie stosujesz aliasów.
Sformatuj poprawnie kod, bo aż oczy bolą.

0

SELECT MARKA, MODEL
FROM SAMOCHODY
WHERE KRAJ_PRODUKCJI = SELECT KRAJ_PRODUKCJI
WHERE ROK_PRODUKCJI = (SELECT MIN(ROK_PRODUKCJI) FROM SAMOCHODY)

SELECT A.NAZWISKO, A.IMIE, K.TYTUL
FROM AUTOR A, KSIAZA K, WYDAWNICTWO W
WHERE A.ID_AUTORA = K.ID_AUTORA
AND W.ID_WYDAWNICTWA = K.ID_WYDAWNICTWA
AND W.ID_WYDAWNICTWA = SELECT W.ID_WYDAWNICTWA
AND K.ROK_WYDANIA = (SELECT MIN(K2.ROK_WYDANIA)
FROM KSIAZKA K2, WYDAWNICTWO W2
WHERE K2.ID_WYDAWNICTWA = W2.ID_WYDAWNICTWA)

Wybacz, nie pracuję w tym języku, == to nawyk z C#, poprawiłem, mam nadzieje że dobrze

0

I chciałbym dodać że nie umiem skonstruować zapytania 8. Chyba nie zrobiłem go dobrze na egzaminie, dawno tych zapytań nie pisałem.

0

Utknąłem w 8 i 9.

Tyle co napisałem

SELECT K.*
FROM KLIENCI K, WYPOZYCZENIA W
WHERE K.ID_KLIENTA = W.ID_WYPOZYCZENIA
AND W.WYPOZYCZONY_OD <= ( SELECT

SELECT K.IMIE, K.NAZWISKO
FROM KLIENCI K, WYPOZYCZENIA W, SAMOCHODY S
WHERE K.ID_KLIENTA = W.ID_KLIENTA
AND S.ID_SAMOCHODU = W.ID_SAMOCHODU
AND S.ID_SAMOCHODU = ( SELECT S2.ID_SAMOCHODU
FROM SAMOCHODY S2
WHERE

Nie wiem co dalej...

0
  1. to samo

UPDATE SAMOCHODY
SET KOSZT_DNIA = KOSZT_DNIA*1.05
WHERE

Mam problem z podzapytaniami tego typu i nie wiem za bardzo jak to zrobić ... nie wiem czy 2-3 miesiące to umiałem, ale teraz nie pamiętam i nie mogę sobie przypomnieć jak składało się podzapytania tego typu

1

Przykładowe rozwiązanie dla 8:

 
WITH OPEL_DATY AS(
SELECT wyp.WYPOZYCZONY_OD OPEL_OD, wyp.WYPOZYCZONY_DO OPEL_DO
  FROM WYPOZYCZENIA wyp
  JOIN SAMOCHOD sam
    ON sam.ID_SAMOCHODU = wyp.ID_SAMOCHODU
 WHERE UPPER(sam.MARKA) = 'OPEL')
 
SELECT DISTINCT kli.IMIE, kli.NAZWISKO
  FROM WYPOZYCZENIA wyp
  JOIN KLIENCI kli
    ON kli.ID_KLIENTA = wyp.ID_KLIENTA
 WHERE EXISTS (SELECT 1 
                 FROM OPEL_DATY opd 
                WHERE wyp.WYPOZYCZONY_OD > opd.OPEL_OD 
                  AND wyp.WYPOZYCZONY_OD < opd.OPEL_DO)

1

Dla 8 i 9, nie wiem jaki tam masz dokładnie format dat i jak dokładnie jest wyliczany 1 dzień wypożyczenia. Czy jak jest wypożyczony 25h to już jest 2 dni ? Idąc na skróty i zakładając, że 1 dzień to wypożyczenie od X do X+1 (gdzie X to dzień) mamy z grubsza tak:

 
WITH AGG_OPEL AS(
SELECT MAX((TRUNC(WYPOZYCZONY_DO,'DD') - TRUNC(WYPOZYCZONY_OD,'DD')) * KOSZT_DNIA) MAX_OPEL
  FROM WYPOZYCZENIA wyp
  JOIN SAMOCHOD sam 
    ON sam.ID_SAMOCHODU = wyp.ID_SAMOCHODU
 WHERE UPPER(sam.MARKA) = 'OPEL'
),
 
AGG_KLIENT AS(
SELECT kli.IMIE, kli.NAZWISKO, MAX((TRUNC(WYPOZYCZONY_DO,'DD') - TRUNC(WYPOZYCZONY_OD,'DD')) * KOSZT_DNIA) MAX_KLIENT
  FROM WYPOZYCZENIA wyp
  JOIN KLIENCI kli 
    ON kli.ID_KLIENTA = wyp.ID_KLIENTA
 GROUP BY kli.IMIE, kli.NAZWISKO
)

SELECT kli.IMIE, kli.NAZWISKO
  FROM AGG_KLIENT kli
 WHERE kli.MAX_KLIENT > (SELECT MAX_OPEL FROM AGG_OPEL)

Jak założenia z datami są inne, trzeba by się trochę nagimnastykować, ale nic specjalnego.

0

A zapytania 6 i 7 są poprawnie skonstruowane?

0

10 dalej nie umiem skonstruowac, nadźbałem coś takiego

SELECT S.MODEL, S.MARKA,
FROM SAMOCHODY S
JOIN WYPOZYCZENIA W
ON W.ID_SAMOCHODU = S.ID_KLIENTA

UPDATE SAMOCHODY
SET KOSZT_DNIA = KOSZT_DNIA*1.05
WHERE

Wgl po całym semestrze baz danych widzę takie komendy jak:
WITH, ON, UPPER

Nie wiem czym jest ten trunc i co w 9 robi w AGG_OPEL robi MAX_OPEL na końcu linijki, to ma prawo działać?

0

Prosiłbym tylko o pomoc w tym MAXem co pisałem i z tym zadaniem 10, reszte już uzupełniłem informacje.

0

Odświeżam...

0

Co do 10:

Uaktualnij tabele SAMOCHODY podnosząc koszt_dnia o 5% dla [..]

koszt_dnia to pole tabeli WYPOZYCZENIA, na pewno tak brzmiało zadanie?

0

Dyktowałem z pamięci akurat te tabele. Miało być w tabeli samochody.

0

Odświeżam

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