5 Pytań z sql (oracle)

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ę.

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
0

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


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
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))

BA
  • Rejestracja:około 9 lat
  • Ostatnio:około 6 lat
  • Postów:33
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

BA
6) Jest niepoprawnie zapisana, 2 warunki where oraz zle zrobione podzapytanie. 7) To samo
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

BA
  • Rejestracja:około 9 lat
  • Ostatnio:około 6 lat
  • Postów:33
1

Przykładowe rozwiązanie dla 8:

Kopiuj
 
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)

BA
  • Rejestracja:około 9 lat
  • Ostatnio:około 6 lat
  • Postów:33
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:

Kopiuj
 
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...

HI
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 18 godzin
  • Postów:1855
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

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)