Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Zad.1
- INSERT INTO pracownicy VALUES(2307,'Balwierczak','Pawel','Q',667,7902,SYSDATE,800,NULL,20);
- INSERT INTO pracownicy VALUES(2307,'Balwierczak','Pawel','Q',667,7902,TO_DATE('18/07/12', 'YY/MM/DD'),800,NULL,20);
- ##################
- DODATKOWE
- zad.1
- UPDATE artykul SET cena=cena-10
- WHERE nazwa LIKE '%parasol%';
- zad.2
- SELECT a.nazwa, NVL(SUM(p.ilosc),0)
- FROM pozycja p
- right join artykul a ON p.id_artykulu=a.id_artykulu
- GROUP BY a.nazwa;
- zad.3
- UPDATE klienci k
- SET k.limit_kredytowy = k.limit_kredytowy +10*(SELECT COUNT(z.id_zamowienia) FROM zamowienia z
- join klienci k1 ON z.id_klienta = k1.id_klienta
- WHERE k1.id_klienta = k.id_klienta);
- zad.4 (wyświetlić pracowników bez podwładnych)
- SELECT * FROM pracownicy p
- WHERE p.id_pracownika NOT IN (
- SELECT p.id_szefa FROM pracownicy p);
- zad.5(nazwa wyrobu, cene i dochod laczny w poprzednim roku)
- SELECT wyroby.id_produktu, wyroby.opis, AVG(ceny.cena_cennikowa), SUM(wiersze_zamowien.wartosc) FROM zamowienia
- JOIN wiersze_zamowien ON zamowienia.id_zamowienia = wiersze_zamowien.id_zamowienia AND TO_CHAR(zamowienia.data_zamowienia, 'YYYY') = TO_CHAR(ADD_MONTHS('1991-01-01', -12), 'YYYY')
- RIGHT JOIN wyroby ON wyroby.id_produktu = wiersze_zamowien.id_produktu
- JOIN ceny ON ceny.id_produktu = wyroby.id_produktu
- GROUP BY wyroby.id_produktu, wyroby.opis;
- ####################
- STARE
- ZESTAW 1
- 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 (1234,'NAZWISKO','IMIE','Q',667,7902,TO_DATE('2016/07/05', 'YYYY/MM/DD'),800,NULL,20);
- 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
- );
- 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 cennikowa", AVG (c.cena_minimalna) AS "średnia cena minimalna"
- FROM wyroby w
- left join ceny c ON c.id_produktu=w.id_produktu
- GROUP BY w.opis
- ORDER BY w.opis
- 4. Podwoić limit kredytowy klientom, którzy w ciągu ostatniego miesiąca dokonali zamówień. (jakoś tak)
- UPDATE klienci
- SET limit_kredytowy = limit_kredytowy*2
- WHERE id_klienta IN
- (
- SELECT id_klienta
- FROM zamowienia
- WHERE data_zamowienia > '90/10/19'
- );
- ZESTAW 2
- 1. Dodać rekord ze swoimi danymi (imię, nazwisko a reszta dowolna)
- INSERT INTO pracownicy
- VALUES (1234,'NAZWISKO','IMIE','Q',667,7902,TO_DATE('2016/07/05', 'YYYY/MM/DD'),800,NULL,20);
- 2. Wyświetlić zamówienia dla klientów nie z bostonu
- SELECT k.id_klienta, k.miasto, z.id_zamowienia
- FROM klienci k
- LEFT JOIN zamowienia z ON k.id_klienta = z.id_klienta
- WHERE k.miasto != 'BOSTON';
- 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
- left join etaty e ON p.id_etatu = e.id_etatu
- GROUP BY e.etat
- 4. Zwiększyć o 10% limit kredytowy klientom, którzy mają MIN. 3 zamówienia
- UPDATE klienci
- SET limit_kredytowy = limit_kredytowy*0.1 + limit_kredytowy
- WHERE id_klienta IN
- (
- SELECT k.id_klienta
- FROM klienci k, zamowienia z
- WHERE z.id_klienta = k.id_klienta
- GROUP BY k.id_klienta
- HAVING COUNT(k.id_klienta) >= 3
- );
- ZESTAW 3
- 1. INSERT
- INSERT INTO pracownicy
- VALUES (1234,'NAZWISKO','IMIE','Q',667,7902,TO_DATE('2016/07/05', 'YYYY/MM/DD'),800,NULL,20);
- 2. wskaż wydziały, które posiadają tylko jednego pracownika
- SELECT w.nazwa, COUNT(p.id_wydzialu) AS "ilosc pracownikow"
- FROM pracownicy p, wydzialy w
- WHERE p.id_wydzialu=w.id_wydzialu
- GROUP BY w.nazwa
- HAVING COUNT(p.id_wydzialu) = 1
- 3. wskaż pracowników, który mają największe obroty (? coś takiego)
- SELECT p.id_pracownika, p.imie, p.nazwisko, SUM(z.wartosc) AS wartosc
- FROM pracownicy p
- join klienci k ON p.id_pracownika= k.id_pracownika
- join zamowienia z ON z.ID_KLIENTA = k.id_klienta
- GROUP BY p.id_pracownika, p.imie, p.nazwisko
- ORDER BY dupa DESC;
- 4. Podnieść płące pracowników, którzy mają więcej niż 2 klientów (nie pamiętam o ile)
- UPDATE pracownicy
- SET pensja = pensja + 300
- WHERE id_pracownika IN
- (
- SELECT p.id_pracownika
- FROM pracownicy p, klienci k
- WHERE k.id_pracownika=p.id_pracownika
- GROUP BY p.id_pracownika
- HAVING COUNT(k.id_pracownika) > 2
- );
- ZESTAW 4
- 1. INSERT
- INSERT INTO pracownicy
- VALUES (1234,'NAZWISKO','IMIE','Q',667,7902,TO_DATE('2016/07/05', 'YYYY/MM/DD'),800,NULL,20);
- 2. Wyświetlić MAX i MIN zamówień dla poszczególnych klientow.
- SELECT k.nazwa, MIN(z.wartosc) AS "MIN", MAX(Z.WARTOSC) AS "MAX"
- FROM ZAMOWIENIA Z, KLIENCI K
- WHERE k.id_klienta=Z.id_klienta
- GROUP BY K.NAZWA
- 3. Wyświetlić miasto(chyba), nazwę klienta, ilość sprzedaży i średnią sprzedaży, coś w tym stylu
- SELECT k.miasto, K.NAZWA, COUNT(Z.ID_ZAMOWIENIA), AVG(Z.WARTOSC)
- FROM ZAMOWIENIA Z, KLIENCI K
- WHERE k.id_klienta=Z.id_klienta
- GROUP BY K.MIASTO, K.NAZWA
- 4. Zwiększyć pensje pracowników w dziale "SALES" o 1%, jak dobrze pamiętam
- UPDATE pracownicy
- SET pensja = pensja + pensja*0.01
- WHERE id_pracownika IN
- (
- SELECT p.id_pracownika
- FROM pracownicy p, wydzialy w
- WHERE p.id_wydzialu = w.id_wydzialu
- AND w.nazwa = 'SALES'
- );
- ########################
- NOWE
- --grupa A
- INSERT INTO pracownicy VALUES(40,'JANICKI','KRZYSZTOF','A',667,7902,SYSDATE,2000,200,20);
- SELECT s.id_siedziby,s.region,COUNT(w.id_wydzialu) FROM siedziby s
- join wydzialy w ON s.id_siedziby = w.id_siedziby
- GROUP BY s.id_siedziby,s.region HAVING COUNT (w.id_wydzialu)<=1;
- SELECT w.id_produktu,w.opis,c.cena_cennikowa,SUM(wz.wartosc) FROM wyroby w
- left join ceny c ON w.id_produktu = c.id_produktu
- left join wiersze_zamowien wz ON w.id_produktu = wz.id_produktu
- left join zamowienia z ON wz.ID_ZAMOWIENIA = z.id_zamowienia
- GROUP BY w.id_produktu,w.opis,c.cena_cennikowa;
- UPDATE pracownicy
- SET pensja = pensja*0.95
- WHERE id_pracownika IN (
- SELECT p.id_pracownika FROM pracownicy p
- join klienci k ON p.id_pracownika = k.id_pracownika
- join zamowienia z ON k.id_klienta = z.ID_KLIENTA
- WHERE z.data_zamowienia <TO_DATE('1990/02/01','YY/MM/DD')
- AND z.data_zamowienia >TO_DATE('1990/01/01','YY/MM/DD')
- GROUP BY p.id_pracownika HAVING SUM(z.wartosc) < 500);
- --grupa B
- INSERT INTO pracownicy VALUES (41,'JANICKI','KRZYSZTOF','A',667,7902,SYSDATE,2000,200,20);
- SELECT z.id_zamowienia,z.data_zamowienia,z.id_klienta FROM zamowienia z
- join wiersze_zamowien wz ON z.id_zamowienia = wz.id_zamowienia
- GROUP BY z.id_zamowienia,z.data_zamowienia,z.id_klienta HAVING COUNT(wz.id_zamowienia) = 1;
- SELECT * FROM (SELECT w.id_produktu,w.opis FROM wyroby w
- join wiersze_zamowien wz ON w.id_produktu = wz.id_produktu
- GROUP BY w.id_produktu,w.opis
- ORDER BY COUNT(wz.id_produktu) DESC)
- WHERE ROWNUM <=3;
- UPDATE pracownicy
- SET prowizja = prowizja *1.02
- WHERE
- id_pracownika IN (SELECT p.id_pracownika FROM pracownicy p
- join etaty e ON p.id_etatu = e.id_etatu
- WHERE e.etat ='SALESPERSON')
- AND
- id_pracownika IN (SELECT p.id_szefa FROM pracownicy p);
- --grupa C
- INSERT INTO pracownicy VALUES (42,'JANICKI','KRZYSZTOF','A',667,7902,SYSDATE,2000,200,20);
- SELECT p.id_pracownika FROM pracownicy p
- MINUS
- SELECT p1.id_szefa FROM pracownicy p1;
- --mysle ze to wyzej wystarczy ale mozna to rozbudowac do postaci
- SELECT * FROM pracownicy
- WHERE id_pracownika IN (
- SELECT p.id_pracownika FROM pracownicy p
- MINUS
- SELECT p1.id_szefa FROM pracownicy p1);
- SELECT k.nazwa,COUNT(z.id_zamowienia),AVG(z.wartosc) FROM klienci k
- left join zamowienia z ON k.id_klienta = z.id_klienta
- GROUP BY k.miasto,k.nazwa;
- UPDATE pracownicy
- SET prowizja = prowizja * 1.01
- WHERE id_pracownika IN(
- SELECT p.id_pracownika FROM pracownicy p
- join wydzialy w ON p.id_wydzialu = w.ID_wydzialu
- WHERE w.nazwa != 'SALES');
- --grupa D
- INSERT INTO pracownicy VALUES(43,'JANICKI','KRZYSZTOF','A',667,7902,SYSDATE,2000,200,20);
- SELECT w.id_wydzialu,w.nazwa FROM wydzialy w
- left join pracownicy p ON p.id_wydzialu = w.ID_WYDZIALU
- GROUP BY w.id_wydzialu,w.nazwa HAVING COUNT(p.id_wydzialu) < 1;
- SELECT * FROM (SELECT p.nazwisko,p.imie,w.nazwa,SUM(z.wartosc) AS obroty FROM pracownicy p
- join etaty e ON p.id_etatu = e.id_etatu
- join wydzialy w ON p.id_wydzialu = w.id_wydzialu
- join klienci k ON p.id_pracownika = k.id_pracownika
- join zamowienia z ON k.id_klienta = z.id_klienta
- WHERE e.etat = 'SALESPERSON'
- GROUP BY p.nazwisko,p.imie,w.nazwa
- ORDER BY SUM(z.wartosc))
- WHERE ROWNUM <=1;
- UPDATE pracownicy
- SET pensja = pensja * 1.1
- WHERE id_pracownika IN (SELECT p.id_pracownika FROM pracownicy p
- join klienci k ON p.id_pracownika = k.id_pracownika
- join etaty e ON p.id_etatu = e.id_etatu
- WHERE e.etat = 'SALESPERSON'
- GROUP BY p.id_pracownika HAVING COUNT(k.id_klienta)>2);
- --grupa E
- INSERT INTO klienci VALUES (44,'KRZYSZTOF JANICKI',NULL,NULL,NULL,NULL,NULL,NULL,7902,10,NULL);
- INSERT INTO klienci(id_klienta,nazwa,id_pracownika,limit_kredytowy) VALUES (45,'KRZYSZTOF JANICKI',7902,10);
- SELECT * FROM (
- SELECT p.id_pracownika,p.imie,p.nazwisko,p.pensja FROM pracownicy p
- ORDER BY p.pensja DESC)
- WHERE ROWNUM <=3;
- SELECT * FROM(
- SELECT p.nazwisko,p.imie,w.nazwa,SUM(z.wartosc) AS obroty FROM pracownicy p
- join wydzialy w ON p.id_wydzialu = w.id_wydzialu
- join klienci k ON p.id_pracownika = k.id_pracownika
- join zamowienia z ON k.id_klienta = z.id_klienta
- join etaty e ON p.id_etatu = e.id_etatu
- WHERE e.etat = 'SALESPERSON'
- GROUP BY p.nazwisko,p.imie,w.nazwa
- ORDER BY SUM(z.wartosc) DESC)
- WHERE ROWNUM <=1;
- UPDATE pracownicy
- SET prowizja = prowizja * 1.02
- WHERE id_pracownika IN(
- SELECT p.id_pracownika FROM pracownicy p
- join klienci k ON p.id_pracownika = k.id_pracownika
- GROUP BY p.id_pracownika HAVING COUNT(k.id_klienta) >=1);
- --grupa F
- INSERT INTO pracownicy VALUES (46,'JANICKI','KRZYSZTOF','A',667,7902,SYSDATE,2000,200,20);
- SELECT z.id_zamowienia,z.data_zamowienia FROM zamowienia z
- join klienci k ON z.id_klienta = k.id_klienta
- WHERE k.miasto = 'BOSTON';
- SELECT e.id_etatu,e.etat,AVG(p.pensja) FROM etaty e
- left join pracownicy p ON e.id_etatu = p.id_etatu
- GROUP BY e.id_etatu,e.etat;
- UPDATE klienci k
- SET k.limit_kredytowy = k.limit_kredytowy +10*(SELECT COUNT(z.id_zamowienia) FROM zamowienia z
- join klienci k1 ON z.id_klienta = k1.id_klienta
- WHERE k1.id_klienta = k.id_klienta);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement