Oracle SQL - sprawdzenie wynikow

0

Diagram bazy danych znajduje się w załączniku. Czy ktoś może mi potwierdzić poprawność wykonania tych zadań? Dziękuję za pomoc!
PS. Pisane w ORACLE SQL

/* zad 1 */
/* Wstaw nowy rekord do pracowników, a w nim swoje imię i nazwisko, dzisiejszą datę, a resztę według uznania. */
INSERT INTO pracownicy VALUES (224, 'Nazwisko', 'Imie', 'A', 667, 7954, to_date(sysdate, 'dd-mm-yyyy'), 11000, 1, 10);

/* zad 2 */
/* Pokaż wszystkich pracowników, którzy mają podwładnych */
SELECT id_pracownika, nazwisko, imie
FROM pracownicy
WHERE id_pracownika IN (
  SELECT id_szefa
  FROM pracownicy
  WHERE id_szefa IS NOT NULL
);

/* zad 3 */
/* Pokaż średnie ceny dla wyrobów, nawet dla tych, które nie mają ceny. */
SELECT w.opis, avg(c.CENA_CENNIKOWA) as "srednia cena"
FROM wyroby w 
    JOIN ceny c ON c.id_produktu = w.id_produktu
GROUP BY w.OPIS;

/* zad 4 */
/* Podwoić limit kredytowy klientom, którzy w ciągu ostatniego miesiąca dokonali zamówień. */
UPDATE klienci
SET limit_kredytowy = (limit_kredytowy * 2)
WHERE id_klienta IN (
  SELECT id_klienta
  FROM zamowienia
  WHERE data_zamowienia > ADD_Months(sysdate, -1)
);


/* ---------------------------------------------------------------------- */

/* zad 2 */
/* Wyswietlic zamowienia dla klientow nie z BOSTONU */
SELECT k.id_klienta, k.miasto, z.id_zamowienia
FROM klienci k 
  JOIN zamowienia z ON k.id_klienta = z.id_klienta
WHERE k.miasto != 'DALLAS';


/* zad 3 */
/* Wyświetlić ilość pracowników na poszczególnym etacie (+ te co nie ma żadnego pracownika) */
SELECT count(p.id_pracownika) as "ilosc pracownikow", e.etat
FROM pracownicy p 
  JOIN etaty e ON p.id_etatu = e.id_etatu
GROUP BY e.etat;


/* zad 4 */
/* Zwiększyć o 10% limit kredytowy klientom, którzy mają min. 3 zamówienia */
UPDATE klienci
SET limit_kredytowy = (limit_kredytowy * 1.1)
WHERE id_klienta IN (
  SELECT z.ID_KLIENTA
  FROM klienci k
    JOIN zamowienia z ON z.id_klienta = k.id_klienta
  GROUP BY z.id_klienta
  HAVING count(k.id_klienta) >= 3
);
2

/* zad 3 /
/
Pokaż średnie ceny dla wyrobów, nawet dla tych, które nie mają ceny. /
LEFT JOIN ceny
/
Wyswietlic zamowienia dla klientow nie z BOSTONU /
W warunku masz DALLAS :)
/
Wyświetlić ilość pracowników na poszczególnym etacie (+ te co nie ma żadnego pracownika) /
LEFT JOIN etaty
/
Zwiększyć o 10% limit kredytowy klientom, którzy mają min. 3 zamówienia */
W IN niepotrzebnie używasz tabeli klienci. Same zamowienia powinny wystarczyć.

0

Dlaczego LEFT JOIN, a nie samo JOIN?
Skąd mam wiedzieć która to LEWA tabela, a która PRAWA? Skoro mogą mieć różny układ na diagramie ERD?

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